資源簡介
支持 Windows 9x/ME/Windows NT/2000/XP/WIN7 下讀取硬盤序列號,支持IDE/SCSI硬盤,在WIN7下需要管理員身份運行

代碼片段和文件信息
//?GetHDSerial.cpp:?implementation?of?the?CGetHDSerial?class.????
//????
//////////////////////////////////////////////////////////////////////????
#include?“stdafx.h“????
#include?“GetHDSerial.h“????
char??m_buffer[256];???
WORD??m_serial[256];???
DWORD?m_OldInterruptAddress;???
DWORDLONG?m_IDTR;???
//?等待硬盤空閑????
static?unsigned?int?WaitHardDiskIdle()????
{????
BYTE?byTemp;???
Waiting:???
_asm???
{???
mov?dx?0x1f7???
in?al?dx???
cmp?al?0x80???
jb?Endwaiting???
jmp?Waiting???
}???
Endwaiting:???
_asm???
{???
mov?byTemp?al???
}???
return?byTemp;????
}????
//中斷服務程序????
void??_declspec(?naked?)InterruptProcess(void)???
{???
int???byTemp;???
int???i;???
WORD?temp;???
//保存寄存器值????
_asm???
{???
push?eax???
push?ebx???
push?ecx???
push?edx???
push?esi???
}???
WaitHardDiskIdle();//等待硬盤空閑狀態????
_asm???
{???
mov?dx?0x1f6???
mov?al?0xa0???
out?dx?al???
}???
byTemp?=?WaitHardDiskIdle();?//若直接在Ring3級執行等待命令,會進入死循環????
if?((byTemp&0x50)!=0x50)????
{???
_asm??//?恢復中斷現場并退出中斷服務程序????
{???
pop?esi???
pop?edx???
pop?ecx???
pop?ebx???
pop?eax???
iretd???
}???
}???
_asm???
{???
mov?dx?0x1f6?//命令端口1f6選擇驅動器0????
mov?al?0xa0???
out?dx?al???
inc?dx???
mov?al?0xec???
out?dx?al?//發送讀驅動器參數命令????
}?????
byTemp?=?WaitHardDiskIdle();????
if?((byTemp&0x58)!=0x58)????
{???
_asm??//?恢復中斷現場并退出中斷服務程序????
{???
pop?esi???
pop?edx???
pop?ecx???
pop?ebx???
pop?eax???
iretd???
}???
}???
//讀取硬盤控制器的全部信息????
for?(i=0;i<256;i++)????
{???
_asm???
{???
mov?dx?0x1f0???
in?ax?dx???
mov?temp?ax???
}???
m_serial[i]?=?temp;????
}???????????????????????????????????
_asm???
{???
pop?esi???
pop?edx???
pop?ecx???
pop?ebx???
pop?eax???
iretd???
}?????
}???
//////////////////////////////////////////////////////////////////////????
//?Construction/Destruction????
//////////////////////////////////////////////////////////////////////????
CGetHDSerial::CGetHDSerial()???
{???
}???
CGetHDSerial::~CGetHDSerial()???
{???
}???
//?讀取硬盤序列號函數????
char*?CGetHDSerial::GetHDSerial()???
{??????
m_buffer[0]=‘\n‘;???
//?得到當前操作系統版本????
OSVERSIONINFO?OSVersionInfo;???
OSVersionInfo.dwOSVersionInfoSize?=?sizeof(OSVERSIONINFO);???
GetVersionEx(?&OSVersionInfo);???
if?(OSVersionInfo.dwPlatformId?!=?VER_PLATFORM_WIN32_NT)???
{??????
//?Windows?9x/ME下讀取硬盤序列號????
WORD?m_wWin9xHDSerial[256];???
Win9xReadHDSerial(m_wWin9xHDSerial);?????
strcpy_s(m_buffer?_countof(m_buffer)WORDToChar?(m_wWin9xHDSerial?10?19));???
}???
else???
{???
//?Windows?NT/2000/XP下讀取硬盤序列號????
DWORD?m_wWinNTHDSerial[256];?????
//?判斷是否有SCSI硬盤????
if?(?!?WinNTReadIDEHDSerial(m_wWinNTHDSerial))????
WinNTReadSCSIHDSerial(m_wWinNTHDSerial);?????
strcpy_s(m_buffer?_countof(m_b
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????文件????????132??2010-04-22?15:18??如何調用.txt
?????文件??????11274??2009-12-28?14:12??GetHDSerial.cpp
?????文件???????4801??2009-10-23?08:33??GetHDSerial.h
-----------?---------??----------?-----??----
????????????????16207????????????????????3
- 上一篇:sysbench 0.5
- 下一篇:用FCM與KFCM處理腦部圖像
評論
共有 條評論