Loading... 取硬盘系列号: <br /> function GetIdeSerialNumber: pchar; //获取硬盘的出厂系列号; <br /> const IDENTIFY_BUFFER_SIZE = 512; <br /> type <br /> TIDERegs = packed record <br /> bFeaturesReg: BYTE; <br /> bSectorCountReg: BYTE; <br /> bSectorNumberReg: BYTE; <br /> bCylLowReg: BYTE; <br /> bCylHighReg: BYTE; <br /> bDriveHeadReg: BYTE; <br /> bCommandReg: BYTE; <br /> bReserved: BYTE; <br /> end; <br /> TSendCmdInParams = packed record <br /> cBufferSize: DWORD; <br /> irDriveRegs: TIDERegs; <br /> bDriveNumber: BYTE; <br /> bReserved: array[0..2] of Byte; <br /> dwReserved: array[0..3] of DWORD; <br /> bBuffer: array[0..0] of Byte; <br /> end; <br /> TIdSector = packed record <br /> wGenConfig: Word; <br /> wNumCyls: Word; <br /> wReserved: Word; <br /> wNumHeads: Word; <br /> wBytesPerTrack: Word; <br /> wBytesPerSector: Word; <br /> wSectorsPerTrack: Word; <br /> wVendorUnique: array[0..2] of Word; <br /> sSerialNumber: array[0..19] of CHAR; <br /> wBufferType: Word; <br /> wBufferSize: Word; <br /> wECCSize: Word; <br /> sFirmwareRev: array[0..7] of Char; <br /> sModelNumber: array[0..39] of Char; <br /> wMoreVendorUnique: Word; <br /> wDoubleWordIO: Word; <br /> wCapabilities: Word; <br /> wReserved1: Word; <br /> wPIOTiming: Word; <br /> wDMATiming: Word; <br /> wBS: Word; <br /> wNumCurrentCyls: Word; <br /> wNumCurrentHeads: Word; <br /> wNumCurrentSectorsPerTrack: Word; <br /> ulCurrentSectorCapacity: DWORD; <br /> wMultSectorStuff: Word; <br /> ulTotalAddressableSectors: DWORD; <br /> wSingleWordDMA: Word; <br /> wMultiWordDMA: Word; <br /> bReserved: array[0..127] of BYTE; <br /> end; <br /> PIdSector = ^TIdSector; <br /> TDriverStatus = packed record <br /> bDriverError: Byte; <br /> bIDEStatus: Byte; <br /> bReserved: array[0..1] of Byte; <br /> dwReserved: array[0..1] of DWORD; <br /> end; <br /> TSendCmdOutParams = packed record <br /> cBufferSize: DWORD; <br /> DriverStatus: TDriverStatus; <br /> bBuffer: array[0..0] of BYTE; <br /> end; <br /> var <br /> hDevice: Thandle; <br /> cbBytesReturned: DWORD; <br /> SCIP: TSendCmdInParams; <br /> aIdOutCmd: array[0..(SizeOf(TSendCmdOutParams) + IDENTIFY_BUFFER_SIZE-1)-1] of Byte; <br /> IdOutCmd: TSendCmdOutParams absolute aIdOutCmd; <br /> procedure ChangeByteOrder(var Data; Size: Integer); <br /> var <br /> ptr: Pchar; <br /> i: Integer; <br /> c: Char; <br /> begin <br /> ptr := @Data; <br /> for I := 0 to (Size shr 1) - 1 do begin <br /> c := ptr^; <br /> ptr^ := (ptr + 1)^; <br /> (ptr + 1)^ := c; <br /> Inc(ptr, 2); <br /> end; <br /> end; <br /> begin <br /> Result := ''; <br /> if SysUtils.Win32Platform = VER_PLATFORM_WIN32_NT then begin // Windows NT, Windows 2000 <br /> hDevice := CreateFile('\\.\PhysicalDrive0', GENERIC_READ or GENERIC_WRITE, <br /> FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0); <br /> end else // Version Windows 95 OSR2, Windows 98 <br /> hDevice := CreateFile('\\.\SMARTVSD', 0, 0, nil, CREATE_NEW, 0, 0); <br /> if hDevice = INVALID_HANDLE_VALUE then Exit; <br /> try <br /> FillChar(SCIP, SizeOf(TSendCmdInParams) - 1, #0); <br /> FillChar(aIdOutCmd, SizeOf(aIdOutCmd), #0); <br /> cbBytesReturned := 0; <br /> with SCIP do begin <br /> cBufferSize := IDENTIFY_BUFFER_SIZE; <br /> with irDriveRegs do begin <br /> bSectorCountReg := 1; <br /> bSectorNumberReg := 1; <br /> bDriveHeadReg := $A0; <br /> bCommandReg := $EC; <br /> end; <br /> end; <br /> if not DeviceIoControl(hDevice, $0007C088, @SCIP, SizeOf(TSendCmdInParams) - 1, <br /> @aIdOutCmd, SizeOf(aIdOutCmd), cbBytesReturned, nil) then Exit; <br /> finally <br /> CloseHandle(hDevice); <br /> end; <br /> with PIdSector(@IdOutCmd.bBuffer)^ do begin <br /> ChangeByteOrder(sSerialNumber, SizeOf(sSerialNumber)); <br /> (Pchar(@sSerialNumber) + SizeOf(sSerialNumber))^:= #0; <br /> Result := Pchar(@sSerialNumber); <br /> end; <br /> end; <br /> <br /> 调用: <br /> Edit1.Text:=strpas(GetIdeSerialNumber) <br /> 相关文章 无相关文章 Last modification:August 16th, 2009 at 12:30 pm © 允许规范转载 Support 如果觉得我的文章对你有用,请随意赞赏 ×Close Appreciate the author Sweeping payments Pay by AliPay Pay by WeChat
[quote=long]可以取SATA硬盘的系列号吗?[/quote]可以的,串口硬盘也可以获得。
可以取SATA硬盘的系列号吗?
[quote=游客]谢谢.拿过来试试.学习下.[/quote]
合作愉快!!欢迎常来坐坐哦。
谢谢.拿过来试试.学习下.