delphi 获取硬盘序列号、cpu号、bios号、网卡号2009-06-15 9:45delphi 获取硬盘 序列号function GetIdeNum: String;
typeTSrbIoControl = packed recordHeaderLength : ULONG;Signature : Array[0..7] of Char;Timeout : ULONG;ControlCode : ULONG;ReturnCode : ULONG;Length : ULONG;
end;
SRB_IO_CONTROL = TSrbIoControl;
PSrbIoControl = ^TSrbIoControl;TIDERegs = packed recordbFeaturesReg : Byte;bSectorCountReg : Byte;bSectorNumberReg : Byte;bCylLowReg : Byte;bCylHighReg : Byte;bDriveHeadReg : Byte;bCommandReg : Byte;bReserved : Byte;
end;
IDEREGS = TIDERegs;
PIDERegs = ^TIDERegs;TSendCmdInParams = packed recordcBufferSize : DWORD;irDriveRegs : TIDERegs;bDriveNumber : Byte;bReserved : Array[0..2] of Byte;dwReserved : Array[0..3] of DWORD;bBuffer : Array[0..0] of Byte;
end;
SENDCMDINPARAMS = TSendCmdInParams;
PSendCmdInParams = ^TSendCmdInParams;TIdSector = packed recordwGenConfig : 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 : ULONG; wMultSectorStuff : Word;ulTotalAddressableSectors : ULONG; wSingleWordDMA : Word;wMultiWordDMA : Word;bReserved : Array[0..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_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;
Buffer : Array[0..BufferSize-1] of Byte;
srbControl : TSrbIoControl absolute Buffer;procedure ChangeByteOrder( var Data; Size : Integer );
varptr : PChar;i : Integer;c : Char;
beginptr := @Data;for i := 0 to (Size shr 1)-1 dobeginc := ptr^;ptr^ := (ptr+1)^;(ptr+1)^ := c;Inc(ptr,2);end;
end;begin
Result := '';
FillChar(Buffer,BufferSize,#0);
if Win32Platform=VER_PLATFORM_WIN32_NT then
beginhDevice := CreateFile( '\\.\Scsi0:',GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ or FILE_SHARE_WRITE,nil, OPEN_EXISTING, 0, 0 );if hDevice=INVALID_HANDLE_VALUE thenExit;trysrbControl.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_CONTROL));pOutData := pInData;with pInData^ dobegincBufferSize := IDENTIFY_BUFFER_SIZE;bDriveNumber := 0;with irDriveRegs dobeginbFeaturesReg := 0;bSectorCountReg := 1;bSectorNumberReg := 1;bCylLowReg := 0;bCylHighReg := 0;bDriveHeadReg := $A0;bCommandReg := IDE_ID_FUNCTION;end;end;if not DeviceIoControl( hDevice, IOCTL_SCSI_MINIPORT,@Buffer, BufferSize, @Buffer, BufferSize,cbBytesReturned, nil ) thenExit;finallyCloseHandle(hDevice);end;
end else beginhDevice := CreateFile( '\\.\SMARTVSD', 0, 0, nil,CREATE_NEW, 0, 0 );if hDevice=INVALID_HANDLE_VALUE thenExit;trypInData := PSendCmdInParams(@Buffer);pOutData := @pInData^.bBuffer;with pInData^ dobegincBufferSize := IDENTIFY_BUFFER_SIZE;bDriveNumber := 0;with irDriveRegs dobeginbFeaturesReg := 0;bSectorCountReg := 1;bSectorNumberReg := 1;bCylLowReg := 0;bCylHighReg := 0;bDriveHeadReg := $A0;bCommandReg := IDE_ID_FUNCTION;end;end;if not DeviceIoControl( hDevice, DFP_RECEIVE_DRIVE_DATA,pInData, SizeOf(TSendCmdInParams)-1, pOutData,W9xBufferSize, cbBytesReturned, nil ) thenExit;finallyCloseHandle(hDevice);end;
end;
with PIdSector(PChar(pOutData)+16)^ do
beginChangeByteOrder(sSerialNumber,SizeOf(sSerialNumber));SetString(Result,sSerialNumber,SizeOf(sSerialNumber));
end;
Result:=Trim(Result);
end;下面三个函数配合实现获取cpu 的idfunction GetCPUID : TCPUID; assembler; register;
asm
PUSH    EBX
PUSH    EDI
MOV     EDI,EAX
MOV     EAX,1
DW      $A20F
STOSD
MOV     EAX,EBX
STOSD
MOV     EAX,ECX
STOSD
MOV     EAX,EDX
STOSD
POP     EDI
POP     EBX
end;function IsCPUID_Available : Boolean; register;
asm
PUSHFD
POP     EAX
MOV     EDX,EAX
XOR     EAX,$200000
PUSH    EAX
POPFD
PUSHFD
POP     EAX
XOR     EAX,EDX
JZ      @exit
MOV     AL,True
@exit:
end;function Cpu_GetCpuNum: String;
var
CPUID : TCPUID;
I     : Integer;
begin
Result:='0';
Tryfor I := Low(CPUID) to High(CPUID) doCPUID[I] := -1;if IsCPUID_Available thenbeginCPUID:= GetCPUID;Result:=IntToStr(CPUID[1])+'-'+IntToStr(CPUID[2])+'-'+IntToStr(CPUID[3])+'-'+IntToStr(CPUID[4]);End;
ExceptResult:='0';
End;
end;下面函数获取bios编号{***************************************
author/date:
description:获取bios编号
***************************************}
function GetBiosNum: String;
Var
BiosDate,BiosName,BiosVersion,BiosNum,BiosCopyright:String;
begin
TryBiosDate:=string(pchar(ptr($ffff5)));BiosName:=string(pchar(ptr($ffa68)));BiosVersion:=string(pchar(ptr($fe061)));BiosNum:=string(pchar(ptr($fec71)));BiosCopyright:=string(pchar(ptr($fe091)));Result:=BiosNum;
ExceptResult:='';
End;
end;

delphi 获取硬盘序列号、cpu号、bios号、网卡号相关推荐

  1. 用C#获取硬盘序列号,CPU序列号,网卡MAC地址

    这个问题首先得考虑的就是你的硬盘是不是SCSI硬盘 如果是,那么根本不存在"物理序列号",只可能取得卷标的序列号 如果是卷标序列号,要注意的是每次格式化硬盘的时候这个序列号都会变 ...

  2. delphi 获取硬盘序列号

    // 更多关于 S.M.A.R.T. ioctl 的信息可查看: // http://www.microsoft.com/hwdev/download/respec/iocltapi.rtf // M ...

  3. VC6获取硬盘序列号、型号、修订版本号

    因为要做个读取硬盘参数信息的控件,所以在网上找了不少代码,但是自己作为一个初学者在使用别人代码时,总会发现有各种各样的问题: 1. 需要的头文件未写明 2. 有些定义未给出 3. 代码的开发环境未明, ...

  4. 使用java获取硬盘序列号

    使用java获取硬盘序列号 使用java获取硬盘的序列号呢,涉及了跨平台的问题,不同的操作系统的查看命令不一样,可以使用oshi获取. oshi(Native Operating System and ...

  5. MFC 获取硬盘序列号、IP地址、MAC地址

    1)获取本地硬盘序列号 调出cmd 输入wmic diskdrive get serialnumber 或 wmic diskdrive get Name, Manufacturer, Model, ...

  6. C#取硬盘、CPU、主板、网卡的序号 ManagementObjectSearcher

    转载自快乐家++的博客 在很多情况下,你可能都需要得到微机的硬件信息,或者硬盘有几个分区,每个分区各有多少剩余空间.当你正在做一个多媒体应用程序的时候,你可能也需要获得有关声卡.显卡的硬件信息. 怎样 ...

  7. 获取硬盘序列号、CPU序列号

    public class SerialUtils {private static Properties props = System.getProperties();private static St ...

  8. Python获取硬件信息(硬盘序列号,CPU序列号)

    原文衔接 https://www.cnblogs.com/blog-rui/p/12108072.html pip install wmi pip install pywin32 import wmi ...

  9. .NET获取硬盘序列号的几个方法

    最近作软件注册,收集了很多.NET相关的获取硬盘物理序列号的方法,主要分为使用WMI方式和API方式.但这些方法均可能有问题. 1,使用WMI方式,有的机器根本取不到硬盘序列号,有的方式在Vista下 ...

  10. VC 之获取硬盘序列号

    硬盘物理序列号是硬盘的出厂序列号,它是全球都是唯一的,不会随着系统的安装.硬盘的格式化等操作而改变,跟mac地址一样都具有唯一性. 1,第一步:创建设备对象,得到设备句柄,设备为硬盘. { CStri ...

最新文章

  1. 「九章」量子计算优越性遭北大院士质疑,潘建伟陆朝阳长文回应
  2. C#Redis集合set
  3. 天然气门站监控摄像头如何布置_监控摄像头布置原则
  4. [Flink] The file LOG does not exist on the TaskExecutor
  5. 利用tensorflow实现手写体识别
  6. Javascript之宿主环境
  7. java早餐点餐外卖网站系统
  8. UVA 1616 Caravan Robbers 【二分+贪心+枚举分母】
  9. linux下的工具移植到windows下
  10. win无线网卡怎么进入监听模式_树莓派模拟Wimonitor怎么监听Wifi【方法介绍】
  11. CRM 概念:了解Leads、Prospect、MQL 和 SQL 的概念
  12. GLC国锂科技一场影响人类生活的大变革
  13. 增强现实(AR:Augmented Reality ) 之介绍及应用
  14. c语言程序设计报告表达式求值,数据结构 课程设计表达式求值 实验报告
  15. Ubuntu 系统 OpenCV 4 无法打开视频文件解决方案
  16. 计算机JAVA相关说课稿_七年级信息技术Windows资源管理器说课稿
  17. 程序员本硕博学——一站式导航
  18. redis在java中的使用
  19. 苹果x出现绿线怎么修复_苹果手机屏幕触摸屏失灵怎么办?换屏哥来帮你修复...
  20. laravel + vue 创建后台+开始到结束

热门文章

  1. 技术分解:光纤传感在交通监控中的应用
  2. JSONObject.fromObject() Maven依赖
  3. 单片微型计算机第三版课后习题答案,单片微型计算机原理与应用_课后习题答案_山东理工.docx...
  4. linux 桌面时间,桌面锁屏时钟下载-桌面锁屏时钟appv2.8.1-Linux公社
  5. 车路协同 智能路侧决策系统总体架构及应用
  6. vue---EleElement UI 表格导出功能
  7. hping 详解_hping3 详解
  8. adb指令禁用软件_免Root使用ADB命令_停用手机系统应用
  9. 幼儿园观察记录的目的和目标_幼儿园观察记录应该怎么写?
  10. qgis自定义符号库