注:是物理的,不是分区的,就是取得的东西必须是机子独一无二的标识。
多谢啦,在线等啊!
31 个解决方案
#1
//an为8字节缓存
int GetCPUid(BYTE *an)
{
unsigned long s1 = 0,s2=0;
_asm
{
mov eax,01h
xor edx,edx
cpuid
mov s1,edx
mov s2,eax
}
memcpy(an,(BYTE *)&s1,4);
memcpy(an+4,(BYTE *)&s2,4);
return 8;
}
硬盘ID:
http://topic.csdn.net/u/20080918/13/6501b4ac-4d2f-44cc-9a0c-16ce88624fba.html
int GetCPUid(BYTE *an)
{
unsigned long s1 = 0,s2=0;
_asm
{
mov eax,01h
xor edx,edx
cpuid
mov s1,edx
mov s2,eax
}
memcpy(an,(BYTE *)&s1,4);
memcpy(an+4,(BYTE *)&s2,4);
return 8;
}
硬盘ID:
http://topic.csdn.net/u/20080918/13/6501b4ac-4d2f-44cc-9a0c-16ce88624fba.html
#2
获取CPU ID
CString CpuID,CPUID_1,CPUID_2;
__asm{
mov eax,01h
xor edx,edx
cpuid
mov s1,edx
mov s2,eax
}
CPUID_1.Format("%08X%08X",s1,s2);
__asm{
mov eax,03h
xor ecx,ecx
xor edx,edx
cpuid
mov s1,edx
mov s2,ecx
}
CPUID_2.Format("%08X%08X",s1,s2);
CpuID=CPUID_1+CPUID_2;
#3
http://vip.6to23.com/NowCan1/tech/cpuid.htm
#4
给你个 更详细的吧。
http://www.pcppc.cn/kaifa/VCjiaocheng/kaifa_113966.html
http://www.pcppc.cn/kaifa/VCjiaocheng/kaifa_113966.html
#5
BOOLEAN MainBoardBiosSerialNo()
{
HANDLE physmem;
UNICODE_STRING physmemString;
OBJECT_ATTRIBUTES attributes;
WCHAR physmemName[] = L"\\Device\\PhysicalMemory";
NTSTATUS ntStatus;
DWORD RAdd = 0xFEC71;
DWORD LAdd = 100;
DWORD OAdd;
DWORD i;
RtlInitUnicodeString( &physmemString, physmemName );
InitializeObjectAttributes( &attributes,
&physmemString,
OBJ_CASE_INSENSITIVE,
NULL,
NULL
);
ntStatus = ZwOpenSection( &physmem,
SECTION_MAP_READ,
&attributes
);
if( !NT_SUCCESS( ntStatus ))
{
DbgPrint("ZwOpenSection() is error\n");
return FALSE;
}
DbgPrint("ZwOpenSection() is OK\n");
if (!MapView(physmem,&RAdd,&LAdd,&OAdd))
{
DbgPrint("MapView() is error\n");
return FALSE;
}
DbgPrint("MapView() is OK\n");
for ( i = 0; i < LAdd; i ++)
{
DbgPrint("%x",*(PUCHAR)(OAdd + i));
}
ntStatus = ZwUnmapViewOfSection( (HANDLE) -1, (PVOID) OAdd );
if( !NT_SUCCESS(ntStatus))
{
DbgPrint("Unable to unmap view");
return FALSE;
}
return TRUE;
}
BOOLEAN MapView( HANDLE HPMemory,DWORD *dwAddress,DWORD *dwLength,DWORD *dwVAddress )
{
NTSTATUS Status;
PHYSICAL_ADDRESS ViewBaseAddress;
*dwVAddress = 0;
ViewBaseAddress.QuadPart = (ULONGLONG) (*dwAddress);
Status = ZwMapViewOfSection ( HPMemory,
(HANDLE) -1,
(PVOID)dwVAddress,
0,
*dwLength,
&ViewBaseAddress,
dwLength,
ViewShare,
0,
PAGE_READONLY
);
if( !NT_SUCCESS( Status ))
{
return FALSE;
}
return TRUE;
}
#6
好呀,搜到了...
#7
收藏....,极具升值潜力
#8
哦,好多热心人哦.
CPU,硬盘可以做. 主板就比较麻烦了,即使支持SMBIOS,也不一定有厂商标识或者GUID, 要不全为空要不全为0XFF,要不一串空格
CPU,硬盘可以做. 主板就比较麻烦了,即使支持SMBIOS,也不一定有厂商标识或者GUID, 要不全为空要不全为0XFF,要不一串空格
#9
多谢大家啊,只是发一部分代码,我还是整理不出来的,呵呵
能有封装好的类或者源码就更好了,
现在还是没有搞定啊,
能有封装好的类或者源码就更好了,
现在还是没有搞定啊,
#10
学习了
#11
那用户更换硬件怎么办?
#12
所以能获取CPUIID最好了
大家谁还有什么建议啊?
最好把地址发上来,呵呵
多谢了
大家谁还有什么建议啊?
最好把地址发上来,呵呵
多谢了
#13
CPUID 有什么好的?
很多主板可以硬屏蔽对CPU序列号读取命令
很多主板可以硬屏蔽对CPU序列号读取命令
#14
CSDN资源里有《VC获取CPU ID号》可以用的,
还是把关键代码发一下吧
在这里再次感谢那位上传资源的朋友。
现在问题是有的CPU不支持cpuid指令(而且“很多主板可以硬屏蔽对CPU序列号读取命令”),那该怎么办呢?
还发现一个网址,给大家做参考。http://www.weste.net/2006/6-12/11380593215-2.html
还是把关键代码发一下吧
char OEMString[13];
int iEAXValue,iEBXValue,iECXValue,iEDXValue;
_asm
{
mov eax,0
cpuid
mov DWORD PTR OEMString,ebx
mov DWORD PTR OEMString+4,edx
mov DWORD PTR OEMString+8,ecx
mov BYTE PTR OEMString+12,0
}
SetDlgItemText(IDC_STATIC1,OEMString); //CPU名称
_asm
{
mov eax,1
cpuid
mov iEAXValue,eax
mov iEBXValue,ebx
mov iECXValue,ecx
mov iEDXValue,edx
}
int iCPUFamily=(0xf00 & iEAXValue)>>8;
char Family[10]={0};
itoa(iCPUFamily,Family,10);
SetDlgItemText(IDC_STATIC2,Family); //CPU系列
_asm
{
mov eax,2
CPUID
}
char szCPUID[129]={NULL};
char szTmp[33]={NULL};
unsigned long s1 = 0,s2=0;
_asm
{
mov eax,01h
xor edx,edx
cpuid
mov s1,edx
mov s2,eax
}
sprintf(szTmp, "%08X%08X", s1, s2);
strcpy(szCPUID, szTmp);
_asm
{
mov eax,03h
xor ecx,ecx
xor edx,edx
cpuid
mov s1,edx
mov s2,ecx
}
sprintf(szTmp, "%08X%08X", s1, s2);
strcat(szCPUID, szTmp);
SetDlgItemText(IDC_STATIC3,szCPUID); //CPUID号
在这里再次感谢那位上传资源的朋友。
现在问题是有的CPU不支持cpuid指令(而且“很多主板可以硬屏蔽对CPU序列号读取命令”),那该怎么办呢?
还发现一个网址,给大家做参考。http://www.weste.net/2006/6-12/11380593215-2.html
#15
现在可以了,上边获取CPIID还有个小问题,
_asm
{
mov eax,01h
xor edx,edx
cpuid
mov s1,edx
mov s2,eax
}
sprintf(szTmp, "%08X%08X", s1, s2);
strcpy(szCPUID, szTmp);
要先判断edx的18位是否为1,为1则CPU有序列号,为没有。若有再执行下边。。。。
_asm
{
mov eax,03h
xor ecx,ecx
xor edx,edx
cpuid
mov s1,edx
mov s2,ecx
}
硬盘物理序列号在http://www.vckbase.com/document/viewdoc/?id=706有个封装好的类。
这个也不错,可以了解下CPU
http://www.codeguru.com/cpp/w-p/system/hardwareinformation/article.php/c9087/
_asm
{
mov eax,01h
xor edx,edx
cpuid
mov s1,edx
mov s2,eax
}
sprintf(szTmp, "%08X%08X", s1, s2);
strcpy(szCPUID, szTmp);
要先判断edx的18位是否为1,为1则CPU有序列号,为没有。若有再执行下边。。。。
_asm
{
mov eax,03h
xor ecx,ecx
xor edx,edx
cpuid
mov s1,edx
mov s2,ecx
}
硬盘物理序列号在http://www.vckbase.com/document/viewdoc/?id=706有个封装好的类。
这个也不错,可以了解下CPU
http://www.codeguru.com/cpp/w-p/system/hardwareinformation/article.php/c9087/
#16
跨越时空赞下楼主和各位好心人.....
#17
好贴
#18
好好好
#19
学习了......
------------------------------
------------------------------
#20
收藏了
#21
好贴,收藏!
#22
好贴,mark一下,留着以后用!~
#23
xuexi
#24
不容易呀,看个贴子不得回复才能看!
#25
跨越时空的礼赞
#26
一年多了 我又搜到这帖子了
#27
学习中
跨越时空,感谢各位热心的同志
跨越时空,感谢各位热心的同志
#28
我来了
#29
前人栽树后人乘凉,在此谢过~
#30
mark
#31
标记,哈哈哈……
#1
//an为8字节缓存
int GetCPUid(BYTE *an)
{
unsigned long s1 = 0,s2=0;
_asm
{
mov eax,01h
xor edx,edx
cpuid
mov s1,edx
mov s2,eax
}
memcpy(an,(BYTE *)&s1,4);
memcpy(an+4,(BYTE *)&s2,4);
return 8;
}
硬盘ID:
http://topic.csdn.net/u/20080918/13/6501b4ac-4d2f-44cc-9a0c-16ce88624fba.html
int GetCPUid(BYTE *an)
{
unsigned long s1 = 0,s2=0;
_asm
{
mov eax,01h
xor edx,edx
cpuid
mov s1,edx
mov s2,eax
}
memcpy(an,(BYTE *)&s1,4);
memcpy(an+4,(BYTE *)&s2,4);
return 8;
}
硬盘ID:
http://topic.csdn.net/u/20080918/13/6501b4ac-4d2f-44cc-9a0c-16ce88624fba.html
#2
获取CPU ID
CString CpuID,CPUID_1,CPUID_2;
__asm{
mov eax,01h
xor edx,edx
cpuid
mov s1,edx
mov s2,eax
}
CPUID_1.Format("%08X%08X",s1,s2);
__asm{
mov eax,03h
xor ecx,ecx
xor edx,edx
cpuid
mov s1,edx
mov s2,ecx
}
CPUID_2.Format("%08X%08X",s1,s2);
CpuID=CPUID_1+CPUID_2;
#3
http://vip.6to23.com/NowCan1/tech/cpuid.htm
#4
给你个 更详细的吧。
http://www.pcppc.cn/kaifa/VCjiaocheng/kaifa_113966.html
http://www.pcppc.cn/kaifa/VCjiaocheng/kaifa_113966.html
#5
BOOLEAN MainBoardBiosSerialNo()
{
HANDLE physmem;
UNICODE_STRING physmemString;
OBJECT_ATTRIBUTES attributes;
WCHAR physmemName[] = L"\\Device\\PhysicalMemory";
NTSTATUS ntStatus;
DWORD RAdd = 0xFEC71;
DWORD LAdd = 100;
DWORD OAdd;
DWORD i;
RtlInitUnicodeString( &physmemString, physmemName );
InitializeObjectAttributes( &attributes,
&physmemString,
OBJ_CASE_INSENSITIVE,
NULL,
NULL
);
ntStatus = ZwOpenSection( &physmem,
SECTION_MAP_READ,
&attributes
);
if( !NT_SUCCESS( ntStatus ))
{
DbgPrint("ZwOpenSection() is error\n");
return FALSE;
}
DbgPrint("ZwOpenSection() is OK\n");
if (!MapView(physmem,&RAdd,&LAdd,&OAdd))
{
DbgPrint("MapView() is error\n");
return FALSE;
}
DbgPrint("MapView() is OK\n");
for ( i = 0; i < LAdd; i ++)
{
DbgPrint("%x",*(PUCHAR)(OAdd + i));
}
ntStatus = ZwUnmapViewOfSection( (HANDLE) -1, (PVOID) OAdd );
if( !NT_SUCCESS(ntStatus))
{
DbgPrint("Unable to unmap view");
return FALSE;
}
return TRUE;
}
BOOLEAN MapView( HANDLE HPMemory,DWORD *dwAddress,DWORD *dwLength,DWORD *dwVAddress )
{
NTSTATUS Status;
PHYSICAL_ADDRESS ViewBaseAddress;
*dwVAddress = 0;
ViewBaseAddress.QuadPart = (ULONGLONG) (*dwAddress);
Status = ZwMapViewOfSection ( HPMemory,
(HANDLE) -1,
(PVOID)dwVAddress,
0,
*dwLength,
&ViewBaseAddress,
dwLength,
ViewShare,
0,
PAGE_READONLY
);
if( !NT_SUCCESS( Status ))
{
return FALSE;
}
return TRUE;
}
#6
好呀,搜到了...
#7
收藏....,极具升值潜力
#8
哦,好多热心人哦.
CPU,硬盘可以做. 主板就比较麻烦了,即使支持SMBIOS,也不一定有厂商标识或者GUID, 要不全为空要不全为0XFF,要不一串空格
CPU,硬盘可以做. 主板就比较麻烦了,即使支持SMBIOS,也不一定有厂商标识或者GUID, 要不全为空要不全为0XFF,要不一串空格
#9
多谢大家啊,只是发一部分代码,我还是整理不出来的,呵呵
能有封装好的类或者源码就更好了,
现在还是没有搞定啊,
能有封装好的类或者源码就更好了,
现在还是没有搞定啊,
#10
学习了
#11
那用户更换硬件怎么办?
#12
所以能获取CPUIID最好了
大家谁还有什么建议啊?
最好把地址发上来,呵呵
多谢了
大家谁还有什么建议啊?
最好把地址发上来,呵呵
多谢了
#13
CPUID 有什么好的?
很多主板可以硬屏蔽对CPU序列号读取命令
很多主板可以硬屏蔽对CPU序列号读取命令
#14
CSDN资源里有《VC获取CPU ID号》可以用的,
还是把关键代码发一下吧
在这里再次感谢那位上传资源的朋友。
现在问题是有的CPU不支持cpuid指令(而且“很多主板可以硬屏蔽对CPU序列号读取命令”),那该怎么办呢?
还发现一个网址,给大家做参考。http://www.weste.net/2006/6-12/11380593215-2.html
还是把关键代码发一下吧
char OEMString[13];
int iEAXValue,iEBXValue,iECXValue,iEDXValue;
_asm
{
mov eax,0
cpuid
mov DWORD PTR OEMString,ebx
mov DWORD PTR OEMString+4,edx
mov DWORD PTR OEMString+8,ecx
mov BYTE PTR OEMString+12,0
}
SetDlgItemText(IDC_STATIC1,OEMString); //CPU名称
_asm
{
mov eax,1
cpuid
mov iEAXValue,eax
mov iEBXValue,ebx
mov iECXValue,ecx
mov iEDXValue,edx
}
int iCPUFamily=(0xf00 & iEAXValue)>>8;
char Family[10]={0};
itoa(iCPUFamily,Family,10);
SetDlgItemText(IDC_STATIC2,Family); //CPU系列
_asm
{
mov eax,2
CPUID
}
char szCPUID[129]={NULL};
char szTmp[33]={NULL};
unsigned long s1 = 0,s2=0;
_asm
{
mov eax,01h
xor edx,edx
cpuid
mov s1,edx
mov s2,eax
}
sprintf(szTmp, "%08X%08X", s1, s2);
strcpy(szCPUID, szTmp);
_asm
{
mov eax,03h
xor ecx,ecx
xor edx,edx
cpuid
mov s1,edx
mov s2,ecx
}
sprintf(szTmp, "%08X%08X", s1, s2);
strcat(szCPUID, szTmp);
SetDlgItemText(IDC_STATIC3,szCPUID); //CPUID号
在这里再次感谢那位上传资源的朋友。
现在问题是有的CPU不支持cpuid指令(而且“很多主板可以硬屏蔽对CPU序列号读取命令”),那该怎么办呢?
还发现一个网址,给大家做参考。http://www.weste.net/2006/6-12/11380593215-2.html
#15
现在可以了,上边获取CPIID还有个小问题,
_asm
{
mov eax,01h
xor edx,edx
cpuid
mov s1,edx
mov s2,eax
}
sprintf(szTmp, "%08X%08X", s1, s2);
strcpy(szCPUID, szTmp);
要先判断edx的18位是否为1,为1则CPU有序列号,为没有。若有再执行下边。。。。
_asm
{
mov eax,03h
xor ecx,ecx
xor edx,edx
cpuid
mov s1,edx
mov s2,ecx
}
硬盘物理序列号在http://www.vckbase.com/document/viewdoc/?id=706有个封装好的类。
这个也不错,可以了解下CPU
http://www.codeguru.com/cpp/w-p/system/hardwareinformation/article.php/c9087/
_asm
{
mov eax,01h
xor edx,edx
cpuid
mov s1,edx
mov s2,eax
}
sprintf(szTmp, "%08X%08X", s1, s2);
strcpy(szCPUID, szTmp);
要先判断edx的18位是否为1,为1则CPU有序列号,为没有。若有再执行下边。。。。
_asm
{
mov eax,03h
xor ecx,ecx
xor edx,edx
cpuid
mov s1,edx
mov s2,ecx
}
硬盘物理序列号在http://www.vckbase.com/document/viewdoc/?id=706有个封装好的类。
这个也不错,可以了解下CPU
http://www.codeguru.com/cpp/w-p/system/hardwareinformation/article.php/c9087/
#16
跨越时空赞下楼主和各位好心人.....
#17
好贴
#18
好好好
#19
学习了......
------------------------------
------------------------------
#20
收藏了
#21
好贴,收藏!
#22
好贴,mark一下,留着以后用!~
#23
xuexi
#24
不容易呀,看个贴子不得回复才能看!
#25
跨越时空的礼赞
#26
一年多了 我又搜到这帖子了
#27
学习中
跨越时空,感谢各位热心的同志
跨越时空,感谢各位热心的同志
#28
我来了
#29
前人栽树后人乘凉,在此谢过~
#30
mark
#31
标记,哈哈哈……