📄 csdn技术中心 实战deviceiocontrol 之四:获取硬盘的详细信息.mht
字号:
<SPAN class=3Dkey>while</SPAN> ((i < len) && (str[i] =
=3D=3D <SPAN class=3Dstr>' '</SPAN>)) i++;
=20
::memmove(str, &str[i], len - i);
=20
<SPAN class=3Drem>// =
=C8=A5=B5=F4=D3=D2=B1=DF=B5=C4=BF=D5=B8=F1</SPAN>
i =3D len - <SPAN class=3Dnum>1</SPAN>;
<SPAN class=3Dkey>while</SPAN> ((i >=3D <SPAN =
class=3Dnum>0</SPAN>) && (str[i] =3D=3D <SPAN class=3Dstr>' =
'</SPAN>))
{
str[i] =3D <SPAN class=3Dstr>'\0'</SPAN>;
i--;
}
}
=20
<SPAN class=3Drem>// =
=B6=C1=C8=A1IDE=D3=B2=C5=CC=B5=C4=C9=E8=B1=B8=D0=C5=CF=A2=A3=AC=B1=D8=D0=EB=
=D3=D0=D7=E3=B9=BB=C8=A8=CF=DE</SPAN>
<SPAN class=3Drem>// nDrive: =
=C7=FD=B6=AF=C6=F7=BA=C5(0=3D=B5=DA=D2=BB=B8=F6=D3=B2=C5=CC=A3=AC1=3D0=3D=
=B5=DA=B6=FE=B8=F6=D3=B2=C5=CC=A3=AC......)</SPAN>
<SPAN class=3Drem>// pIdInfo: =
=C9=E8=B1=B8=D0=C5=CF=A2=BD=E1=B9=B9=D6=B8=D5=EB</SPAN>
BOOL GetPhysicalDriveInfoInNT(<SPAN class=3Dkey>int</SPAN> nDrive, =
PIDINFO pIdInfo)
{
HANDLE hDevice; <SPAN class=3Drem>// =
=C9=E8=B1=B8=BE=E4=B1=FA</SPAN>
BOOL bResult; <SPAN class=3Drem>// =
=B7=B5=BB=D8=BD=E1=B9=FB</SPAN>
<SPAN class=3Dkey>char</SPAN> szFileName[<SPAN =
class=3Dnum>20</SPAN>]; <SPAN class=3Drem>// =
=CE=C4=BC=FE=C3=FB</SPAN>
=20
::sprintf(szFileName,<SPAN =
class=3Dstr>"\\\\.\\PhysicalDrive%d"</SPAN>, nDrive);
=20
hDevice =3D ::OpenDevice(szFileName);
=20
<SPAN class=3Dkey>if</SPAN> (hDevice =3D=3D INVALID_HANDLE_VALUE)
{
<SPAN class=3Dkey>return</SPAN> FALSE;
}
=20
<SPAN class=3Drem>// IDENTIFY DEVICE</SPAN>
bResult =3D ::IdentifyDevice(hDevice, pIdInfo);
=20
<SPAN class=3Dkey>if</SPAN> (bResult)
{
<SPAN class=3Drem>// =B5=F7=D5=FB=D7=D6=B7=FB=B4=AE</SPAN>
::AdjustString(pIdInfo->sSerialNumber, <SPAN =
class=3Dnum>20</SPAN>);
::AdjustString(pIdInfo->sModelNumber, <SPAN =
class=3Dnum>40</SPAN>);
::AdjustString(pIdInfo->sFirmwareRev, <SPAN =
class=3Dnum>8</SPAN>);
}
=20
::CloseHandle (hDevice);
=20
<SPAN class=3Dkey>return</SPAN> bResult;
}
=20
<SPAN class=3Drem>// =
=D3=C3SCSI=C7=FD=B6=AF=B6=C1=C8=A1IDE=D3=B2=C5=CC=B5=C4=C9=E8=B1=B8=D0=C5=
=CF=A2=A3=AC=B2=BB=CA=DC=C8=A8=CF=DE=D6=C6=D4=BC</SPAN>
<SPAN class=3Drem>// nDrive: =C7=FD=B6=AF=C6=F7=BA=C5(0=3DPrimary =
Master, 1=3DPromary Slave, 2=3DSecondary master, 3=3DSecondary =
slave)</SPAN>
<SPAN class=3Drem>// pIdInfo: =
=C9=E8=B1=B8=D0=C5=CF=A2=BD=E1=B9=B9=D6=B8=D5=EB</SPAN>
BOOL GetIdeDriveAsScsiInfoInNT(<SPAN class=3Dkey>int</SPAN> nDrive, =
PIDINFO pIdInfo)
{
HANDLE hDevice; <SPAN class=3Drem>// =
=C9=E8=B1=B8=BE=E4=B1=FA</SPAN>
BOOL bResult; <SPAN class=3Drem>// =
=B7=B5=BB=D8=BD=E1=B9=FB</SPAN>
<SPAN class=3Dkey>char</SPAN> szFileName[<SPAN =
class=3Dnum>20</SPAN>]; <SPAN class=3Drem>// =
=CE=C4=BC=FE=C3=FB</SPAN>
=20
::sprintf(szFileName,<SPAN class=3Dstr>"\\\\.\\Scsi%d:"</SPAN>, =
nDrive/<SPAN class=3Dnum>2</SPAN>);
=20
hDevice =3D ::OpenDevice(szFileName);
=20
<SPAN class=3Dkey>if</SPAN> (hDevice =3D=3D INVALID_HANDLE_VALUE)
{
<SPAN class=3Dkey>return</SPAN> FALSE;
}
=20
<SPAN class=3Drem>// IDENTIFY DEVICE</SPAN>
bResult =3D ::IdentifyDeviceAsScsi(hDevice, nDrive%<SPAN =
class=3Dnum>2</SPAN>, pIdInfo);
=20
<SPAN class=3Drem>// =
=BC=EC=B2=E9=CA=C7=B2=BB=CA=C7=BF=D5=B4=AE</SPAN>
<SPAN class=3Dkey>if</SPAN> (pIdInfo->sModelNumber[<SPAN =
class=3Dnum>0</SPAN>] =3D=3D <SPAN class=3Dstr>'\0'</SPAN>)
{
bResult =3D FALSE;
}
=20
<SPAN class=3Dkey>if</SPAN> (bResult)
{
<SPAN class=3Drem>// =B5=F7=D5=FB=D7=D6=B7=FB=B4=AE</SPAN>
::AdjustString(pIdInfo->sSerialNumber, <SPAN =
class=3Dnum>20</SPAN>);
::AdjustString(pIdInfo->sModelNumber, <SPAN =
class=3Dnum>40</SPAN>);
::AdjustString(pIdInfo->sFirmwareRev, <SPAN =
class=3Dnum>8</SPAN>);
}
=20
<SPAN class=3Dkey>return</SPAN> bResult;
}
</CODE></PRE>
<P class=3Dbhw98><STRONG class=3Dbhw98>Q</STRONG>=20
=
=CE=D2=D7=A2=D2=E2=B5=BDATA/ATAPI=C0=EF=A3=AC=D2=D4=BC=B0DiskID32=C0=EF=A3=
=AC=D3=D0=D2=BB=B8=F6=A1=B0IDENTIFY PACKET =
DEVICE=A1=B1=D6=B8=C1=EE=A3=AC=D3=EB=A1=B0IDENTIFY=20
DEVICE=A1=B1=D3=D0=CA=B2=C3=B4=C7=F8=B1=F0=A3=BF=20
<P class=3Dbhw98><STRONG class=3Dbhw98>A</STRONG> IDENTIFY=20
=
DEVICE=D7=A8=C3=C5=D3=C3=D3=DA=B9=CC=B6=A8=D3=B2=C5=CC=A3=AC=B6=F8IDENTIF=
Y PACKET=20
=
DEVICE=D3=C3=D3=DA=BF=C9=D2=C6=B6=AF=B4=E6=B4=A2=C9=E8=B1=B8=C8=E7CDROM=A1=
=A2CF=A1=A2MO=A1=A2ZIP=A1=A2TAPE=B5=C8=A1=A3=D2=F2=CE=AA=C7=FD=B6=AF=B3=CC=
=D0=F2=B5=C4=D4=AD=D2=F2=A3=AC=CA=B5=BC=CA=C9=CF=D3=C3=B1=BE=C0=FD=B5=C4=B7=
=BD=B7=A8=A3=AC=B2=BB=B9=DC=CA=C7IDENTIFY=20
DEVICE=D2=B2=BA=C3=A3=ACIDENTIFY PACKET=20
=
DEVICE=D2=B2=BA=C3=A3=AC=BB=F1=C8=A1=BF=C9=D2=C6=B6=AF=B4=E6=B4=A2=C9=E8=B1=
=B8=B5=C4=CF=EA=CF=B8=D0=C5=CF=A2=A3=AC=D2=BB=B0=E3=CA=C7=D7=F6=B2=BB=B5=BD=
=B5=C4=A1=A3=B6=F8=C7=D2=B3=FD=C1=CBIDE=D3=B2=C5=CC=A3=AC=B6=D4SCSI=A1=A2=
USB=B5=C8=BD=D3=BF=DA=B5=C4=D3=B2=C5=CC=D2=B2=B2=BB=C6=F0=D7=F7=D3=C3=A1=A3=
=B3=FD=B7=C7=B3=A7=C9=CC=CC=E1=B9=A9=B5=C4=C7=FD=B6=AF=D6=A7=B3=D6=D5=E2=D1=
=F9=B5=C4=B9=A6=C4=DC=A1=A3=20
<P class=3Dbhw98><STRONG class=3Dbhw98>Q</STRONG> =
ATA/ATAPI=D3=D0=BA=DC=B6=E0=D6=B8=C1=EE=A3=AC=C8=E7READ=20
SECTORS, WRITE SECTORS, SECURITY, SLEEP, =
STANDBY=B5=C8=A3=AC=C0=FB=D3=C3=C9=CF=CA=F6=B7=BD=B7=A8=A3=AC=CA=C7=B7=F1=
=BF=C9=BD=F8=D0=D0=CF=E0=D3=A6=B2=D9=D7=F7=A3=BF=20
<P class=3Dbhw98><STRONG class=3Dbhw98>A</STRONG> =
=D3=A6=B8=C3=C3=BB=CE=CA=CC=E2=A1=A3=B5=AB=C7=D0=BC=C7=A3=AC=D2=AA=C9=F7=D6=
=D8=C9=F7=D6=D8=D4=D9=C9=F7=D6=D8=A3=A1=20
<P class=3Dbhw98><STRONG class=3Dbhw98>Q</STRONG> =
=B9=D8=D3=DA=C8=A8=CF=DE=CE=CA=CC=E2=A3=AC=C7=EB=BD=E2=CA=CD=D2=BB=CF=C2=BA=
=C3=C2=F0=A3=BF=20
<P class=3Dbhw98><STRONG class=3Dbhw98>A</STRONG>=20
=
=D4=DANT/2000/XP=CF=C2=A3=ACadministrator=BF=C9=D2=D4=B9=DC=C0=ED=C9=E8=B1=
=B8=A3=AC=C9=CF=CA=F6=C1=BD=D6=D6=B7=C3=CE=CA=C7=FD=B6=AF=B5=C4=B7=BD=B7=A8=
=B6=BC=D0=D0=A1=A3=B5=AB=D4=DAuser=C9=ED=B7=DD=CF=C2=A3=AC=BB=F2=D5=DF=B5=
=C7=C2=BC=B5=BD=D3=F2=BA=F3=A3=AC=D3=C3=BB=A7=CE=DE=B7=A8=B7=C3=CE=CAPhys=
icalDrive=C7=FD=B6=AF=B5=C4=BA=CB=D0=C4=B2=E3=A3=AC=B5=ABSCSI=20
=
MINI-PORT=C7=FD=B6=AF=C8=B4=BF=C9=D2=D4=A1=A3=C4=BF=C7=B0=CA=C7=BF=C9=D2=D4=
=A3=AC=B2=BB=D6=AA=B5=C0Windows=D2=D4=BA=F3=B5=C4=B0=E6=B1=BE=CA=C7=B7=F1=
=D6=A7=B3=D6=A1=A3=D2=F2=CE=AA=D5=E2=BF=CF=B6=A8=CA=C7=D2=BB=B8=F6=B0=B2=C8=
=AB=D2=FE=BB=BC=A1=A3
<P=20
=
class=3Dbhw98>=C1=ED=CD=E2=A3=AC=CE=D2=C3=C7=D7=C5=D6=D8=CC=D6=C2=DBNT/20=
00/XP=D6=D0DeviceIoControl=B5=C4=D3=A6=D3=C3=A3=AC=C8=E7=B9=FB=D0=E8=D2=AA=
=D4=DA98/ME=D6=D0=B5=C3=B5=BD=B0=FC=C0=A8=D3=B2=C5=CC=D0=F2=C1=D0=BA=C5=D4=
=DA=C4=DA=B5=C4=B8=FC=BC=D3=CF=EA=CF=B8=B5=C4=D0=C5=CF=A2=A3=AC=C7=EB=B2=CE=
=BF=BCDiskID32=A1=A3=20
<H2 class=3Dbhw98>[=CF=E0=B9=D8=D7=CA=D4=B4]</H2>
<LI class=3Dbhw98>=B1=BE=CE=C4Demo=D4=B4=C2=EB=A3=BA<A=20
=
href=3D"http://www.csdn.net/develop/author/bhw98/IdeDiskInfo.zip">IdeDisk=
Info.zip</A>=20
(25KB)=20
<LI class=3Dbhw98>Lynn McGuire=B5=C4 <A=20
=
href=3D"http://www.codeguru.com/system/DiskId32.zip">DiskID32.zip</A>=20
(30KB)=20
<LI class=3Dbhw98>T13=B9=D9=B7=BD=CD=F8=D5=BE=A3=BA<A=20
href=3D"http://www.t13.org/">http://www.t13.org/</A>=20
<LI class=3Dbhw98>bhw98=B5=C4=D7=A8=C0=B8=A3=BA<A=20
=
href=3D"http://www.csdn.net/develop/author/netauthor/bhw98/">http://www.c=
sdn.net/develop/author/netauthor/bhw98/</A>=20
<HR>
<P class=3Dbhw98 =
align=3Dright>=CA=D7=B4=CE=B7=A2=B2=BC=A3=BA2003-02-24<BR>=D7=EE=BA=F3=D0=
=DE=B6=A9=A3=BA2003-05-20=20
<P class=3Dbhw98> </P></SPAN><BR>
<DIV=20
style=3D"FONT-SIZE: 14px; LINE-HEIGHT: =
25px"><STRONG>=D7=F7=D5=DFBlog=A3=BA</STRONG><A=20
id=3DArticleContent1_ArticleContent1_AuthorBlogLink=20
href=3D"http://blog.csdn.net/bhw98/"=20
target=3D_blank>http://blog.csdn.net/bhw98/</A></DIV>
<DIV=20
style=3D"FONT-SIZE: 14px; COLOR: #900; LINE-HEIGHT: =
25px"><STRONG>=CF=E0=B9=D8=CE=C4=D5=C2</STRONG></DIV>
<TABLE id=3DArticleContent1_ArticleContent1_RelatedArticles=20
style=3D"BORDER-COLLAPSE: collapse" cellSpacing=3D0 =
border=3D0>
<TBODY>
<TR>
<TD><A=20
=
href=3D"http://dev.csdn.net/article/17/article/27/27281.shtm">=B8=F8=D3=A6=
=D3=C3=B3=CC=D0=F2=BC=D3=D7=B0=A1=B0=BF=B4=C3=C5=B9=B7=A1=B1</A>=20
</TD></TR>
<TR>
<TD><A=20
=
href=3D"http://dev.csdn.net/article/17/article/25/25700.shtm">=A1=B0=CD=A8=
=B9=FD=B4=AE=BF=DA=CA=D5=B7=A2=B6=CC=CF=FB=CF=A2=A1=B1=B5=C4Q&A=BB=E3=
=B1=E0</A>=20
</TD></TR>
<TR>
<TD><A=20
=
href=3D"http://dev.csdn.net/article/17/article/25/25263.shtm">=D3=C3JScri=
pt=CA=B5=CF=D6=B9=AB=C0=FA=B5=BD=C5=A9=C0=FA=B5=C4=C8=D5=C6=DA=D7=AA=BB=BB=
</A>=20
</TD></TR>
<TR>
<TD><A=20
=
href=3D"http://dev.csdn.net/article/17/article/24/24861.shtm">=CD=A8=B9=FD=
=B4=AE=BF=DA=CA=B5=CA=B1=BD=D3=CA=D5=B6=CC=CF=FB=CF=A2</A>=20
</TD></TR>
<TR>
<TD><A=20
=
href=3D"http://dev.csdn.net/article/17/article/23/23452.shtm">MSN=20
Messenger=D0=AD=D2=E9=B8=C5=BF=F6</A>=20
</TD></TR></TBODY></TABLE></LI></TD></TR></TBODY></TABLE><A=20
name=3D#Comment></A>
<TABLE cellPadding=3D0 width=3D"100%" border=3D0>
<TBODY>
<TR>
<TD>
<TABLE cellSpacing=3D0 cellPadding=3D0 width=3D"100%" =
align=3Dcenter=20
bgColor=3D#006699 border=3D0>
<TBODY>
<TR bgColor=3D#006699>
<TD id=3Dwhite align=3Dmiddle width=3D556 =
bgColor=3D#006699><FONT=20
=
color=3D#ffffff>=B6=D4=B8=C3=CE=C4=B5=C4=C6=C0=C2=DB</FONT> =
</TD></TR></TBODY></TABLE>
<TABLE cellSpacing=3D1 cellPadding=3D2 width=3D"100%" =
align=3Dcenter=20
bgColor=3D#666666 border=3D0>
<TBODY>
<TR>
<TD bgColor=3D#cccccc colSpan=3D3><SPAN=20
style=3D"COLOR: #990000"><IMG height=3D16 hspace=3D1=20
src=3D"http://dev.csdn.net/images/ico_pencil.gif" =
width=3D16>=20
</SPAN><SPAN=20
=
id=3DCommnetList1_CommnetList1_rpCommentList__ctl0_lblUserName>CSDN=20
=CD=F8=D3=D1</SPAN> <I>( <SPAN=20
=
id=3DCommnetList1_CommnetList1_rpCommentList__ctl0_lblPostTime>2004-08-27=
</SPAN>)</I>=20
</TD></TR>
<TR>
<TD width=3D532 bgColor=3D#ffffff colSpan=3D3><SPAN=20
=
id=3DCommnetList1_CommnetList1_rpCommentList__ctl0_lblContent>=BB=F1=C8=A1=
=B4=C5=C5=CCID=CA=B1,=D6=B4=D0=D0::AdjustString(pIdInfo->sSerialNumber=
, 20);<BR>=BA=AF=CA=FD=D3=D0=B4=ED=CE=F3,=D7=D6=B4=AE=D7=F3=D2=C6=BA=
=F3=C3=BB=D3=D0=BD=E1=CE=B2,=CA=B9=B5=C3=D3=D2=B2=E0=BC=B8=B8=F6=D7=D6=B7=
=FB=D6=D8=B8=B4.=CC=ED=BC=D3<BR>len[len-i] =3D '\0'</SPAN>=20
</TD></TR></TBODY></TABLE>
<TABLE cellSpacing=3D1 cellPadding=3D2 width=3D"100%" =
align=3Dcenter=20
bgColor=3D#666666 border=3D0>
<TBODY>
<TR>
<TD bgColor=3D#cccccc col
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -