![獲取硬盤序列號(hào)(Delphi源碼)_第1頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/21/bfe03ffa-13a1-4859-b52e-cb91f8ee08c0/bfe03ffa-13a1-4859-b52e-cb91f8ee08c01.gif)
![獲取硬盤序列號(hào)(Delphi源碼)_第2頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/21/bfe03ffa-13a1-4859-b52e-cb91f8ee08c0/bfe03ffa-13a1-4859-b52e-cb91f8ee08c02.gif)
![獲取硬盤序列號(hào)(Delphi源碼)_第3頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/21/bfe03ffa-13a1-4859-b52e-cb91f8ee08c0/bfe03ffa-13a1-4859-b52e-cb91f8ee08c03.gif)
![獲取硬盤序列號(hào)(Delphi源碼)_第4頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/21/bfe03ffa-13a1-4859-b52e-cb91f8ee08c0/bfe03ffa-13a1-4859-b52e-cb91f8ee08c04.gif)
![獲取硬盤序列號(hào)(Delphi源碼)_第5頁](http://file3.renrendoc.com/fileroot_temp3/2021-12/21/bfe03ffa-13a1-4859-b52e-cb91f8ee08c0/bfe03ffa-13a1-4859-b52e-cb91f8ee08c05.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、獲取硬盤序列號(hào)源碼unit DiskSerialUnit;interfaceuses Windows,SysUtils;function GetHddSerial: String;implementationfunction GetIdeDiskSerialNumber: String;type TSrbIoControl = packed record HeaderLength : ULONG; Signature : Array0.7 of Char; Timeout : ULONG; ControlCode : ULONG; ReturnCode : ULONG; Length : UL
2、ONG; end; SRB_IO_CONTROL = TSrbIoControl; PSrbIoControl = TSrbIoControl; TIDERegs = packed record bFeaturesReg : Byte; bSectorCountReg : Byte; bSectorNumberReg : Byte; bCylLowReg : Byte; bCylHighReg : Byte; bDriveHeadReg : Byte; bCommandReg : Byte; bReserved : Byte; end; IDEREGS = TIDERegs; PIDERegs
3、 = TIDERegs; TSendCmdInParams = packed record cBufferSize : DWORD; irDriveRegs : TIDERegs; bDriveNumber : Byte; bReserved : Array0.2 of Byte; dwReserved : Array0.3 of DWORD; bBuffer : Array0.0 of Byte; end; SENDCMDINPARAMS = TSendCmdInParams; PSendCmdInParams = TSendCmdInParams; TIdSector = packed r
4、ecord wGenConfig : Word; wNumCyls : Word; wReserved : Word; wNumHeads : Word; wBytesPerTrack : Word; wBytesPerSector : Word; wSectorsPerTrack : Word; wVendorUnique : Array0.2 of Word; sSerialNumber : Array0.19 of Char; wBufferType : Word; wBufferSize : Word; wECCSize : Word; sFirmwareRev : Array0.7
5、of Char; sModelNumber : Array0.39 of Char; wMoreVendorUnique : Word; wDoubleWordIO : Word; wCapabilities : Word; wReserved1 : Word; wPIOTiming : Word; wDMATiming : Word; wBS : Word; wNumCurrentCyls : Word; wNumCurrentHeads : Word; wNumCurrentSectorsPerTrack : Word; ulCurrentSectorCapacity : ULONG; w
6、MultSectorStuff : Word; ulTotalAddressableSectors : ULONG; wSingleWordDMA : Word; wMultiWordDMA : Word; bReserved : Array0.127 of Byte; end; PIdSector = TIdSector;const IDE_ID_FUNCTION = $EC; IDENTIFY_BUFFER_SIZE = 512; DFP_RECEIVE_DRIVE_DATA = $0007c088; IOCTL_SCSI_MINIPORT = $0004d008; IOCTL_SCSI_
7、MINIPORT_IDENTIFY = $001b0501; DataSize = sizeof(TSendCmdInParams)-1+IDENTIFY_BUFFER_SIZE; BufferSize = SizeOf(SRB_IO_CONTROL)+DataSize; W9xBufferSize = IDENTIFY_BUFFER_SIZE+16;var hDevice : THandle; cbBytesReturned : DWORD; pInData : PSendCmdInParams; pOutData : Pointer; / PSendCmdInParams; Buffer
8、: Array0.BufferSize-1 of Byte; srbControl : TSrbIoControl absolute Buffer; 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
9、 := '' FillChar(Buffer,BufferSize,#0); if Win32Platform=VER_PLATFORM_WIN32_NT then/判斷操作系統(tǒng) begin /WinNT/2000/XP執(zhí)行下面代碼 /取得SCSI接口句柄 hDevice := CreateFile( '.Scsi0:', GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0 ); if hDevice=INVALID_HANDLE
10、_VALUE then Exit; try srbControl.HeaderLength := SizeOf(SRB_IO_CONTROL); System.Move('SCSIDISK',srbControl.Signature,8); srbControl.Timeout := 2; srbControl.Length := DataSize; srbControl.ControlCode := IOCTL_SCSI_MINIPORT_IDENTIFY; pInData := PSendCmdInParams(PChar(Buffer)+SizeOf(SRB_IO_CON
11、TROL);pOutData := pInData; with pInData do begin cBufferSize := IDENTIFY_BUFFER_SIZE; bDriveNumber := 0; with irDriveRegs do begin bFeaturesReg := 0; bSectorCountReg := 1; bSectorNumberReg := 1; bCylLowReg := 0; bCylHighReg := 0; bDriveHeadReg := $A0; bCommandReg := IDE_ID_FUNCTION; end; end; if not
12、 DeviceIoControl( hDevice, IOCTL_SCSI_MINIPORT, Buffer, BufferSize, Buffer, BufferSize, cbBytesReturned, nil ) then Exit; finally CloseHandle(hDevice); end; end else begin / Windows 95 OSR2, Windows 98 hDevice := CreateFile( '.SMARTVSD', 0, 0, nil, CREATE_NEW, 0, 0 ); if hDevice=INVALID_HAND
13、LE_VALUE then Exit; try pInData := PSendCmdInParams(Buffer); pOutData := PChar(pInData.bBuffer); with pInData do begin cBufferSize := IDENTIFY_BUFFER_SIZE; bDriveNumber := 0; with irDriveRegs do begin bFeaturesReg := 0; bSectorCountReg := 1; bSectorNumberReg := 1; bCylLowReg := 0; bCylHighReg := 0;
14、bDriveHeadReg := $A0; bCommandReg := IDE_ID_FUNCTION; end; end; if not DeviceIoControl( hDevice, DFP_RECEIVE_DRIVE_DATA, pInData, SizeOf(TSendCmdInParams)-1, pOutData, W9xBufferSize, cbBytesReturned, nil ) then Exit; finally CloseHandle(hDevice); end; end; with PIdSector(PChar(pOutData)+16) do begin
15、 ChangeByteOrder(sSerialNumber,SizeOf(sSerialNumber); SetString(Result,sSerialNumber,SizeOf(sSerialNumber); Result := Trim(Result); end;end;function GetDeviceHandle( sDeviceName : String ) : THandle;begin Result := CreateFile( PChar('.'+sDeviceName), GENERIC_READ or GENERIC_WRITE, FILE_SHARE
16、_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0 );end;function ScsiHddSerialNumber: String;$ALIGN ONtype TScsiPassThrough = record Length : Word; ScsiStatus : Byte; PathId : Byte; TargetId : Byte; Lun : Byte; CdbLength : Byte; SenseInfoLength : Byte; DataIn : Byte; DataTransferLength : ULONG; Ti
17、meOutValue : ULONG; DataBufferOffset : DWORD; SenseInfoOffset : ULONG; Cdb : Array0.15 of Byte; end; TScsiPassThroughWithBuffers = record spt : TScsiPassThrough; bSenseBuf : Array0.31 of Byte; bDataBuf : Array0.191 of Byte; end;ALIGN OFFvar DeviceHandle : THandle; dwReturned : DWORD; len : DWORD; Bu
18、ffer : Array0.SizeOf(TScsiPassThroughWithBuffers)+SizeOf(TScsiPassThrough)-1 of Byte; sptwb : TScsiPassThroughWithBuffers absolute Buffer;begin DeviceHandle := GetDeviceHandle('C:'); If DeviceHandle <> INVALID_HANDLE_VALUE Then Begin Try Result := '' FillChar(Buffer,SizeOf(Buff
19、er),#0); with sptwb.spt do begin Length := SizeOf(TScsiPassThrough); CdbLength := 6; / CDB6GENERIC_LENGTH SenseInfoLength := 24; DataIn := 1; / SCSI_IOCTL_DATA_IN DataTransferLength := 192; TimeOutValue := 2; DataBufferOffset := PChar(sptwb.bDataBuf)-PChar(sptwb); SenseInfoOffset := PChar(sptwb.bSenseBuf)-PChar(sptwb); Cdb0 := $12; / OperationCode := SCSIOP_INQUIRY; Cdb1 := $01; / Flags := CDB_INQUIRY_EVPD; Vital product data Cdb2 := $80; / PageCode Unit serial number Cdb4 := 192; / AllocationLength end; len := sptwb.spt.
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 湘教版數(shù)學(xué)九年級(jí)上冊《小結(jié)練習(xí)》聽評(píng)課記錄4
- 部審人教版九年級(jí)數(shù)學(xué)下冊聽評(píng)課記錄28.2.2 第2課時(shí)《利用仰俯角解直角三角形》
- 人教版歷史八年級(jí)上冊第16課《毛澤東開辟井岡山道路》聽課評(píng)課記錄
- 部編版八年級(jí)歷史上冊《第10課中華民國的創(chuàng)建》表格式聽課評(píng)課記錄
- 人教版地理七年級(jí)上冊第三章第四節(jié)《世界的氣候第2課時(shí)》聽課評(píng)課記錄
- 北師大版歷史八年級(jí)下冊第8課《艱苦創(chuàng)業(yè)年代的英雄模范》聽課評(píng)課記錄
- 蘇教版四年級(jí)下冊數(shù)學(xué)口算練習(xí)
- 華東師大版數(shù)學(xué)八年級(jí)上冊《11.1.1 平方根》聽評(píng)課記錄
- 大型商場商鋪?zhàn)赓U合同范本
- 二零二五年度舞臺(tái)搭建安全規(guī)范與責(zé)任落實(shí)協(xié)議
- 江蘇省2023年對口單招英語試卷及答案
- 易制毒化學(xué)品安全管理制度匯編
- GB/T 35506-2017三氟乙酸乙酯(ETFA)
- GB/T 25784-20102,4,6-三硝基苯酚(苦味酸)
- 特種設(shè)備安全監(jiān)察指令書填寫規(guī)范(特種設(shè)備安全法)參考范本
- 硬筆書法全冊教案共20課時(shí)
- 《長方形的面積》-完整版課件
- PDCA降低I類切口感染發(fā)生率
- 工業(yè)企業(yè)現(xiàn)場監(jiān)測工況核查表
- 沉淀池及排水溝清理記錄表
- 急診急救信息化課件
評(píng)論
0/150
提交評(píng)論