نمایش نتایج 1 تا 9 از 9

نام تاپیک: Get HDD Serial number

  1. #1
    کاربر تازه وارد
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    اصفهان
    پست
    62

    Get HDD Serial number

    سلام دوستان گرامی
    طی پست های گذشته دیدم که تعدادی ار دوستان نیاز به گرفتن شماره سریال دیسک سخت داشتند. ولی اغلب روال های ارائه شده مربوط به گرفتن شماره سریال درایو ها بود و با فرمت یا غالب بندی مجدد دیسک سخت این سریال ها عوض می شوند!
    من قطعه کدی می گذارم براتون که بتونید شماره سریال سخت افزاری رو دریافت کنید. توجه داشته باشید که سریال هاردهای SATA طول بیشتری نسبت به IDE ها داره.
    البته توضیحات هم داره که زیاد گنگ نیاشه.


    function GetIdeSerialNumber : string;
    const IDENTIFY_BUFFER_SIZE = 512;
    type
    TIDERegs = packed record
    bFeaturesReg : BYTE; // Used for specifying SMART "commands".
    bSectorCountReg : BYTE; // IDE sector count register
    bSectorNumberReg : BYTE; // IDE sector number register
    bCylLowReg : BYTE; // IDE low order cylinder value
    bCylHighReg : BYTE; // IDE high order cylinder value
    bDriveHeadReg : BYTE; // IDE drive/head register
    bCommandReg : BYTE; // Actual IDE command.
    bReserved : BYTE; // reserved for future use. Must be zero.
    end;
    TSendCmdInParams = packed record
    // Buffer size in bytes
    cBufferSize : DWORD;
    // Structure with drive register values.
    irDriveRegs : TIDERegs;
    // Physical drive number to send command to (0,1,2,3).
    bDriveNumber : BYTE;
    bReserved : Array[0..2] of Byte;
    dwReserved : Array[0..3] of DWORD;
    bBuffer : Array[0..0] of Byte; // Input buffer.
    end;
    TIdSector = packed record
    wGenConfig : Word;
    wNumCyls : Word;
    wReserved : Word;
    wNumHeads : Word;
    wBytesPerTrack : Word;
    wBytesPerSector : Word;
    wSectorsPerTrack : Word;
    wVendorUnique : Array[0..2] of Word;
    sSerialNumber : Array[0..19] of CHAR;
    wBufferType : Word;
    wBufferSize : Word;
    wECCSize : Word;
    sFirmwareRev : Array[0..7] of Char;
    sModelNumber : Array[0..39] of Char;
    wMoreVendorUnique : Word;
    wDoubleWordIO : Word;
    wCapabilities : Word;
    wReserved1 : Word;
    wPIOTiming : Word;
    wDMATiming : Word;
    wBS : Word;
    wNumCurrentCyls : Word;
    wNumCurrentHeads : Word;
    wNumCurrentSectorsPerTrack : Word;
    ulCurrentSectorCapacity : DWORD;
    wMultSectorStuff : Word;
    ulTotalAddressableSectors : DWORD;
    wSingleWordDMA : Word;
    wMultiWordDMA : Word;
    bReserved : Array[0..127] of BYTE;
    end;
    PIdSector = ^TIdSector;
    TDriverStatus = packed record
    // Error code from driver, or 0 if no error.
    bDriverError : Byte;
    // Contents of IDE Error register. Only valid when bDriverError is SMART_IDE_ERROR.
    bIDEStatus : Byte;
    bReserved : Array[0..1] of Byte;
    dwReserved : Array[0..1] of DWORD;
    end;
    TSendCmdOutParams = packed record
    // Size of bBuffer in bytes
    cBufferSize : DWORD;
    // Driver status structure.
    DriverStatus : TDriverStatus;
    // Buffer of arbitrary length in which to store the data read from the drive.
    bBuffer : Array[0..0] of BYTE;
    end;

    var hDevice : THandle;
    cbBytesReturned : DWORD;
    ptr : PChar;
    SCIP : TSendCmdInParams;
    aIdOutCmd : Array [0..(SizeOf(TSendCmdOutParams)+IDENTIFY_BUFFER_SIZE-1)-1] of Byte;
    IdOutCmd : TSendCmdOutParams absolute aIdOutCmd;

    procedure ChangeByteOrder( var Data; Size : Integer );
    var ptr : PChar;
    i : Integer;
    c : Char;
    begin
    ptr := @Data;
    for i := 0 to (Size shr 1)-1 do
    begin
    c := ptr^;
    ptr^ := (ptr+1)^;
    (ptr+1)^ := c;
    Inc(ptr,2);
    end;
    end;

    begin
    Result := ''; // return empty string on error
    if SysUtils.Win32Platform=VER_PLATFORM_WIN32_NT then // Windows NT, Windows 2000
    begin
    // warning! change name for other drives: ex.: second drive '\\.\PhysicalDrive1\'
    hDevice := CreateFile( '\\.\PhysicalDrive0', GENERIC_READ or GENERIC_WRITE,
    FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0 );
    end
    else // Version Windows 95 OSR2, Windows 98
    hDevice := CreateFile( '\\.\SMARTVSD', 0, 0, nil, CREATE_NEW, 0, 0 );
    if hDevice=INVALID_HANDLE_VALUE then Exit;
    try
    FillChar(SCIP,SizeOf(TSendCmdInParams)-1,#0);
    FillChar(aIdOutCmd,SizeOf(aIdOutCmd),#0);
    cbBytesReturned := 0;
    // Set up data structures for IDENTIFY command.
    with SCIP do
    begin
    cBufferSize := IDENTIFY_BUFFER_SIZE;
    // bDriveNumber := 0;
    with irDriveRegs do
    begin
    bSectorCountReg := 1;
    bSectorNumberReg := 1;
    // if Win32Platform=VER_PLATFORM_WIN32_NT then bDriveHeadReg := $A0
    // else bDriveHeadReg := $A0 or ((bDriveNum and 1) shl 4);
    bDriveHeadReg := $A0;
    bCommandReg := $EC;
    end;
    end;
    if not DeviceIoControl( hDevice, $0007c088, @SCIP, SizeOf(TSendCmdInParams)-1,
    @aIdOutCmd, SizeOf(aIdOutCmd), cbBytesReturned, nil ) then Exit;
    finally
    CloseHandle(hDevice);
    end;
    with PIdSector(@IdOutCmd.bBuffer)^ do
    begin
    ChangeByteOrder( sSerialNumber, SizeOf(sSerialNumber) );
    (PChar(@sSerialNumber)+SizeOf(sSerialNumber))^ := #0;
    Result := PChar(@sSerialNumber);
    end;
    end;


  2. #2
    دوست عزیز گفتید که این کدها با عوض شدن فرمت هارد هم یک عدد رابر میگرداند

  3. #3
    کاربر دائمی آواتار Batman
    تاریخ عضویت
    خرداد 1386
    محل زندگی
    ناكجاآباد
    پست
    887
    با سلام
    دوست عزیز (absent) ممکنه این کدها رو به صورت یه نمونه مثال آپلود کنید
    ممنونم

  4. #4
    برای بدست آوردن مشخصات سیستم می توانید از یونیت زیر استفاده کنید:
    فایل های ضمیمه فایل های ضمیمه

  5. #5
    کاربر تازه وارد
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    اصفهان
    پست
    62
    ضمن تشکر از دوستانی که در این عنوان شرکت و اظهار نظر نمودند، مثال کد بالا رو براتون گذاشتم
    فایل های ضمیمه فایل های ضمیمه
    آخرین ویرایش به وسیله absent : یک شنبه 21 مرداد 1386 در 09:53 صبح دلیل: چه جوری می شه فایل ضمیمه کرد؟

  6. #6
    کاربر تازه وارد
    تاریخ عضویت
    اردیبهشت 1386
    محل زندگی
    اصفهان
    پست
    62
    ایول بابا روم کم شد!

  7. #7
    با سلام
    درچندتاپیک قبل یونیتی برای بدست آورن مشخصات سیستم قراردادم
    حال یک مثال بااستفاده از یونیت فوق:
    فایل های ضمیمه فایل های ضمیمه

  8. #8

    نقل قول: Get HDD Serial number

    نقل قول نوشته شده توسط technic مشاهده تاپیک
    با سلام
    درچندتاپیک قبل یونیتی برای بدست آورن مشخصات سیستم قراردادم
    حال یک مثال بااستفاده از یونیت فوق:
    خیلی عالی بود. ممنون

  9. #9

    نقل قول: Get HDD Serial number

    با سلام

    این کد در ویندوز سون کار نمی کنه . یه کد به زبان چینی میده که هیچ کارش نمیشه کرد

تاپیک های مشابه

  1. serial number در setup
    نوشته شده توسط aki در بخش Setup و Deployment
    پاسخ: 1
    آخرین پست: چهارشنبه 02 آذر 1384, 07:28 صبح
  2. serial number
    نوشته شده توسط ronaldo در بخش برنامه نویسی در Delphi Prism
    پاسخ: 16
    آخرین پست: شنبه 08 فروردین 1383, 15:17 عصر
  3. volume serial number
    نوشته شده توسط navid_ad در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 2
    آخرین پست: شنبه 06 اردیبهشت 1382, 13:53 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •