获取硬盘的物理地址编号,CPU序列号

合集下载

计算机编号、硬盘序列号和Mac地址查询方法3篇

计算机编号、硬盘序列号和Mac地址查询方法3篇

计算机编号、硬盘序列号和Mac地址查询方法第一篇:计算机编号查询方法计算机编号,也被称为计算机名或主机名,是一组标识计算机的字符或数字组合。

计算机编号的作用是保证在联网场景中,多个计算机能够准确地识别彼此,从而实现数据传输和通信等操作。

在Windows操作系统中,计算机编号可以通过以下方法查询:1. 点击“开始”菜单,选择“计算机”或“此电脑”选项。

在打开的窗口中,右键单击鼠标,选择“属性”菜单。

2. 在弹出的窗口中,可以看到计算机的基本信息,包括计算机名称、计算机描述、工作组、操作系统等信息。

其中,计算机名称即为计算机编号或主机名。

另外,如果计算机属于某个局域网,也可以通过以下方法查询计算机编号:1. 打开“控制面板”,选择“网络和共享中心”或“网络和Internet”选项。

2. 点击“查看计算机名、域和工作组设置”选项,在打开的窗口中可以看到计算机名称或主机名以及工作组等信息。

以上方法适用于Windows操作系统。

对于其他操作系统,如Linux和macOS等,查询计算机编号的方法可能会有所不同,需要根据具体系统版本进行查询。

第二篇:硬盘序列号查询方法硬盘序列号,也被称为硬盘ID,是一组标识硬盘的字符串或数字组合。

硬盘序列号的作用是在多个硬盘中准确区分每个硬盘的身份,以便进行硬盘管理、数据备份和恢复等操作。

在Windows操作系统中,查询硬盘序列号的方法如下:1. 打开“计算机管理”,选择“存储”菜单,点击“磁盘管理”选项。

2. 在磁盘列表中,找到要查询硬盘序列号的硬盘,右键单击鼠标,选择“属性”菜单。

3. 在弹出的窗口中,选择“详细信息”选项卡,在“物理驱动器”一栏中可以看到硬盘序列号。

另外,也可以通过命令行查询硬盘序列号。

具体方法如下:1. 打开命令提示符,输入“wmic diskdrive get serialnumber”,按回车键。

2. 等待片刻,系统会自动查询显示当前硬盘的序列号信息。

虚拟机中获取硬盘序列号的方法

虚拟机中获取硬盘序列号的方法

虚拟机中获取硬盘序列号的方法随着虚拟化技术的不断发展,虚拟机已经成为现代化企业中运行应用程序的标准环境。

在一些特定场景下,比如多租户环境中,获取硬盘序列号有时是必须的。

因此,本文将介绍在虚拟机中获取硬盘序列号的几种方法。

方法一:使用命令行在Windows操作系统下,获取硬盘序列号的最简单方法是使用命令行工具。

步骤如下所述:1.按下“Win+R”快捷键,打开运行窗口;2.输入“cmd”并点击“确定”,打开命令行窗口;3.在命令行窗口中输入“wmic diskdrive get serialnumber”,按下回车;4.等待一段时间,输出硬盘序列号信息。

1.打开终端,输入命令“sudo hdparm -I /dev/sda”;2.在输出信息中查找Serial Number项,即硬盘序列号。

注意:在第二步中,/dev/sda为硬盘设备的路径,在某些虚拟机中可能需要根据实际情况进行修改。

方法二:利用WMI查询WMI(Windows管理信息)是Windows操作系统中的一种方式,它提供了一种方便的方式来管理本地和远程计算机。

可以使用WMI查询获取包括硬盘序列号在内的各种信息。

步骤如下:1.打开PowerShell或命令行窗口;2.在命令行窗口中输入“Get-WmiObject Win32_DiskDrive | Format-List SerialNumber”,或在PowerShell中输入“Get-WmiObject Win32_DiskDrive |Select-Object SerialNumber”。

方法三:查看注册表Windows操作系统的注册表中存储了大量的硬件和软件相关信息,包括硬盘序列号。

步骤如下:1.打开注册表编辑器,方式为“Win+R”快捷键后输入“regedit”;2.在注册表编辑器中,浏览到REG_HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Enum\IDE\下,找到对应的IDE控制器;3.在IDE控制器项下,找到对应的硬盘设备。

硬盘物理序列号的得到方法_hemfanings

硬盘物理序列号的得到方法_hemfanings

网址或邮箱: (选填)
内 容:插入表情▼ 闪光字
验证码: 请点击后输入四位验证码,字母不区分大小写
看不清?
取消回复", , 48)
For Each objItem In colItems
MsgValue = MsgValue & vbCrLf & "主板=" & objItem.SerialNumber
Next
MsgValue = MsgValue & vbCrLf & "硬盘 = " & objItem.SerialNumber
Next
'获取主板序列号
Set colItems = objWMIService.ExecQuery("Select * from
'获取CPU ID
Set colItems = objWMIService.ExecQuery("Select * from
Win32_Processor", , 48)
For Each objItem In colItems
•DELPHI中读取硬盘的物理序列号 •C++ 硬盘物理序列号
•获取硬盘物理序列号 •取得硬盘物理和逻辑序列号
•VB 利用硬盘物理序列号进行软件... •初步实现系统级拦截应用程序取硬...
48)
For Each objItem In colItems
MsgValue = MsgValue & vbCrLf & "BIOS= " & objItem.SerialNumber

电脑物理地址查询方法

电脑物理地址查询方法

电脑物理地址查询方法电脑的物理地址,也称为MAC地址,是网络设备的唯一标识符。

它由12个十六进制数字符组成,通常被用于局域网中,用于唯一标识网络设备。

在某些情况下,我们需要查询电脑的物理地址,以便进行网络配置或故障排查。

下面将介绍几种查询电脑物理地址的方法。

1. 在Windows操作系统中查询物理地址。

在Windows操作系统中,查询电脑的物理地址非常简单。

首先,我们需要打开命令提示符。

在Windows 10中,可以通过在搜索栏中输入“cmd”来打开命令提示符。

在命令提示符中,输入“ipconfig /all”,然后按下回车键。

在输出信息中,可以找到物理地址,通常标注为“Physical Address”。

2. 在Mac操作系统中查询物理地址。

在Mac操作系统中,查询电脑的物理地址也非常方便。

首先,点击屏幕左上角的苹果图标,选择“系统偏好设置”,然后选择“网络”。

在网络设置中,选择当前连接的网络,然后点击“高级”按钮。

在弹出的窗口中,选择“硬件”,在这里可以找到MAC地址,也就是物理地址。

3. 在Linux操作系统中查询物理地址。

在Linux操作系统中,查询电脑的物理地址同样很简单。

首先,打开终端。

在终端中,输入“ifconfig -a”,然后按下回车键。

在输出信息中,可以找到物理地址,通常标注为“ether”。

4. 在路由器管理界面中查询物理地址。

除了在操作系统中查询物理地址外,我们还可以通过路由器管理界面来查询。

首先,需要登录路由器管理界面,通常在浏览器中输入路由器的IP地址即可访问。

在管理界面中,可以找到连接到路由器的设备列表,其中包括每个设备的物理地址。

5. 使用第三方工具查询物理地址。

除了以上提到的方法外,还可以使用一些第三方工具来查询电脑的物理地址。

例如,可以使用网络监控工具或网络分析工具来扫描局域网中的设备,从而获取它们的物理地址信息。

总结。

通过以上几种方法,我们可以轻松地查询电脑的物理地址。

查询电脑硬盘序列号的方法

查询电脑硬盘序列号的方法

查询电脑硬盘序列号的方法1.通过操作系统查询大多数操作系统都提供了查询硬盘序列号的功能,以下是在Windows 和Mac操作系统上查询的方法:- Windows操作系统:a.打开“我的电脑”或者“此电脑”文件夹。

b.右键点击硬盘驱动器,选择“属性”。

c.在“属性”对话框中,在“常规”选项卡中可以看到“硬件编号”或者“硬件ID”,这个就是硬盘的序列号。

- Mac操作系统:a.点击“应用程序”文件夹,然后点击“实用工具”文件夹。

b.打开“磁盘工具”。

c.在“磁盘工具”中选择硬盘,然后点击“信息”按钮。

d.在弹出的窗口中,可以看到硬盘的序列号。

2.通过命令行查询通过使用命令行工具也可以查询电脑硬盘序列号,以下是在Windows 和Mac操作系统上查询的方法:- Windows操作系统:a. 打开命令提示符,可以通过按下Win + R键,然后输入“cmd”或者直接“命令提示符”来打开。

b. 在命令提示符中输入以下命令:wmic diskdrive get serialnumberc.根据电脑硬盘数量,会列出每个硬盘的序列号。

- Mac操作系统:a.打开“应用程序”文件夹,然后点击“实用工具”文件夹。

b.打开“终端”。

c. 在终端中输入以下命令:diskutil info disk0 , grep Serial Numberd.根据电脑硬盘数量,会列出每个硬盘的序列号。

3.通过硬件设备管理工具查询硬件设备管理工具是第三方软件,可以用于查询电脑硬盘序列号。

- CrystalDiskInfo:这是一款免费的硬盘健康和温度监控工具,同时还能显示硬盘的序列号。

-HWiNFO:这是一款全面的硬件信息和监控工具,可以提供硬盘的详细信息,包括序列号。

- Speccy:这是一款由Piriform公司开发的硬件信息工具,可以提供硬盘的序列号等详细信息。

通过安装和使用这些硬件设备管理工具,可以轻松地查询电脑的硬盘序列号。

总结:通过操作系统和硬件设备管理工具可以查询电脑硬盘序列号。

C#读取电脑CPU、主板、硬盘序列号等信息

C#读取电脑CPU、主板、硬盘序列号等信息

C#读取电脑CPU、主板、硬盘序列号等信息ManagementObjectSearcher 解析不到头⽂件,需要⼿动 Add Referance需要添加引⽤:System.Management,然后引⼊命名空间:using System.Management;//获取CPU序列号public string GetCPUSerialNumber(){try{ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * From Win32_Processor");string sCPUSerialNumber = "";foreach (ManagementObject mo in searcher.Get()){sCPUSerialNumber = mo["ProcessorId"].ToString().Trim();break;}return sCPUSerialNumber;}catch{return "";}}//获取主板序列号public string GetBIOSSerialNumber(){try{ManagementObjectSearcher searcher = new ManagementObjectSearcher("Select * From Win32_BIOS");string sBIOSSerialNumber = "";foreach (ManagementObject mo in searcher.Get()){sBIOSSerialNumber = mo.GetPropertyValue("SerialNumber").ToString().Trim();break;}return sBIOSSerialNumber;}catch{return "";}}//获取硬盘序列号public string GetHardDiskSerialNumber(){try{ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_PhysicalMedia");string sHardDiskSerialNumber = "";foreach (ManagementObject mo in searcher.Get()){sHardDiskSerialNumber = mo["SerialNumber"].ToString().Trim();break;}return sHardDiskSerialNumber;}catch{return "";}}//获取⽹卡地址public string GetNetCardMACAddress(){try{ManagementObjectSearcher searcher = new ManagementObjectSearcher("SELECT * FROM Win32_NetworkAdapter WHERE ((MACAddress Is Not NULL) AND (Manufacturer <> 'Microsoft'))"); string NetCardMACAddress = "";foreach (ManagementObject mo in searcher.Get()){NetCardMACAddress = mo["MACAddress"].ToString().Trim();break;}return NetCardMACAddress;}catch{return "";}}// 硬件Win32_Processor, // CPU 处理器Win32_PhysicalMemory, // 物理内存条Win32_Keyboard, // 键盘Win32_PointingDevice, // 点输⼊设备,包括⿏标。

DELPHI获取硬盘、CPU、网卡序列号

DELPHI获取硬盘、CPU、网卡序列号

DELPHI获取硬盘、CPU、⽹卡序列号 //引⽤及TYPE变量申明usesWindows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,Dialogs, StdCtrls,nb30; {重要引⽤}typePASTAT = ^TASTAT;TASTAT = recordadapter : TAdapterStatus;name_buf : TNameBuffer;end;TForm1 = class(TForm)Button1: TButton;Edit1: TEdit;Label1: TLabel;Label2: TLabel;Label3: TLabel;Edit2: TEdit;Edit3: TEdit;Button2: TButton;Edit4: TEdit;Label4: TLabel;procedure Button1Click(Sender: TObject);procedure Button2Click(Sender: TObject);private{ Private declarations }public{ Public declarations }end;varForm1: TForm1;implementation{$R *.dfm}typeTCPUID = array[1..4] of Longint;//取硬盘系列号:function GetIdeSerialNumber: pchar; //获取硬盘的出⼚系列号;const IDENTIFY_BUFFER_SIZE = 512;typeTIDERegs = packed recordbFeaturesReg: BYTE;bSectorCountReg: BYTE;bSectorNumberReg: BYTE;bCylLowReg: BYTE;bCylHighReg: BYTE;bDriveHeadReg: BYTE;bCommandReg: BYTE;bReserved: BYTE;end;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;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: DWORD;wMultSectorStuff: Word;ulTotalAddressableSectors: DWORD;wSingleWordDMA: Word;wMultiWordDMA: Word;bReserved: array[0..127] of BYTE;end;PIdSector = ^TIdSector;TDriverStatus = packed recordbDriverError: Byte;bIDEStatus: Byte;bReserved: array[0..1] of Byte;dwReserved: array[0..1] of DWORD;end;TSendCmdOutParams = packed recordcBufferSize: DWORD;DriverStatus: TDriverStatus;bBuffer: array[0..0] of BYTE;end;varhDevice: Thandle;cbBytesReturned: DWORD;SCIP: TSendCmdInParams;aIdOutCmd: array[0..(SizeOf(TSendCmdOutParams) + IDENTIFY_BUFFER_SIZE-1)-1] of Byte; IdOutCmd: TSendCmdOutParams absolute aIdOutCmd;procedure ChangeByteOrder(var Data; Size: Integer);//函数中的过程varptr: Pchar;i: Integer;c: Char;beginptr := @Data;for I := 0 to (Size shr 1) - 1 do beginc := ptr^;ptr^ := (ptr + 1)^;(ptr + 1)^ := c;Inc(ptr, 2);end;end;begin //函数主体Result := '';if SysUtils.Win32Platform = VER_PLATFORM_WIN32_NT thenbegin // Windows NT, Windows 2000hDevice := CreateFile('\\.\PhysicalDrive0', GENERIC_READ or GENERIC_WRITE,FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);endelse // Version Windows 95 OSR2, Windows 98hDevice := CreateFile('\\.\SMARTVSD', 0, 0, nil, CREATE_NEW, 0, 0);if hDevice = INVALID_HANDLE_VALUE then Exit;tryFillChar(SCIP, SizeOf(TSendCmdInParams) - 1, #0);FillChar(aIdOutCmd, SizeOf(aIdOutCmd), #0);cbBytesReturned := 0;with SCIP dobegincBufferSize := IDENTIFY_BUFFER_SIZE;with irDriveRegs dobeginbSectorCountReg := 1;bSectorNumberReg := 1;bDriveHeadReg := $A0;bCommandReg := $EC;end;end;if not DeviceIoControl(hDevice, $0007C088, @SCIP, SizeOf(TSendCmdInParams) - 1,@aIdOutCmd, SizeOf(aIdOutCmd), cbBytesReturned, nil) then Exit;finallyCloseHandle(hDevice);end;with PIdSector(@IdOutCmd.bBuffer)^ dobeginChangeByteOrder(sSerialNumber, SizeOf(sSerialNumber));(Pchar(@sSerialNumber) + SizeOf(sSerialNumber))^:= #0;Result := Pchar(@sSerialNumber);end;end;//=================================================================//CPU系列号:FUNCTION GetCPUID : TCPUID; assembler; register;asmPUSH EBX {Save affected register}PUSH EDIMOV EDI,EAX {@Resukt}MOV EAX,1DW $A20F {CPUID Command}STOSD {CPUID[1]}MOV EAX,EBXSTOSD {CPUID[2]}MOV EAX,ECXSTOSD {CPUID[3]}MOV EAX,EDXSTOSD {CPUID[4]}POP EDI {Restore registers}POP EBXEND;function GetCPUIDStr:String;varCPUID:TCPUID;beginCPUID:=GetCPUID;Result:=IntToHex(CPUID[1],8)+IntToHex(CPUID[2],8)+IntToHex(CPUID[3],8)+IntToHex(CPUID[4],8); end;///================================================================================== ///取MAC(⾮集成⽹卡):function NBGetAdapterAddress(a: Integer): string;varNCB: TNCB; // Netbios control block //NetBios控制块ADAPTER: TADAPTERSTATUS; // Netbios adapter status//取⽹卡状态LANAENUM: TLANAENUM; // Netbios lanaintIdx: Integer; // Temporary work value//临时变量cRC: Char; // Netbios return code//NetBios返回值strTemp: string; // Temporary string//临时变量begin// InitializeResult := '';try// Zero control bloclZeroMemory(@NCB, SizeOf(NCB));// Issue enum commandNCB.ncb_command := Chr(NCBENUM);cRC := NetBios(@NCB);// Reissue enum commandNCB.ncb_buffer := @LANAENUM;NCB.ncb_length := SizeOf(LANAENUM);cRC := NetBios(@NCB);if Ord(cRC) <> 0 thenexit;// Reset adapterZeroMemory(@NCB, SizeOf(NCB));NCB.ncb_command := Chr(NCBRESET);NCB.ncb_lana_num := na[a];cRC := NetBios(@NCB);if Ord(cRC) <> 0 thenexit;// Get adapter addressZeroMemory(@NCB, SizeOf(NCB));NCB.ncb_command := Chr(NCBASTAT);NCB.ncb_lana_num := na[a];StrPCopy(NCB.ncb_callname, '*');NCB.ncb_buffer := @ADAPTER;NCB.ncb_length := SizeOf(ADAPTER);cRC := NetBios(@NCB);// Convert it to stringstrTemp := '';for intIdx := 0 to 5 dostrTemp := strTemp + InttoHex(Integer(ADAPTER.adapter_address[intIdx]), 2);Result := strTemp;finallyend;end;//========================================================================== //取MAC地址(集成⽹卡和⾮集成⽹卡):function Getmac:string;varncb : TNCB;s:string;adapt : TASTAT;lanaEnum : TLanaEnum;i, j, m : integer;strPart, strMac : string;beginFillChar(ncb, SizeOf(TNCB), 0);ncb.ncb_command := Char(NCBEnum);ncb.ncb_buffer := PChar(@lanaEnum);ncb.ncb_length := SizeOf(TLanaEnum);s:=Netbios(@ncb);for i := 0 to integer(lanaEnum.length)-1 dobeginFillChar(ncb, SizeOf(TNCB), 0);ncb.ncb_command := Char(NCBReset);ncb.ncb_lana_num := na[i];Netbios(@ncb);Netbios(@ncb);FillChar(ncb, SizeOf(TNCB), 0);ncb.ncb_command := Chr(NCBAstat);ncb.ncb_lana_num := na[i];ncb.ncb_callname := '* ';ncb.ncb_buffer := PChar(@adapt);ncb.ncb_length := SizeOf(TASTAT);m:=0;if (Win32Platform = VER_PLATFORM_WIN32_NT) thenm:=1;if m=1 thenbeginif Netbios(@ncb) = Chr(0) thenstrMac := '';for j := 0 to 5 dobeginstrPart := IntToHex(integer(adapt.adapter.adapter_address[j]), 2);strMac := strMac + strPart + '-';end;SetLength(strMac, Length(strMac)-1);end;if m=0 thenif Netbios(@ncb) <> Chr(0) thenbeginstrMac := '';for j := 0 to 5 dobeginstrPart := IntToHex(integer(adapt.adapter.adapter_address[j]), 2);strMac := strMac + strPart + '-';end;SetLength(strMac, Length(strMac)-1);end;end;result:=strmac;end;function PartitionString(StrV,PrtSymbol: string): TStringList;variTemp: integer;beginresult := TStringList.Create;iTemp := pos(PrtSymbol,StrV);while iTemp>0 do beginif iTemp>1 then result.Append(copy(StrV,1,iTemp-1));delete(StrV,1,iTemp+length(PrtSymbol)-1);iTemp := pos(PrtSymbol,StrV);end;if Strv<>'' then result.Append(StrV);end;function MacStr():String;varStr:TStrings;i:Integer;MacStr:String;beginMacStr:='';Str:=TStringList.Create;Str:=PartitionString(Getmac,'-');for i:=0 to Str.Count-1 doMacStr:=MacStr+Str[i];Result:=MacStr;end;//============================================== //调⽤⽰例procedure TForm1.Button1Click(Sender: TObject);beginEdit3.Text:=strpas(GetIdeSerialNumber);//取硬盘号Edit2.text:=GetCPUIDStr;//CPU系列号edit4.Text:=NBGetAdapterAddress(12);//⾮集成⽹卡Edit1.text:=MacStr;//集成和⾮集成⽹卡end;。

获取硬盘序列号的代码

获取硬盘序列号的代码

获取硬盘序列号的代码网上有很多获取硬盘序列号的代码,但大部分都只能取得逻辑分区的序列号,而不能取得硬盘的物理序列号。

我们知道,逻辑分区的序列号是FORMAT时产生的,重新FORMAT将会改变。

这对于要求唯一识别码的程式来说是致命的。

这段代码利用API可以取得物理硬盘的很多特性,包括硬盘出厂时的唯一编号。

这段代码我是从CSDN 论坛获得,原作者不详。

我将其稍做修改和增添,独立出两个常用的函数:GetDiskVolume 、GetHardDiskInfo ......'====================================== ======'模块功能: 取得硬盘的信息'编程:来自互联网,阿勇修改'更新日期:2005/7/8'调用方法:' GetDiskVolume() 取得逻辑盘的序列号' GetHardDiskInfo() 取得物理盘的型号或序列号'====================================== ======Private Const MAX_IDE_DRIVES As Long = 4 ' Max number of drives assuming primary/secondary, master/slave topology Private Const READ_ATTRIBUTE_BUFFER_SIZE As Long = 512 Private Const IDENTIFY_BUFFER_SIZE As Long = 512Private Const READ_THRESHOLD_BUFFER_SIZE As Long = 512Private Const DFP_GET_VERSION As Long = &H74080Private Const DFP_SEND_DRIVE_COMMAND As Long = &H7C084Private Const DFP_RECEIVE_DRIVE_DATA As Long = &H7C088Private Type GETVERSIONOUTPARAMSbVersion As Byte ' Binary driver version.bRevision As Byte ' Binary driver revision.bReserved As Byte ' Not used.bIDEDeviceMap As Byte ' Bit map of IDE devices.fCapabilities As Long ' Bit mask of driver capabilities.dwReserved(3) As Long ' For future use.End TypePrivate Const CAP_IDE_ID_FUNCTION As Long = 1 ' ATA ID command supportedPrivate Const CAP_IDE_ATAPI_ID As Long = 2 ' ATAPI ID command supportedPrivate Const CAP_IDE_EXECUTE_SMART_FUNCTION As Long = 4 ' SMART commannds supportedPrivate Type IDEREGSbFeaturesReg As Byte ' Used for specifying SMART "commands".bSectorCountReg As Byte ' IDE sector count registerbSectorNumberReg As Byte ' IDE sector number registerbCylLowReg As Byte ' IDE low order cylinder valuebCylHighReg As Byte ' IDE high order cylinder valuebDriveHeadReg As Byte ' IDE drive/head registerbCommandReg As Byte ' Actual IDE command.bReserved As Byte ' reserved for future use. Must be zero.End TypePrivate Type SENDCMDINPARAMScBufferSize As Long ' Buffer size in bytesirDriveRegs As IDEREGS ' Structure with drive register values.bDriveNumber As Byte ' Physical drive number to send' command to (0,1,2,3).bReserved(2) As Byte ' Reserved for future expansion.dwReserved(3) As Long ' For future use.bBuffer(0) As Byte ' Input buffer.End TypePrivate Const IDE_ATAPI_ID As Long = &HA1 ' Returns ID sector for ATAPI.Private Const IDE_ID_FUNCTION As Long = &HEC ' Returns ID sector for ATA.Private Const IDE_EXECUTE_SMART_FUNCTION As Long = &HB0 ' Performs SMART cmd.Private Const SMART_CYL_LOW As Long = &H4FPrivate Const SMART_CYL_HI As Long = &HC2Private Type DRIVERSTATUSbDriverError As Byte ' Error code from driver,bIDEStatus As Byte ' Contents of IDE Error register.bReserved(1) As Byte ' Reserved for future expansion.dwReserved(1) As Long ' Reserved for future expansion.End TypePrivate Const SMART_NO_ERROR As Long = 0 ' No errorPrivate Const SMART_IDE_ERROR As Long = 1 ' Error fromIDE controllerPrivate Const SMART_INVALID_FLAG As Long = 2 ' Invalid command flagPrivate Const SMART_INVALID_COMMAND As Long = 3 ' Invalid command bytePrivate Const SMART_INVALID_BUFFER As Long = 4 ' Bad buffer (null, invalid addr..)Private Const SMART_INVALID_DRIVE As Long = 5 ' Drive number not validPrivate Const SMART_INVALID_IOCTL As Long = 6 ' Invalid IOCTLPrivate Const SMART_ERROR_NO_MEM As Long = 7 ' Could not lock user's bufferPrivate Const SMART_INVALID_REGISTER As Long = 8 ' Some IDE Register not validPrivate Const SMART_NOT_SUPPORTED As Long = 9 ' Invalid cmd flag setPrivate Const SMART_NO_IDE_DEVICE As Long = 10 ' Cmd issued to device not presentPrivate Type SENDCMDOUTPARAMScBufferSize As Long ' Size of bBuffer in bytesdrvStatus As DRIVERSTATUS ' Driver status structure.bBuffer(0) As Byte ' Buffer of arbitrary length in which to store the data read from the ' drive.End TypePrivate Const SMART_READ_ATTRIBUTE_VALUES As Long = &HD0 ' ATA4: RenamedPrivate Const SMART_READ_ATTRIBUTE_THRESHOLDS AsLong = &HD1 ' Obsoleted in ATA4!Private Const SMART_ENABLE_DISABLE_ATTRIBUTE_AUTOSAVE As Long = &HD2Private Const SMART_SAVE_ATTRIBUTE_VALUES As Long = &HD3Private Const SMART_EXECUTE_OFFLINE_IMMEDIATE As Long = &HD4 ' ATA4Private Const SMART_ENABLE_SMART_OPERATIONS As Long = &HD8Private Const SMART_DISABLE_SMART_OPERATIONS As Long = &HD9Private Const SMART_RETURN_SMART_STATUS As Long = &HDAPrivate Type DRIVEATTRIBUTEbAttrID As Byte ' Identifies which attributewStatusFlags As Integer ' see bit definitions belowbAttrValue As Byte ' Current normalized valuebWorstValue As Byte ' How bad has it ever been?bRawValue(5) As Byte ' Un-normalized valuebReserved As Byte ' ...End TypePrivate Type ATTRTHRESHOLDbAttrID As Byte ' Identifies which attributebWarrantyThreshold As Byte ' Triggering valuebReserved(9) As Byte ' ...End TypePrivate Type IDSECTORwGenConfig As IntegerwNumCyls As IntegerwReserved As IntegerwNumHeads As IntegerwBytesPerTrack As IntegerwBytesPerSector As IntegerwSectorsPerTrack As IntegerwVendorUnique(2) As IntegersSerialNumber(19) As BytewBufferType As IntegerwBufferSize As IntegerwECCSize As IntegersFirmwareRev(7) As BytesModelNumber(39) As BytewMoreVendorUnique As IntegerwDoubleWordIO As IntegerwCapabilities As IntegerwReserved1 As IntegerwPIOTiming As IntegerwDMATiming As IntegerwBS As IntegerwNumCurrentCyls As IntegerwNumCurrentHeads As IntegerwNumCurrentSectorsPerTrack As IntegerulCurrentSectorCapacity(3) As Byte '这里只能用byte,因为VB 没有无符号的LONG型变量wMultSectorStuff As IntegerulTotalAddressableSectors(3) As Byte '这里只能用byte,因为VB没有无符号的LONG型变量wSingleWordDMA As IntegerwMultiWordDMA As IntegerbReserved(127) As ByteEnd TypePrivate Const ATTR_INVALID As Long = 0Private Const ATTR_READ_ERROR_RATE As Long = 1Private Const ATTR_THROUGHPUT_PERF As Long = 2Private Const ATTR_SPIN_UP_TIME As Long = 3Private Const ATTR_START_STOP_COUNT As Long = 4Private Const ATTR_REALLOC_SECTOR_COUNT As Long = 5 Private Const ATTR_READ_CHANNEL_MARGIN As Long = 6 Private Const ATTR_SEEK_ERROR_RATE As Long = 7Private Const ATTR_SEEK_TIME_PERF As Long = 8Private Const ATTR_POWER_ON_HRS_COUNT As Long = 9 Private Const ATTR_SPIN_RETRY_COUNT As Long = 10Private Const ATTR_CALIBRATION_RETRY_COUNT As Long = 11Private Const ATTR_POWER_CYCLE_COUNT As Long = 12Private Const PRE_FAILURE_WARRANTY As Long = &H1Private Const ON_LINE_COLLECTION As Long = &H2Private Const PERFORMANCE_ATTRIBUTE As Long = &H4Private Const ERROR_RATE_ATTRIBUTE As Long = &H8Private Const EVENT_COUNT_ATTRIBUTE As Long = &H10 Private Const SELF_PRESERVING_ATTRIBUTE As Long = &H20Private Const NUM_ATTRIBUTE_STRUCTS As Long = 30Private Const INVALID_HANDLE_VALUE As Long = -1Private Const VER_PLATFORM_WIN32s As Long = 0Private Const VER_PLATFORM_WIN32_WINDOWS As Long = 1Private Const VER_PLATFORM_WIN32_NT As Long = 2Private Type OSVERSIONINFOdwOSVersionInfoSize As LongdwMajorVersion As LongdwMinorVersion As LongdwBuildNumber As LongdwPlatformId As LongszCSDVersion As String * 128 ' Maintenance string for PSS usageEnd TypePrivate Const CREATE_NEW As Long = 1Private Const GENERIC_READ As Long = &H80000000Private Const GENERIC_WRITE As Long = &H40000000Private Const FILE_SHARE_READ As Long = &H1Private Const FILE_SHARE_WRITE As Long = &H2Private Const OPEN_EXISTING As Long = 3Private m_DiskInfo As IDSECTORPrivate Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As LongPrivate Declare Function CreateFile Lib "kernel32" Alias"CreateFileA" (ByVal lpFileName As String, ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, ByVal lpSecurityAttributes As Long, ByVal dwCreationDisposition As Long, ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile AsLong) As LongPrivate Declare Function DeviceIoControl Lib "kernel32" (ByVal hDevice As Long, ByVal dwIoControlCode As Long, lpInBuffer As Any, ByVal nInBufferSize As Long, lpOutBuffer As Any, ByVal nOutBufferSize As Long, lpBytesReturned As Long, ByVal lpOverlapped As Long) As LongPrivate Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As LongPrivate Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)Private Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long'信息类型枚举Enum eumInfoTypehdmodelsn = 0hdOnlyModel = 1hdOnlySN = 2End Enum'磁盘通道枚举Enum eumDiskNohdPrimaryMaster = 0hdPrimarySlave = 1hdSecondaryMaster = 2hdSecondarySlave = 3End Enum'取得逻辑盘序列号 (非唯一)Function GetDiskVolume(Optional ByVal strDiskName = "C") As StringDim TempStr1 As String * 256, TempStr2 As String * 256Dim TempLon1 As Long, TempLon2 As Long, GetVal As Long Dim tmpVol As StringCall GetVolumeInformation(strDiskName & ":\", TempStr1, 256, GetVal, TempLon1, TempLon2, TempStr2, 256)If GetVal = 0 ThentmpVol = ""ElsetmpVol = Hex(GetVal)tmpVol = String(8 - Len(tmpVol), "0") & tmpVoltmpVol = Left(tmpVol, 4) & "-" & Right(tmpVol, 4)End IfGetDiskVolume = tmpVolEnd Function'取得硬盘信息:型号/物理系列号(唯一)Function GetHardDiskInfo(Optional ByVal numDisk As eumDiskNo = hdPrimaryMaster, Optional ByVal numType As eumInfoType = hdOnlySN) As StringIf GetDiskInfo(numDisk) = 1 ThenDim pSerialNumber As String, pModelNumber As StringpSerialNumber = StrConv(m_DiskInfo.sSerialNumber, vbUnicode)pModelNumber = StrConv(m_DiskInfo.sModelNumber, vbUnicode)Select Case numTypeCase hdOnlyModel '仅型号GetHardDiskInfo = Trim(pModelNumber)Case hdOnlySN '仅系列号GetHardDiskInfo = Trim(pSerialNumber)Case Else '型号,系列号GetHardDiskInfo = Trim(pModelNumber) & "," & Trim(pSerialNumber)End SelectEnd IfEnd FunctionPrivate Function OpenSMART(ByVal nDrive As Byte) As Long Dim hSMARTIOCTL As LongDim hd As StringDim VersionInfo As OSVERSIONINFOhSMARTIOCTL = INVALID_HANDLE_VALUEVersionInfo.dwOSVersionInfoSize = Len(VersionInfo)GetVersionEx VersionInfoSelect Case VersionInfo.dwPlatformIdCase VER_PLATFORM_WIN32sOpenSMART = hSMARTIOCTLCase VER_PLATFORM_WIN32_WINDOWShSMARTIOCTL = CreateFile("\\.\SMARTVSD", 0, 0, 0, CREATE_NEW, 0, 0)Case VER_PLATFORM_WIN32_NTIf nDrive < MAX_IDE_DRIVES Thenhd = "\\.\PhysicalDrive" & nDrivehSMARTIOCTL = CreateFile(hd, GENERIC_READ Or GENERIC_WRITE, FILE_SHARE_READ Or FILE_SHARE_WRITE, 0, OPEN_EXISTING, 0, 0)End IfEnd SelectOpenSMART = hSMARTIOCTLEnd FunctionPrivate Function DoIDENTIFY(ByVal hSMARTIOCTL As Long, pSCIP As SENDCMDINPARAMS, pSCOP() As Byte, ByVal bIDCmd As Byte, ByVal bDriveNum As Byte, lpcbBytesReturned As Long) As BooleanpSCIP.cBufferSize = IDENTIFY_BUFFER_SIZEpSCIP.irDriveRegs.bFeaturesReg = 0pSCIP.irDriveRegs.bSectorCountReg = 1pSCIP.irDriveRegs.bSectorNumberReg = 1pSCIP.irDriveRegs.bCylLowReg = 0pSCIP.irDriveRegs.bCylHighReg = 0pSCIP.irDriveRegs.bDriveHeadReg = &HA0 Or ((bDriveNum And 1) * 2 ^ 4)'pSCIP.irDriveRegs.bCommandReg = bIDCmdpSCIP.bDriveNumber = bDriveNumpSCIP.cBufferSize = IDENTIFY_BUFFER_SIZEDoIDENTIFY = CBool(DeviceIoControl(hSMARTIOCTL, DFP_RECEIVE_DRIVE_DATA, _pSCIP, 32, _pSCOP(0), 528, _lpcbBytesReturned, 0))End FunctionPrivate Function DoEnableSMART(ByVal hSMARTIOCTL As Long, pSCIP As SENDCMDINPARAMS, pSCOP As SENDCMDOUTPARAMS, ByVal bDriveNum As Byte, lpcbBytesReturned As Long) As BooleanpSCIP.cBufferSize = 0pSCIP.irDriveRegs.bFeaturesReg = SMART_ENABLE_SMART_OPERATIONSpSCIP.irDriveRegs.bSectorCountReg = 1pSCIP.irDriveRegs.bSectorNumberReg = 1pSCIP.irDriveRegs.bCylLowReg = SMART_CYL_LOWpSCIP.irDriveRegs.bCylHighReg = SMART_CYL_HIpSCIP.irDriveRegs.bDriveHeadReg = &HA0 Or ((bDriveNum And 1) * 2 ^ 4)pSCIP.irDriveRegs.bCommandReg = IDE_EXECUTE_SMART_FUNCTIONpSCIP.bDriveNumber = bDriveNumDoEnableSMART = CBool(DeviceIoControl(hSMARTIOCTL, DFP_SEND_DRIVE_COMMAND, _pSCIP, LenB(pSCIP) - 1, _pSCOP, LenB(pSCOP) - 1, _lpcbBytesReturned, 0))End Function'---------------------------------------------------------------------'---------------------------------------------------------------------Private Sub ChangeByteOrder(szString() As Byte, ByVal uscStrSize As Integer)Dim i As IntegerDim bTemp As ByteFor i = 0 To uscStrSize - 1 Step 2bTemp = szString(i)szString(i) = szString(i + 1)szString(i + 1) = bTempNext iEnd SubPrivate Sub DisplayIdInfo(pids As IDSECTOR, pSCIP As SENDCMDINPARAMS, ByVal bIDCmd As Byte, ByVal bDfpDriveMap As Byte, ByVal bDriveNum As Byte)ChangeByteOrder pids.sModelNumber, UBound(pids.sModelNumber) + 1ChangeByteOrder pids.sFirmwareRev, UBound(pids.sFirmwareRev) + 1ChangeByteOrder pids.sSerialNumber, UBound(pids.sSerialNumber) + 1End SubPublic Function GetDiskInfo(ByVal nDrive As Byte) As LongDim hSMARTIOCTL As LongDim cbBytesReturned As LongDim VersionParams As GETVERSIONOUTPARAMSDim scip As SENDCMDINPARAMSDim scop() As ByteDim OutCmd As SENDCMDOUTPARAMSDim bDfpDriveMap As ByteDim bIDCmd As Byte ' IDE or ATAPI IDENTIFY cmdDim uDisk As IDSECTORm_DiskInfo = uDisk''hSMARTIOCTL = OpenSMART(nDrive)If hSMARTIOCTL <> INVALID_HANDLE_VALUE ThenCall DeviceIoControl(hSMARTIOCTL, DFP_GET_VERSION, ByVal 0, 0, VersionParams, Len(VersionParams), cbBytesReturned, 0)If Not (VersionParams.bIDEDeviceMap \ 2 ^ nDrive And &H10) ThenIf DoEnableSMART(hSMARTIOCTL, scip, OutCmd, nDrive, cbBytesReturned) ThenbDfpDriveMap = bDfpDriveMap Or 2 ^ nDriveEnd IfEnd IfbIDCmd = IIf((VersionParams.bIDEDeviceMap \ 2 ^ nDrive And &H10), IDE_ATAPI_ID, IDE_ID_FUNCTION)ReDim scop(LenB(OutCmd) + IDENTIFY_BUFFER_SIZE - 1) As ByteIf DoIDENTIFY(hSMARTIOCTL, scip, scop, bIDCmd, nDrive, cbBytesReturned) ThenCopyMemory m_DiskInfo, scop(LenB(OutCmd) - 4), LenB(m_DiskInfo)Call DisplayIdInfo(m_DiskInfo, scip, bIDCmd, bDfpDriveMap, nDrive)CloseHandle hSMARTIOCTLGetDiskInfo = 1Exit Function '>---> Bottom End IfCloseHandle hSMARTIOCTL GetDiskInfo = 0Else 'NOT HSMARTIOCTL... GetDiskInfo = -1End IfEnd Function。

C#获取电脑硬件信息(CPU ID、主板ID、硬盘ID、BIOS编号)

C#获取电脑硬件信息(CPU ID、主板ID、硬盘ID、BIOS编号)
Dim strID As String = Nothing
For Each mo As ManagementObject In moc
strID = mo.Properties("SerialNumber").Value.ToString()
Exit For
Next
textBox1.Text += "BIOS ID:" + strID
电脑3:硬盘 ID:4a353756354d5939202020202020202020202020
电脑4:硬盘 ID:0637J2FW508014
•获取BIOS编号:
Dim mc As New ManagementClass("Win32_BIOS")
Dim moc As ManagementObjectCollection = mc.GetInstances()
For Each mo As ManagementObject In moc
For Each pd As PropertyData In mo.Properties
textBox1.Text = "/r/n" + + "/t"
If pd.Value <> Nothing Then
通过Win32_BaseBoard获取主板信息,但不是所有的主板都有编号,或者说不是能获取所有系统主板的编号。
通过Win32_PhysicalMedia获取硬盘编号应该没有问题。但网上说可以通过Win32_DiskDrive获取,其实所得信息根本不包含SerialNumber。
通过Win32_BIOS获取BIOS信息,基本和获取主板信息差不多。就是说:不是所有的主板BIOS信息都有编号。

vC++ 获取cpu信息,硬盘ID,网卡MAC地址_内部资料

vC++ 获取cpu信息,硬盘ID,网卡MAC地址_内部资料

目录摘要 (I)获取系统信息程序的开发1.设计目的 (1)2. 设计基本要求 (1)3. 设计内容 (1)4. 设计步骤 (1)5. 程序代码5.1头文件SysinfoView.h (5)5.2头文件Registry.h (6)5.3源文件SysinfoView.cpp (7)5.4源文件MainFrm.cpp (21)5.5源文件Registry.cpp (23)5.6源文件Sysinfo.cpp (26)6.设计成果 (26)总结 (27)参考文献 (28)摘要计算机系统信息包括硬件系统信息和软件系统信息。

硬件系统直接决定了软件系统运行的可行性,同时软件系统又反过来影响着硬件系统的运行。

因此,及时掌握计算机系统信息对于计算机用户来说尤其重要。

本课程设计介绍了如何利用Visual C++这一编程工具进行程序设计来获取计算机的系统信息。

关键词:Visual C++;计算机系统信息;程序设计获取系统信息程序的开发1.设计目的在学习了“VC++程序设计基础”课程的基础上,通过本编程设计练习,旨在加深对相关知识的理解,初步掌握VC++程序设计的基本设计方法,提高程序设计的基本技能及分析、解决编程问题的能力。

2. 设计基本要求计算机系统信息包括硬件系统信息和软件系统信息。

硬件系统直接决定了软件系统运行的可行性,同时软件系统又反过来影响着硬件系统的运行。

因此,及时掌握计算机系统信息对于计算机用户来说尤其重要。

本程序的主要功能如下:1)获取操作系统信息,显示该操作系统的版本号。

2)获取CPU运行速度3)获取内存大小,计算剩余内存大小和百分率4)获取网卡地址和本机机器的IP地址5)操作系统的操作(关闭系统、重启系统、快速重启系统)6)注册表的操作7)程序界面的鼠标拖动操作8)弹出菜单的应用3. 设计内容1)计算机安装操作系统后,操作系统将版本信息存放于注册表的特定位置:HKEY_LOCAL_MACHINE->”Software\\Microsoft\\Windows\\CurrentVersion\\Run\\”.因此只需要进行注册表的访问操作就可以得到相关的操作。

Linux下获取CPUID、硬盘序列号与 MAC地址

Linux下获取CPUID、硬盘序列号与 MAC地址
getmacaddr (const char *ip, char *id, size_t max)
{
int i, sockfd;
struct sockaddr_in *loc;
struct ifreq req[1];
sockfd = socket (AF_INET, SOCK_DGRAM, 0);
if (sockfd < 0)
struct if_settings ifru_settings;
} ifr_ifru;
}
,其中,ifrn_name为网络接口的名称,ifr_ifru.ifru_hwaddr为网络接口的MAC地址。
#ifndef MAX_IFINDEX
# define MAX_IFINDEX 8
#endif
static int
short ifru_flags;
int ifru_ivalue;
int ifru_mtu;
struct ifmap ifru_map;
char ifru_slave[IFNAMSIZ]; /* Just fits the size */
char ifru_newname[IFNAMSIZ];
void * ifru_data;
snprintf (id, max, "%08lx %08lx %08lx %08lx", eax, ebx, ecx, edx);
fprintf (stdout, "get cpu id: %s\n", id);
return 0;
}
这个的实现,采用的是读取/etc/mtab文件,找到/(即根目录)挂载的设备文件,然后打开它,再用系统调用ioctl来实现的。

硬盘序列号查询方法

硬盘序列号查询方法

硬盘序列号查询方法硬盘序列号是硬盘的唯一标识,通过查询硬盘序列号可以方便用户进行硬盘的管理和维护。

下面将介绍几种常见的硬盘序列号查询方法。

1. Windows系统下的查询方法。

在Windows系统下,可以通过命令提示符来查询硬盘序列号。

首先打开命令提示符窗口,输入以下命令:wmic diskdrive get serialnumber。

然后按下回车键,系统会显示硬盘的序列号信息。

另外,也可以通过“设备管理器”来查询硬盘序列号。

在“设备管理器”中找到“磁盘驱动器”,右键点击对应的硬盘,选择“属性”,在“详细信息”选项卡中可以找到硬盘序列号的信息。

2. Linux系统下的查询方法。

在Linux系统下,可以通过命令行来查询硬盘序列号。

打开终端窗口,输入以下命令:sudo hdparm -i /dev/sda | grep SerialNo。

其中“/dev/sda”为硬盘的设备文件名,根据实际情况进行替换。

执行命令后,系统会显示硬盘的序列号信息。

3. Mac系统下的查询方法。

在Mac系统下,可以通过“系统报告”来查询硬盘序列号。

点击苹果菜单中的“关于本机”,在弹出的窗口中点击“系统报告”,然后在左侧的列表中选择“存储”,右侧会显示硬盘的序列号信息。

另外,也可以通过终端来查询硬盘序列号。

打开终端窗口,输入以下命令:system_profiler SPStorageDataType | grep "Serial Number"执行命令后,系统会显示硬盘的序列号信息。

4. BIOS中的查询方法。

在一些情况下,可以在计算机的BIOS中查询硬盘序列号。

在开机时按下相应的按键(通常是Del、F2或F10),进入BIOS界面,然后在相应的选项中可以找到硬盘的序列号信息。

总结。

通过以上介绍,我们可以看到,在不同的操作系统下,查询硬盘序列号的方法略有不同。

无论是在Windows、Linux还是Mac系统下,都可以通过命令行或系统工具来查询硬盘序列号。

获取全部硬盘、主板、网卡MAC、CPU硬件序列号程序代码

获取全部硬盘、主板、网卡MAC、CPU硬件序列号程序代码
PVOID SecurityDescriptor; // Points to type SECURITY_DESCRIPTOR,0
PVOID SecurityQualityOfService; // Points to type SECURITY_QUALITY_OF_SERVICE,0
USHORT wDMATiming;
USHORT wBS;
USHORT wNumCurrentCyls;
USHORT wNumCurrentHeads;
USHORT wNumCurrentSectorsPerTrack;
ULONG ulCurrentSectorCapacity;
typedef DWORD (__stdcall *ZWMV )( HANDLE,HANDLE,PVOID,ULONG,ULONG,PLARGE_INTEGER,PSIZE_T,DWORD,ULONG,ULONG);
typedef DWORD (__stdcall *ZWUMV )( HANDLE,PVOID);
} IDSECTOR, *PIDSECTOR;
typedef struct _DRIVERSTATUS
{
BYTE bDriverError; // Error code from driver, or 0 if no error.
BYTE bIDEStatus; // Contents of IDE Error register.
typedef struct _UNICODE_STRING
{
USHORT Length;//长度
USHORT MaximumLength;//最大长度
PWSTR Buffer;//缓存指针

C获取电脑硬件信息(CPUID、主板ID、硬盘ID、BIOS编号)

C获取电脑硬件信息(CPUID、主板ID、硬盘ID、BIOS编号)

C#获取电‎脑硬件信息‎(CPU ‎I D、主板‎I D、硬盘‎I D、BI‎O S编号)‎‎最近学‎习过程中,‎想到提取系‎统硬件信息‎做一些验证‎,故而对网‎上提到的利‎用.NET‎Syst‎e m.Ma‎n agem‎e nt类获‎取硬件信息‎做了进一步‎的学习、验‎证。

验证是‎分别在4台‎电脑,XP‎SP3系‎统中进行,‎特将验证过‎程记录于此‎。

‎说明:‎电脑1(联‎想品牌电脑‎);电脑‎2(HP品‎牌电脑);‎电脑3(‎联想品牌电‎脑);电‎脑4(兼容‎机);‎•获取C‎P U编号:‎Dim ‎m c As‎New ‎M anag‎e ment‎C lass‎("Win‎32_Pr‎o cess‎o r")‎D im m‎o c As‎Mana‎g emen‎t Obje‎c tCol‎l ecti‎o n = ‎m c.Ge‎t Inst‎a nces‎()Di‎m str‎I D As‎Stri‎n g = ‎N othi‎n gFo‎r Eac‎h mo ‎A s Ma‎n agem‎e ntOb‎j ect ‎I n mo‎cst‎r ID =‎mo.P‎r oper‎t ies(‎"Proc‎e ssor‎I d").‎V alue‎.ToSt‎r ing(‎)Ex‎i t Fo‎rNex‎ttex‎t Box1‎.Text‎+= "‎C PU I‎D:" +‎strI‎D‎返回‎结果:‎‎电脑1‎:CPU ‎I D:BF‎E BFBF‎F0000‎0F27‎‎电脑‎2:CPU‎ID:B‎F EBFB‎F F000‎00F27‎‎电‎脑3:CP‎U ID:‎B FEBF‎B FF00‎000F2‎9‎‎电脑4:C‎P U ID‎:BFEB‎F BFF0‎0000F‎29‎•获取主板‎编号:D‎i m mc‎As N‎e w Ma‎n agem‎e ntCl‎a ss("‎W in32‎_Base‎B oard‎")Di‎m moc‎As M‎a nage‎m entO‎b ject‎C olle‎c tion‎= mc‎.GetI‎n stan‎c es()‎Dim ‎s trID‎As S‎t ring‎= No‎t hing‎For ‎E ach ‎m o As‎Mana‎g emen‎t Obje‎c t In‎moc‎strI‎D = m‎o.Pro‎p erti‎e s("S‎e rial‎N umbe‎r").V‎a lue.‎T oStr‎i ng()‎Exi‎t For‎Next‎text‎B ox1.‎T ext ‎+= "主‎板 ID:‎" + s‎t rID‎‎返回结果‎:‎‎电脑1:主‎板 ID:‎‎电‎脑2:主板‎ID:C‎N2440‎1483‎‎电脑‎3:主板‎I D:AZ‎F2410‎01101‎‎电‎脑4:主板‎ID: ‎•获‎取硬盘编号‎:Man‎a geme‎n tCla‎s s mc‎= ne‎w Man‎a geme‎n tCla‎s s("W‎i n32_‎P hysi‎c alMe‎d ia")‎;/‎/网上有提‎到,用Wi‎n32_D‎i skDr‎i ve,但‎是用Win‎32_Di‎s kDri‎v e获得的‎硬盘信息中‎并不包含S‎e rial‎N umbe‎r属性。

API函数获取硬盘物理序列号

API函数获取硬盘物理序列号

API函数获取硬盘物理序列号以下代码可以取得系统特征码(网卡MAC、硬盘序列号、CPU ID、BIOS编号)BYTE szSystemInfo[4096]; // 在程序执行完毕后,此处存储取得的系统特征码UINT uSystemInfoLen = 0; // 在程序执行完毕后,此处存储取得的系统特征码的长度// 网卡MAC 地址,注意: MAC 地址是可以在注册表中修改的{UINT uErrorCode = 0;IP_ADAPTER_INFO iai;ULONG uSize = 0;DWORD dwResult = GetAdaptersInfo( &iai, &uSize );if( dwResult == ERROR_BUFFER_OVERFLOW ){IP_ADAPTER_INFO* piai = ( IP_ADAPTER_INFO* )HeapAlloc( GetProcessHeap( ) , 0, uSize );if( piai != NULL ){dwResult = GetAdaptersInfo( piai, &uSize );if( ERROR_SUCCESS == dwResult ){IP_ADAPTER_INFO* piai2 = piai;while( piai2 != NULL && ( uSystemInfoLen + piai2->AddressLength ) < 4096U ){CopyMemory( szSystemInfo + uSystemInfoLen, piai2->Address, pi ai2->AddressLength );uSystemInfoLen += piai2->AddressLength;piai2 = piai2->Next;}}else{uErrorCode = 0xF0000000U + dwResult;}VERIFY( HeapFree( GetProcessHeap( ), 0, piai ) );}else{return FALSE;}}else{uErrorCode = 0xE0000000U + dwResult;}if( uErrorCode != 0U ){return FALSE;}}// 硬盘序列号,注意:有的硬盘没有序列号{OSVERSIONINFO ovi = { 0 };ovi.dwOSVersionInfoSize = sizeof( OSVERSIONINFO );GetVersionEx( &ovi );if( ovi.dwPlatformId != VER_PLATFORM_WIN32_NT ){// Only Windows 2000, Windows XP, Windows Server 2003...return FALSE;}else{if( !WinNTHDSerialNumAsPhysicalRead( szSystemInfo, &uSystemInfoLen, 1024 ) ){WinNTHDSerialNumAsScsiRead( szSystemInfo, &uSystemInfoLen, 1024 );}}}// CPU ID{BOOL bException = FALSE;BYTE szCpu[16] = { 0 };UINT uCpuID = 0U;__try{_asm{mov eax, 0cpuidmov dword ptr szCpu[0], ebxmov dword ptr szCpu[4], edxmov dword ptr szCpu[8], ecxmov eax, 1cpuidmov uCpuID, edx}}__except( EXCEPTION_EXECUTE_HANDLER ){bException = TRUE;}if( !bException ){CopyMemory( szSystemInfo + uSystemInfoLen, &uCpuID, sizeof( UINT ) );uSystemInfoLen += sizeof( UINT );uCpuID = strlen( ( char* )szCpu );CopyMemory( szSystemInfo + uSystemInfoLen, szCpu, uCpuID );uSystemInfoLen += uCpuID;}}// BIOS 编号,支持AMI, AWARD, PHOENIX{SIZE_T ssize;LARGE_INTEGER so;so.LowPart=0x000f0000;so.HighPart=0x00000000;ssize=0xffff;wchar_t strPH[30]=L"\\device\\physicalmemory";DWORD ba=0;UNICODE_STRING struniph;struniph.Buffer=strPH;struniph.Length=0x2c;struniph.MaximumLength =0x2e;OBJECT_ATTRIBUTES obj_ar;obj_ar.Attributes =64;obj_ar.Length =24;obj_ar.ObjectName=&struniph;obj_ar.RootDirectory=0;obj_ar.SecurityDescriptor=0;obj_ar.SecurityQualityOfService =0;HMODULE hinstLib = LoadLibrary("ntdll.dll");ZWOS ZWopenS=(ZWOS)GetProcAddress(hinstLib,"ZwOpenSection");ZWMV ZWmapV=(ZWMV)GetProcAddress(hinstLib,"ZwMapViewOfSection");ZWUMV ZWunmapV=(ZWUMV)GetProcAddress(hinstLib,"ZwUnmapViewOfSection");//调用函数,对物理内存进行映射HANDLE hSection;if( 0 == ZWopenS(&hSection,4,&obj_ar) &&0 == ZWmapV(( HANDLE )hSection, //打开Section时得到的句柄( HANDLE )0xFFFFFFFF, //将要映射进程的句柄,&ba, //映射的基址0,0xFFFF, //分配的大小&so, //物理内存的地址&ssize, //指向读取内存块大小的指针1, //子进程的可继承性设定0, //分配类型2 //保护类型) )//执行后会在当前进程的空间开辟一段64k的空间,并把f000:0000到f000:ffff处的内容映射到这里//映射的基址由ba返回,如果映射不再有用,应该用ZwUnmapViewOfSection断开映射{BYTE* pBiosSerial = ( BYTE* )ba;UINT uBiosSerialLen = FindAwardBios( &pBiosSerial );if( uBiosSerialLen == 0U ){uBiosSerialLen = FindAmiBios( &pBiosSerial );if( uBiosSerialLen == 0U ){uBiosSerialLen = FindPhoenixBios( &pBiosSerial );}}if( uBiosSerialLen != 0U ){CopyMemory( szSystemInfo + uSystemInfoLen, pBiosSerial, uBiosSerialLen );uSystemInfoLen += uBiosSerialLen;}ZWunmapV( ( HANDLE )0xFFFFFFFF, ( void* )ba );}}// 完毕,系统特征码已取得。

获取硬盘序列号

获取硬盘序列号

用api函数读取硬盘的序列号关于盘序列号有两种:硬盘序列号: 英文名Hard Disk Serial Number, 该号是出厂时生产厂家为区别产品而设置的, 是唯一的, 是只读的, 利用硬盘序列号的加密往往是利用其唯一和只读的特性, 大多是针对有序列号的IDE HDD而言, 对于没有序列号或SCSI HDD硬盘则无能为力,这也是利用它进行加密的局限性.卷的序列号: 英文名Volume Serial Number, 该号既可指软磁盘要得, 如:A:盘和B:盘的, 又可以指硬盘的逻辑盘, 如: C:, D:...的,是高级格式化时随机产生的, 是可以修改的, 所以利用其进行加密,在写程序时我们想对每一台计算机都生成一个唯一的标识,而且在一此共享软件中我们也看到,软件在不同的机器上生成了不同的标识,这是如何实现的呢,其实是软件有一部分程序读取了,本地计算机的一部分硬件参数(如硬盘序列号,网卡序列号等等),再通过一系列算法而得到了一个唯一标识,其实我们也可以通过一个api函数生成我们的唯一标识,由于硬盘人人都有,而网卡不一定每个人都有,所以以读硬盘序列号为例,下面就先介绍一下我们要用到的api函数BOOL GetVolumeInformation(LPCTSTR lpRootPathName, // 硬盘的路径LPTSTR lpVolumeNameBuffer, // 硬盘的卷标DWORD nVolumeNameSize, // 卷标的字符串长度LPDWORD lpVolumeSerialNumber, // 硬盘的序列号LPDWORD lpMaximumComponentLength, // 最大的文件长度LPDWORD lpFileSystemFlags, // 文件系统的一此标志LPTSTR lpFileSystemNameBuffer, // 存储所在盘符的分区类型的长指针变量DWORD nFileSystemNameSize // 分区类型的长指针变量所指向的字符串长度);如果上述函数成功就返回一个非0值。

获取硬盘物理序列号

获取硬盘物理序列号

scip.irDriveRegs.bFeaturesReg=0; scip.irDriveRegs.bSectorCountReg=1; scip.irDriveRegs.bSectorNumberReg=1; scip.irDriveRegs.bCylLowReg=0; scip.irDriveRegs.bCylHighReg=0; scip.irDriveRegs.bDriveHeadReg=0xA0 | (((BYTE) drive & 1) << 4); scip.irDriveRegs.bCommandReg=bIDCmd; scip.bDriveNumber=(BYTE) drive; scip.cBufferSize=IDENTIFY_BUFFER_SIZE; if (!DeviceIoControl(drive, DFP_RECEIVE_DRIVE_DATA, &scip, sizeof (SENDCMDINPARAMS) - 1,
获取硬盘物理序列号 最近才做完了这个获取 IDE 硬盘物理序列号的程序。声明一下,这个程序是我根据 Lynn McGuire 的那个 DiskID32 的源代码做了些自以为是的改动得到的,只能在 NT 平台下获 得第一块 IDE 硬盘的物理序列号。同时,这个程序用到了不少未公开的 Windows 的结构 和常量......
sizeof (VersionParams), &cbBytesReturned, NULL)) {
// 错误处理 return ; } if (VersionParams.bIDEDeviceMap<=0) { // 错误处理 return ; } BYTE bIDCmd = 0; SENDCMDINPARAMS scip; bIDCmd = (VersionParams.bIDEDeviceMap >> 0 & 0x10) ? IDE_ATAPI_IDENTIFY : IDE_ATA_IDENTIFY; memset (&scip, 0, sizeof(scip)); memset (IdOutCmd, 0, sizeof(IdOutCmd)); scip.cBufferSize=IDENTIFY_BUFFER_SIZE;

虚拟机中获取硬盘序列号的方法

虚拟机中获取硬盘序列号的方法

虚拟机中获取硬盘序列号的方法
1.使用命令行工具:打开虚拟机,进入命令行模式,输入“wmic diskdrive get serialnumber”命令即可获取硬盘序列号。

2. 使用虚拟机管理软件:使用虚拟机管理软件(如VMware、VirtualBox),进入虚拟机设置,找到存储设备选项,可以看到虚拟硬盘的详细信息,包括硬盘序列号。

3. 在虚拟机中运行硬盘检测工具:下载并安装硬盘检测工具,运行检测程序,可以在报告中看到硬盘的序列号。

需要注意的是,在虚拟机中获取的硬盘序列号和物理机器上的可能不同,因为虚拟机是通过虚拟硬盘来模拟物理硬盘的。

- 1 -。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
bReserved: array[0..127] of BYTE;
end;
PIdSector = ^TIdSector;
TDriverStatus = packed record
bDriverError: Byte;
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function GetIdeSerialNumber: pchar; //获取硬盘的出厂系列号;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
private
{ Private declarations }
bSectorNumberReg: BYTE;
bCylLowReg: BYTE;
bCylHighReg: BYTE;
bDriveHeadReg: BYTE;
bCommandReg: BYTE;
bDriveNumber: BYTE;
bReserved: array[0..2] of Byte;
dwReserved: array[0..3] of DWORD;
bBuffer: array[0..0] of Byte;
FillChar(aIdOutCmd, SizeOf(aIdOutCmd), #0);
cbBytesReturned := 0;
with SCIP do
begin
hDevice := CreateFile('\\.\PhysicalDrive0', GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
const IDENTIFY_BUFFER_SIZE = 512;
type
TIDERegs = packed record
bFeaturesReg: BYTE;
bSectorCountReg: BYTE;
wNumCurrentCyls: Word;
wNumCurrentHeads: Word;
wNumCurrentSectorsPerTrack: Word;
ulCurrentSectorCapacity: DWORD;
wNumHeads: Word;
wBytesPerTrack: Word;
wBytesPerSector: Word;
wSectorsPerTrack: Word;
wVendorUnique: array[0..2] of Word;
end else // Version Windows 95 OSR2, Windows 98
hDevice := CreateFile('\\.\SMARTVSD', 0, 0, nil, CREATE_NEW, 0, 0);
i: Integer;
c: Char;ห้องสมุดไป่ตู้
begin
ptr := @Data;
for I := 0 to (Size shr 1) - 1 do begin
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
cBufferSize := IDENTIFY_BUFFER_SIZE;
with irDriveRegs do
begin
bSectorCountReg := 1;
Label5: TLabel;
PValue: TLabel;
FValue: TLabel;
MValue: TLabel;
SValue: TLabel;
Button2: TButton;
Edit3: TEdit;
Button3: TButton;
end;
var
hDevice: Thandle;
cbBytesReturned: DWORD;
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;
end;
TIdSector = packed record
wGenConfig: Word;
wNumCyls: Word;
wReserved: Word;
sFirmwareRev: array[0..7] of Char;
sModelNumber: array[0..39] of Char;
wMoreVendorUnique: Word;
wDoubleWordIO: Word;
c := ptr^;
ptr^ := (ptr + 1)^;
(ptr + 1)^ := c;
Inc(ptr, 2);
end;
end;
begin
Result := '';
if SysUtils.Win32Platform = VER_PLATFORM_WIN32_NT then begin // Windows NT, Windows 2000
bReserved: BYTE;
end;
TSendCmdInParams = packed record
cBufferSize: DWORD;
irDriveRegs: TIDERegs;
sSerialNumber: array[0..19] of CHAR;
wBufferType: Word;
wBufferSize: Word;
wECCSize: Word;
Button1: TButton;
Memo1: TMemo;
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
if hDevice = INVALID_HANDLE_VALUE then Exit;
try
FillChar(SCIP, SizeOf(TSendCmdInParams) - 1, #0);
wCapabilities: Word;
wReserved1: Word;
wPIOTiming: Word;
wDMATiming: Word;
wBS: Word;
bIDEStatus: Byte;
bReserved: array[0..1] of Byte;
dwReserved: array[0..1] of DWORD;
end;
TSendCmdOutParams = packed record
cBufferSize: DWORD;
DriverStatus: TDriverStatus;
bBuffer: array[0..0] of BYTE;
wMultSectorStuff: Word;
ulTotalAddressableSectors: DWORD;
wSingleWordDMA: Word;
wMultiWordDMA: Word;
相关文档
最新文档