如何获取硬盘和CPU的序列号?程序实现!
解决方案 »
- VS2008 and 数据库问题
- 关于 对话框捕获keydown 消息的问题。?。。。。。
- 关于对话框数据交换的问题....请指教
- 还是关于序列化的问题,百分求教
- 请问如何复位VC的程序
- [求助]已有一个基于vc的用本机摄像头录像,截图的代码,如何做成C/S模式?
- 谁能给偶讲讲_variant_t,_bstr_t,是干吗的?
- SHOW工具栏后,工具栏挡住我的客户区绘图部分,怎么下移?
- 求助CPropertySheet构造函数问题??
- 在MDI的程序中有两个VIEW窗口,一个是EDITVIEW,一个是FORMVIEW, 如何将后面的FORMVIEW窗口显示到前面来。
- 请教数据转换
- 我郁闷!!!问了好多次问题还是没解决!!!有没有串口通信的高手???!!!
#include <windows.h>
#include <stdio.h>WORD pw[256];static DWORD idt, int_idt;
static DWORD Base;
static WORD Entry;#pragma warning (disable:4035)
static int inp(WORD rdx)
{
_asm xor eax, eax
_asm mov dx, rdx
_asm in al, dx
}static WORD inpw(WORD rdx)
{
_asm xor eax, eax
_asm mov dx, rdx
_asm in ax, dx
}static void outp(WORD rdx, int ral)
{
_asm mov dx, rdx
_asm mov eax, ral
_asm out dx, al
}static int WaitIde()
{
int al;while ((al=inp(0x1F7))>=0x80) ;
return al;
}static void ReadIDE()
{
int al;
int i;WaitIde();
outp(0x1F6,0xA0);
al = WaitIde();
if ((al&0x50)!=0x50) return;outp(0x1F6,0xA0);
outp(0x1F7,0xEC);
al = WaitIde();
if ((al&0x58)!=0x58) return;for (i=0;i<256;i++) {
pw[i] = inpw(0x1F0);
}
}static void __declspec( naked ) NowInRing0()
{
_asm {
push ebp
mov ebp,espcall ReadIDEcli
mov ebx, int_idt
mov ax, Entry
mov word ptr [ebx-4], ax
mov eax, Base
shr eax, 16
mov [ebx+2], ax
sti
leave
iretd
}
}void GetIDEInfo()
{
DWORD dwExcept;dwExcept = (DWORD)NowInRing0;_asm {
mov eax, fs:[0]
push eax
sidt [esp-02h]
pop ebx
mov idt, ebx
add ebx, 0x1C
mov int_idt, ebxmov eax, [ebx]
mov [Base], eax
mov ax, [ebx-4]
mov [Entry], axcli
mov esi, dwExcept
push esi
mov [ebx-4], si
shr esi, 16
mov [ebx+2], si
pop esi
stiint 3
}
}main()
{
char s[80];
register i,j;GetIDEInfo();for (i=0,j=0;i<10;i++) {
s[j++]=pw[10+i]>>8;
s[j++]=pw[10+i]&0xFF;
}
s[j] = 0;printf("Serial=%s\n", s);return 0;
}
http://vip.6to23.com/NowCan1/tech/cpuid.htm
http://vip.6to23.com/NowCan1/tech/diskid.htm