在新建的project里面加入一个类
即:下面一个类
GetHDSerial.cpp
<code class="hljs cs has-numbering" style="font-family: 'Source Code Pro', monospace; display: block; padding: 0px; color: inherit; box-sizing: border-box;font-size:undefined; white-space: pre; border-top-left-radius: 0px; border-top-right-radius: 0px; border-bottom-right-radius: 0px; border-bottom-left-radius: 0px; word-wrap: normal; background: transparent;"><span class="hljs-comment" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(136, 0, 0); box-sizing: border-box;">// GetHDSerial.cpp: implementation of the CGetHDSerial class.</span> <span class="hljs-comment" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(136, 0, 0); box-sizing: border-box;">// Download by http://www.newxing.com/</span> <span class="hljs-comment" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(136, 0, 0); box-sizing: border-box;"><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span>/</span> <span class="hljs-preprocessor" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(68, 68, 68); box-sizing: border-box;">#include "stdafx.h"</span> <span class="hljs-preprocessor" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(68, 68, 68); box-sizing: border-box;">#include "GetHDSerial.h"</span> <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">char</span> m_buffer[<span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">256</span>]; WORD m_serial[<span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">256</span>]; DWORD m_OldInterruptAddress; DWORDLONG m_IDTR; <span class="hljs-comment" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(136, 0, 0); box-sizing: border-box;">// 等待硬盘空暇</span> <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">static</span> unsigned <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">int</span> WaitHardDiskIdle() { BYTE byTemp; Waiting: _asm { mov dx, <span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">0x1f7</span> <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">in</span> al, dx cmp al, <span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">0x80</span> jb Endwaiting jmp Waiting } Endwaiting: _asm { mov byTemp, al } <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">return</span> byTemp; } <span class="hljs-comment" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(136, 0, 0); box-sizing: border-box;">//中断服务程序</span> <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">void</span> _declspec( naked )InterruptProcess(<span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">void</span>) { <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">int</span> byTemp; <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">int</span> i; WORD temp; <span class="hljs-comment" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(136, 0, 0); box-sizing: border-box;">//保存寄存器值</span> _asm { push eax push ebx push ecx push edx push esi } WaitHardDiskIdle();<span class="hljs-comment" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(136, 0, 0); box-sizing: border-box;">//等待硬盘空暇状态</span> _asm { mov dx, <span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">0x1f6</span> mov al, <span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">0xa0</span> <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">out</span> dx, al } byTemp = WaitHardDiskIdle(); <span class="hljs-comment" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(136, 0, 0); box-sizing: border-box;">//若直接在Ring3级运行等待命令,会进入死循环</span> <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">if</span> ((byTemp&<span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">0x50</span>)!=<span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">0x50</span>) { _asm <span class="hljs-comment" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(136, 0, 0); box-sizing: border-box;">// 恢复中断现场并退出中断服务程序</span> { pop esi pop edx pop ecx pop ebx pop eax iretd } } _asm { mov dx, <span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">0x1f6</span> <span class="hljs-comment" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(136, 0, 0); box-sizing: border-box;">//命令端口1f6,选择驱动器0</span> mov al, <span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">0xa0</span> <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">out</span> dx, al inc dx mov al, <span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">0xec</span> <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">out</span> dx, al <span class="hljs-comment" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(136, 0, 0); box-sizing: border-box;">//发送读驱动器參数命令</span> } byTemp = WaitHardDiskIdle(); <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">if</span> ((byTemp&<span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">0x58</span>)!=<span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">0x58</span>) { _asm <span class="hljs-comment" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(136, 0, 0); box-sizing: border-box;">// 恢复中断现场并退出中断服务程序</span> { pop esi pop edx pop ecx pop ebx pop eax iretd } } <span class="hljs-comment" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(136, 0, 0); box-sizing: border-box;">//读取硬盘控制器的所有信息</span> <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">for</span> (i=<span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">0</span>;i<<span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">256</span>;i++) { _asm { mov dx, <span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">0x1f0</span> <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">in</span> ax, dx mov temp, ax } m_serial[i] = temp; } _asm { pop esi pop edx pop ecx pop ebx pop eax iretd } } <span class="hljs-comment" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(136, 0, 0); box-sizing: border-box;"><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span>/</span> <span class="hljs-comment" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(136, 0, 0); box-sizing: border-box;">// Construction/Destruction</span> <span class="hljs-comment" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(136, 0, 0); box-sizing: border-box;"><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span><span class="hljs-xmlDocTag" style="margin: 0px; padding: 0px; box-sizing: border-box;">///</span>/</span> CGetHDSerial::CGetHDSerial() { } CGetHDSerial::~CGetHDSerial() { } <span class="hljs-comment" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(136, 0, 0); box-sizing: border-box;">// 读取硬盘序列号函数</span> <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">char</span>* CGetHDSerial::GetHDSerial() { m_buffer[<span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">0</span>]=<span class="hljs-string" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 136, 0); box-sizing: border-box;">' '</span>; <span class="hljs-comment" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(136, 0, 0); box-sizing: border-box;">// 得到当前操作系统版本号</span> OSVERSIONINFO OSVersionInfo; OSVersionInfo.dwOSVersionInfoSize = <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">sizeof</span>(OSVERSIONINFO); GetVersionEx( &OSVersionInfo); <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">if</span> (OSVersionInfo.dwPlatformId != VER_PLATFORM_WIN32_NT) { <span class="hljs-comment" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(136, 0, 0); box-sizing: border-box;">// Windows 9x/ME下读取硬盘序列号</span> WORD m_wWin9xHDSerial[<span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">256</span>]; Win9xReadHDSerial(m_wWin9xHDSerial); strcpy (m_buffer, WORDToChar (m_wWin9xHDSerial, <span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">10</span>, <span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">19</span>)); } <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">else</span> { <span class="hljs-comment" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(136, 0, 0); box-sizing: border-box;">// Windows NT/2000/XP下读取硬盘序列号</span> DWORD m_wWinNTHDSerial[<span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">256</span>]; <span class="hljs-comment" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(136, 0, 0); box-sizing: border-box;">// 推断是否有SCSI硬盘</span> <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">if</span> ( ! WinNTReadIDEHDSerial(m_wWinNTHDSerial)) WinNTReadSCSIHDSerial(m_wWinNTHDSerial); strcpy (m_buffer, DWORDToChar (m_wWinNTHDSerial, <span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">10</span>, <span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">19</span>)); } <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">return</span> m_buffer; } <span class="hljs-comment" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(136, 0, 0); box-sizing: border-box;">// Windows9X/ME系统下读取硬盘序列号</span> <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">void</span> _stdcall CGetHDSerial::Win9xReadHDSerial(WORD * buffer) { <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">int</span> i; <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">for</span>(i=<span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">0</span>;i<<span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">256</span>;i++) buffer[i]=<span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; _asm { push eax <span class="hljs-comment" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(136, 0, 0); box-sizing: border-box;">//获取改动的中断的中断描写叙述符(中断门)地址</span> sidt m_IDTR mov eax,dword ptr [m_IDTR+<span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">02</span>h] add eax,<span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">3</span>*<span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">08</span>h+<span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">04</span>h cli <span class="hljs-comment" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(136, 0, 0); box-sizing: border-box;">//保存原先的中断入口地址</span> push ecx mov ecx,dword ptr [eax] mov cx,word ptr [eax-<span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">04</span>h] mov dword ptr m_OldInterruptAddress,ecx pop ecx <span class="hljs-comment" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(136, 0, 0); box-sizing: border-box;">//设置改动的中断入口地址为新的中断处理程序入口地址</span> push ebx lea ebx,InterruptProcess mov word ptr [eax-<span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">04</span>h],bx shr ebx,<span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">10</span>h mov word ptr [eax+<span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">02</span>h],bx pop ebx <span class="hljs-comment" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(136, 0, 0); box-sizing: border-box;">//运行中断,转到Ring 0(相似CIH病毒原理)</span> <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">int</span> <span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">3</span>h <span class="hljs-comment" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(136, 0, 0); box-sizing: border-box;">//恢复原先的中断入口地址</span> push ecx mov ecx,dword ptr m_OldInterruptAddress mov word ptr [eax-<span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">04</span>h],cx shr ecx,<span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">10</span>h mov word ptr [eax+<span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">02</span>h],cx pop ecx sti pop eax } <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">for</span>(i=<span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">0</span>;i<<span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">256</span>;i++) buffer[i]=m_serial[i]; } <span class="hljs-comment" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(136, 0, 0); box-sizing: border-box;">// Windows 9x/ME系统下,将字类型(WORD)的硬盘信息转换为字符类型(char)</span> <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">char</span> * CGetHDSerial::WORDToChar (WORD diskdata [<span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">256</span>], <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">int</span> firstIndex, <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">int</span> lastIndex) { <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">static</span> <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">char</span> <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">string</span> [<span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">1024</span>]; <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">int</span> index = <span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">int</span> position = <span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">0</span>; <span class="hljs-comment" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(136, 0, 0); box-sizing: border-box;">// 依照高字节在前。低字节在后的顺序将字数组diskdata 中内容存入到字符串string中 </span> <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">for</span> (index = firstIndex; index <= lastIndex; index++) { <span class="hljs-comment" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(136, 0, 0); box-sizing: border-box;">// 存入字中的高字节</span> <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">string</span> [position] = (<span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">char</span>) (diskdata [index] / <span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">256</span>); position++; <span class="hljs-comment" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(136, 0, 0); box-sizing: border-box;">// 存入字中的低字节</span> <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">string</span> [position] = (<span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">char</span>) (diskdata [index] % <span class="hljs-number" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 102, 102); box-sizing: border-box;">256</span>); position++; } <span class="hljs-comment" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(136, 0, 0); box-sizing: border-box;">// 加入字符串结束标志</span> <span class="hljs-keyword" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 0, 136); box-sizing: border-box;">string</span> [position] = <span class="hljs-string" style="font-family: 宋体 !important; margin: 0px; padding: 0px; color: rgb(0, 136, 0); box-sizing: border-box;">'