⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 在win9x-nt下获取硬盘物理序列号.mht

📁 这是关于在VC中应用MFC的简明教程的一组完整网页集合。特点:简明--既简洁又明了
💻 MHT
📖 第 1 页 / 共 5 页
字号:
            =
bIsDiskExist;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;switch(n=
Drive=20
            /=20
            =
2)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nbsp;&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;case=20
            0: dwBaseAddress =3D 0x01F0;=20
            =
break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;case=20
            1: dwBaseAddress =3D 0x0170;=20
            =
break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;case=20
            2: dwBaseAddress =3D 0x01E8;=20
            =
break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;case=20
            3: dwBaseAddress =3D 0x0168;=20
            =
break;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR><BR>&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;btMasterSlave=20
            =3D (BYTE)(((nDrive % 2) =3D=3D 0) ? 0xA0 :=20
            =
0xB0);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//=20
            =
=BD=F8=C8=EBRing0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bIsI=
DEExist&nbsp;&nbsp;=3D=20
            =
false;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bIsDiskExist=20
            =3D=20
            =
false;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ZeroMemory(wOut=
Data,=20
            =
sizeof(wOutData));<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;ReadPhysicalDriveOnW9X_Ring0(false,=20
            dwBaseAddress,=20
            =
btMasterSlave,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&=
nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;bIsIDEExist,=20
            bIsDiskExist,=20
            =
wOutData);<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(bIsI=
DEExist=20
            &amp;&amp;=20
            =
bIsDiskExist)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{<BR>&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DWOR=
D=20
            =
dwDiskData[256];<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;szSerialNumber[21];<BR>&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char&nbsp;&nbsp;=
szModelNumber[41];<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;for(int=20
            k=3D0; k &lt; 256;=20
            =
k++)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;dwDiskData[k]=20
            =3D=20
            =
wOutData[k];<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp=
;&nbsp;&nbsp;&nbsp;//=20
            =
=C8=A1=CF=B5=C1=D0=BA=C5<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;ZeroMemory(szSerialNumber,=20
            =
sizeof(szSerialNumber));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;strcpy(szSerialNumber,=20
            ConvertToString(dwDiskData, 10,=20
            =
19));<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;//=20
            =
=C8=A1=C4=A3=D0=CD=BA=C5<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;ZeroMemory(szModelNumber,=20
            =
sizeof(szModelNumber));<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;&nbsp;&nbsp;&nbsp;strcpy(szModelNumber,=20
            ConvertToString(dwDiskData, 27,=20
            =
46));<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;pSerList-&gt;Add(szSerialNumber);<BR>&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;pModeList-&gt;Add(szModel=
Number);<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<BR>&nbsp;&n=
bsp;&nbsp;&nbsp;}<BR>&nbsp;&nbsp;&nbsp;&nbsp;SetPriorityClass(GetCurrentP=
rocess(),=20
            =
NORMAL_PRIORITY_CLASS);<BR>}<BR>//---------------------------------------=
------------------------------------<BR>//=20
            ReadPhysicalDriveOnW9X_Ring0()<BR>//<BR>// dwBaseAddress =3D =

            IDE(0,1,2,3) : 1F0h, 170h, 1E8h, 168h<BR>// btMasterSlave =
=3D=20
            Master(0xA0) Or=20
            =
Slave(0xB0)<BR>//--------------------------------------------------------=
-------------------<BR>void=20
            __fastcall ReadPhysicalDriveOnW9X_Ring0(bool bIsFirst, WORD=20
            =
dwBaseAddress,<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;BYTE=20
            btMasterSlave, bool &amp;bIsIDEExist, bool =
&amp;bIsDiskExist, WORD=20
            =
*pOutData)<BR>{<BR>&nbsp;&nbsp;&nbsp;&nbsp;BYTE&nbsp;&nbsp;btIDTR1[6];<BR=
>&nbsp;&nbsp;&nbsp;&nbsp;DWORD=20
            dwOldExceptionHook;<BR>&nbsp;&nbsp;&nbsp;&nbsp;const int=20
            nHookExceptionNo =3D=20
            =
5;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;BYTE&nbsp;&nbsp;btIsIDEExist =3D=20
            0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;BYTE&nbsp;&nbsp;btIsDiskExist =
=3D=20
            =
0;<BR>&nbsp;&nbsp;&nbsp;&nbsp;WORD&nbsp;&nbsp;wOutDataBuf[256];<BR><BR>&n=
bsp;&nbsp;&nbsp;&nbsp;BYTE&nbsp;&nbsp;btIsFirst=20
            =3D (BYTE)bIsFirst;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;const =
BYTE btBit00=20
            =3D 0x01;<BR>&nbsp;&nbsp;&nbsp;&nbsp;// const BYTE btBit02 =
=3D=20
            0x04;<BR>&nbsp;&nbsp;&nbsp;&nbsp;const BYTE btBit06 =3D=20
            0x40;<BR>&nbsp;&nbsp;&nbsp;&nbsp;const BYTE btBit07 =3D=20
            0x80;<BR>&nbsp;&nbsp;&nbsp;&nbsp;// const BYTE =
btERR&nbsp;&nbsp;=3D=20
            btBit00;<BR>&nbsp;&nbsp;&nbsp;&nbsp;const BYTE btBusy =3D=20
            btBit07;<BR>&nbsp;&nbsp;&nbsp;&nbsp;const BYTE=20
            btAtaCmd&nbsp;&nbsp;&nbsp;=3D =
0xEC;<BR>&nbsp;&nbsp;&nbsp;&nbsp;const=20
            BYTE btAtapiCmd =3D=20
            =
0xA1;<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;__asm<BR>&nbsp;&nbsp;&nbsp;&nbsp;{<B=
R>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//=20
            =
=B1=D8=D0=EB=CF=C8=D6=B4=D0=D0=D5=E2=CC=F5=D3=EF=BE=E4<BR>&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JMP=20
            =
EnterRing0<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//=20
            =
=B6=A8=D2=E5=B9=FD=B3=CC<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;//=20
            =
=B5=C8=B4=FDIDE=C9=E8=B1=B8=D6=B1=B5=BD=C6=E4=B2=BB=CE=AA=C3=A6=CE=AA=D6=B9=
<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;WaitWhileBusy=20
            =
proc<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbs=
p;EBX,=20
            =
100000<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;=
DX,=20
            =
dwBaseAddress<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADD&nbsp=
;&nbsp;DX,=20
            =
7<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LoopWhileBusy:<B=
R><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;DEC&nbsp;&nbsp;EBX<=
BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CMP&nbsp;&nbsp;EBX,=20
            =
0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JZ&nbsp;&nbsp;&nbsp;=
Timeout<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in&nbsp;&nbsp;=
&nbsp;AL,=20
            DX<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;TEST =
AL,=20
            =
btBusy<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JNZ&nbsp;&nbsp;=
LoopWhileBusy<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JMP&nbsp=
;&nbsp;DriveReady<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
//=20
            =
=B3=AC=CA=B1=A3=AC=D6=B1=BD=D3=CD=CB=B3=F6<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;Timeout:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;&nbsp;JMP&nbsp;&nbsp;LeaveRing0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;DriveReady:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbs=
p;RET<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDP&nbsp;&nbsp;=
&nbsp;//=20
            End of WaitWhileBusy=20
            =
Procedure<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//=20
            =
=C9=E8=D6=C3=D6=F7=C5=CC=BA=CD=B4=D3=C5=CC=B1=EA=D6=BE<BR>&nbsp;&nbsp;&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SelectDevice=20
            =
proc<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbs=
p;DX,=20
            =
dwBaseAddress<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADD&nbsp=
;&nbsp;DX,=20
            =
6<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV&nbsp;&nbsp;AL,=20
            =
btMasterSlave<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out&=
nbsp;&nbsp;DX,=20
            =
AL<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RET<BR><BR>&nbsp;&n=
bsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDP&nbsp;&nbsp;//=20
            End of SelectDevice=20
            =
Procedure<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//=20
            =
=CF=F2IDE=C9=E8=B1=B8=B7=A2=CB=CD=B4=E6=C8=A1=D6=B8=C1=EE<BR>&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;SendCmd=20
            =
proc<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV DX,=20
            =
dwBaseAddress<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADD=20
            DX, 7<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV =
AL, BL=20
            //=20
            =
BL=CA=C7=D6=F7=B4=D3=C5=CC=B1=EA=CA=B6=A3=AC=D4=DA=B9=FD=B3=CC=CD=E2=C9=E8=
=D6=C3<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;out=20
            DX,=20
            =
AL<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;RET<BR>&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ENDP&nbsp;&nbsp;//=20
            End of SendCmd=20
            =
Procedure<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//=20
            =
Ring0=B4=FA=C2=EB<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Ring=
0Proc:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;PUSHAD<BR>&nbsp=
;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//=20
            =
=B2=E9=D1=AFIDE=C9=E8=B1=B8=CA=C7=B7=F1=B4=E6=D4=DA<BR>&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV=20
            DX,=20
            =
dwBaseAddress<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;ADD=20
            DX,=20
            =
7<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;in&nbsp;&nbsp;AL,DX<=
BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//=20
            =
=B5=B1AL=B5=C4=D6=B5=CA=C70xFF=BB=F2=D5=DF0x7F=CA=B1=A3=ACIDE=C9=E8=B1=B8=
=B2=BB=B4=E6=D4=DA=A3=AC=D5=E2=CA=B1=BA=F2=D6=B1=BD=D3=B7=B5=BB=D8<BR>&nb=
sp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CMP=20
            =
AL,0xFF<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JZ&nbsp;&nbsp;=
LeaveRing0<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CMP=20
            AL,=20
            =
0x7F<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JZ&nbsp;&nbsp;Lea=
veRing0<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//=20
            =
=C9=E8=D6=C3IDE=C9=E8=B1=B8=B4=E6=D4=DA=B1=EA=D6=BE<BR>&nbsp;&nbsp;&nbsp;=
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOV=20
            btIsIDEExist,=20
            1<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//=20
            =
=B2=E9=D1=AFIDE=C9=E8=B1=B8=C9=CF=B5=C4=C7=FD=B6=AF=C6=F7=CA=C7=B7=F1=B4=E6=
=D4=DA=A3=A8=D3=D0IDE=B2=E5=B2=DB=D4=DA=D6=F7=B0=E5=C9=CF=A3=AC=B5=AB=CA=C7=
=C8=B4=B2=BB=D2=BB=B6=A8=D3=D0=D3=B2=C5=CC=B2=E5=D4=DA=C9=CF=C3=E6=A3=A9<=
BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL=20
            =
WaitWhileBusy<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CALL=20
            =
SelectDevice<BR><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//=20
            =
=C8=E7=B9=FB=CA=C7=B5=DA=D2=BB=B4=CE=B5=F7=D3=C3=A3=AC=D4=F2=D6=B1=BD=D3=B7=
=B5=BB=D8=A3=AC=B7=F1=D4=F2=D6=B4=D0=D0=CF=C2=D0=D0=D3=EF=BE=E4=CA=B1=BB=E1=
=B3=F6=CF=D6=C0=B6=C6=C1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nb=
sp;CMP&nbsp;&nbsp;btIsFirst,=20
            =
1<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -