C#编程如何实现这个功能DELPHI读取CPU和硬盘ID功能
DELPHI编程实现读取“CPU的序列号”如:0001-067A-BFEB-FBFF-0408-E39D
DELPHI编程实现读取“硬盘ID序列号”如:6VM1CPBN
C#编程如何实现这个功能
0001-067A-BFEB-FBFF-0408-E39D,并获取CPU的序列号
6VM1CPBN,并获取硬盘ID序列号
DELPHI编程实现读取“CPU的序列号”如:0001-067A-BFEB-FBFF-0408-E39D
DELPHI编程实现读取“硬盘ID序列号”如:6VM1CPBN
C#编程如何实现这个功能
0001-067A-BFEB-FBFF-0408-E39D,并获取CPU的序列号
6VM1CPBN,并获取硬盘ID序列号
http://blog.csdn.net/fwj380891124/article/details/6795088
string cpuInfo = "";//cpu序列号
ManagementClass cimobject = new ManagementClass("Win32_Processor");
ManagementObjectCollection moc = cimobject.GetInstances();
foreach (ManagementObject mo in moc)
{
cpuInfo = mo.Properties["ProcessorId"].Value.ToString();
this.txtcpu.Text = "cpu序列号:" + cpuInfo.ToString();
}
测试如下:
cpu序列号:BFEBFBFF0001067A
为什么获取不到这个:0001-067A-BFEB-FBFF-0408-E39D
???????????????????????????????????????????????
DELPHI版本的我已会了呀
IO类中有函数
到底有什么参数呀???????
不会吧这个不是“硬盘序列号”?
那我用C#中如何再次读取这个信息呀????
DELPHI编程实现读取如:6VM1CPBN
我如何用C#读取这个些信息:
1)M1CPBN是ST硬盘的序列号2)01-067A-BFEB-FBFF-0408-E39D这是个卷标对要是用C#编程如何读取这些信息呀????
还请赐教
01-067A-BFEB-FBFF-0408-E39D
应该是:
0001-067A-BFEB-FBFF-0408-E39D
C#读取设备网卡的MAC地址和硬盘的卷标号
http://blog.csdn.net/donetren/article/details/6497015
http://dsdm.bokee.com/5264510.html
http://download.csdn.net/download/enaking/1440233
http://download.csdn.net/detail/cowely/364678-----1
http://download.csdn.net/detail/cowely/364457xxxxxxxx5
http://www.cnblogs.com/cloudstep/archive/2010/01/28/1658770.html
CPU序列号有一个好处就是非常难以修改,至少目前还没听说。将CPU ID 和MAC id 、硬盘id组合起来生成软件序列号,可以大大增加序列号的安全性。(后两者都可以通过软件方法修改)。好了,转入正题,闷头发源码:
CString CGetCpuIDDlg::GetCPUID()
{
CString CPUID;
unsigned long s1,s2;
unsigned char vendor_id[]="------------";
char sel;
sel='1';
CString VernderID;
CString MyCpuID,CPUID1,CPUID2;
switch(sel)
{
case '1':
__asm{
xor eax,eax //eax=0:取Vendor信息
cpuid //取cpu id指令,可在Ring3级使用
mov dword ptr vendor_id,ebx
mov dword ptr vendor_id[+4],edx
mov dword ptr vendor_id[+8],ecx
}
VernderID.Format("%s-",vendor_id);
__asm{
mov eax,01h //eax=1:取CPU序列号
xor edx,edx
cpuid
mov s1,edx
mov s2,eax
}
CPUID1.Format("%08X%08X",s1,s2);
__asm{
mov eax,03h
xor ecx,ecx
xor edx,edx
cpuid
mov s1,edx
mov s2,ecx
}
CPUID2.Format("%08X%08X",s1,s2);
break;
case '2':
{
__asm{
mov ecx,119h
rdmsr
or eax,00200000h
wrmsr
}
}
AfxMessageBox("CPU id is disabled.");
break;
}
MyCpuID = CPUID1+CPUID2;
CPUID = MyCpuID;
return CPUID;
}以上代码在Windows XP sp2 +intel P4上测试通过,能否在AMD的CPU上测试通过有待验证。
//获取CPUID信息 加载单元 ,GetCPUSerialNumberp
//--------------------
uses GetCPUSerialNumberpvar
ss:string;
begin
ss:=GetCPUSerialNumber;
showmessage('当前CPU信息为:'+ss);
end;
获取信息如:0001-067A-BFEB-FBFF-0408-E39D
下面是获取 硬盘ID
//获得硬盘序列号
function GetIdeSerialNumber: pchar;
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;
。