📄 csdn技术中心 实战deviceiocontrol 之五:列举已安装的存储设备.mht
字号:
}
SPAN.str {
COLOR: #8b008b
}
SPAN.rem {
COLOR: #008000
}
</STYLE>
<P class=3Dbhw98><STRONG class=3Dbhw98>Q</STRONG>=20
=
=C7=B0=BC=B8=B4=CE=CE=D2=C3=C7=CC=D6=C2=DB=B5=C4=B6=BC=CA=C7=C9=E8=B1=B8=C3=
=FB=B1=C8=BD=CF=C7=E5=B3=FE=B5=C4=C7=E9=BF=F6=A3=AC=D3=D0=C1=CB=C9=E8=B1=B8=
=C3=FB(=C2=B7=BE=B6)=A3=AC=BE=CD=BF=C9=D2=D4=D6=B1=BD=D3=B5=F7=D3=C3Creat=
eFile=B4=F2=BF=AA=C9=E8=B1=B8=A3=AC=BD=F8=D0=D0=CB=FC=CB=F9=D6=A7=B3=D6=B5=
=C4I/O=B2=D9=D7=F7=C1=CB=A1=A3=C8=E7=B9=FB=CA=C2=CF=C8=B2=A2=B2=BB=C4=DC=C8=
=B7=C7=D0=D6=AA=B5=C0=C9=E8=B1=B8=C3=FB=A3=AC=C8=E7=BA=CE=C8=A5=B7=C3=CE=CA=
=C9=E8=B1=B8=C4=D8=A3=BF=20
<P class=3Dbhw98><STRONG class=3Dbhw98>A</STRONG>=20
=
=B7=C3=CE=CA=C9=E8=B1=B8=B1=D8=D0=EB=D3=C3=C9=E8=B1=B8=BE=E4=B1=FA=A3=AC=B6=
=F8=B5=C3=B5=BD=C9=E8=B1=B8=BE=E4=B1=FA=B1=D8=D0=EB=D6=AA=B5=C0=C9=E8=B1=B8=
=C2=B7=BE=B6=A3=AC=D5=E2=B8=F6=CC=D7=C2=B7=D2=D4=C4=E3=CE=D2=D6=AE=C1=A6=CA=
=C7=B8=C4=B1=E4=B2=BB=C1=CB=B5=C4=A1=A3=C3=BF=B8=F6=C9=E8=B1=B8=B6=BC=D3=D0=
=CB=FC=CB=F9=CA=F4=C0=E0=D0=CD=B5=C4GUID=A3=AC=CE=D2=C3=C7=CB=B3=D7=C5=D5=
=E2=B8=F6GUID=BE=CD=C4=DC=BB=F1=B5=C3=C9=E8=B1=B8=C2=B7=BE=B6=A1=A3=20
<P =
class=3Dbhw98>GUID=CA=C7=CD=AC=C0=E0=BB=F2=CD=AC=D6=D6=C9=E8=B1=B8=B5=C4=C8=
=AB=C7=F2=CE=A8=D2=BB=CA=B6=B1=F0=C2=EB=A3=AC=CB=FC=CA=C7=D2=BB=B8=F6128 =
bit(16=D7=D6=BD=DA)=B5=C4=D5=FB=D0=CE=CA=FD=A3=AC=D5=E6=CA=B5=C3=E6=C4=BF=
=CE=AA <PRE class=3Dbhw98><CODE class=3Dbhw98><SPAN =
class=3Dkey>typedef</SPAN> <SPAN class=3Dkey>struct</SPAN> _GUID
{
<SPAN class=3Dkey>unsigned</SPAN> <SPAN class=3Dkey>long</SPAN> =
Data1;
<SPAN class=3Dkey>unsigned</SPAN> <SPAN class=3Dkey>short</SPAN> =
Data2;
<SPAN class=3Dkey>unsigned</SPAN> <SPAN class=3Dkey>short</SPAN> =
Data3;
<SPAN class=3Dkey>unsigned</SPAN> <SPAN class=3Dkey>char</SPAN> =
Data4[<SPAN class=3Dnum>8</SPAN>];
} GUID, *PGUID;
</CODE></PRE>
<P=20
=
class=3Dbhw98>=C0=FD=C8=E7=A3=ACDisk=C0=E0=B5=C4GUID=CE=AA=A1=B053f56307-=
b6bf-11d0-94f2-00a0c91efb8b=A1=B1=A3=AC=D4=DA=CE=D2=C3=C7=B5=C4=B3=CC=D0=F2=
=C0=EF=BF=C9=D2=D4=B6=A8=D2=E5=CE=AA=20
<PRE class=3Dbhw98><CODE class=3Dbhw98><SPAN class=3Dkey>const</SPAN> =
GUID DiskClassGuid =3D {0x53f56307L, <SPAN class=3Dnum>0xb6bf</SPAN>, =
<SPAN class=3Dnum>0x11d0</SPAN>, {<SPAN class=3Dnum>0x94</SPAN>, <SPAN =
class=3Dnum>0xf2</SPAN>, <SPAN class=3Dnum>0x00</SPAN>, <SPAN =
class=3Dnum>0xa0</SPAN>, <SPAN class=3Dnum>0xc9</SPAN>, <SPAN =
class=3Dnum>0x1e</SPAN>, <SPAN class=3Dnum>0xfb</SPAN>, <SPAN =
class=3Dnum>0x8b</SPAN>)};
</CODE></PRE>
<P =
class=3Dbhw98>=BB=F2=D5=DF=D3=C3=D2=BB=B8=F6=BA=EA=C0=B4=B6=A8=D2=E5 =
<PRE class=3Dbhw98><CODE class=3Dbhw98>DEFINE_GUID(DiskClassGuid, =
0x53f56307L, <SPAN class=3Dnum>0xb6bf</SPAN>, <SPAN =
class=3Dnum>0x11d0</SPAN>, <SPAN class=3Dnum>0x94</SPAN>, <SPAN =
class=3Dnum>0xf2</SPAN>, <SPAN class=3Dnum>0x00</SPAN>, <SPAN =
class=3Dnum>0xa0</SPAN>, <SPAN class=3Dnum>0xc9</SPAN>, <SPAN =
class=3Dnum>0x1e</SPAN>, <SPAN class=3Dnum>0xfb</SPAN>, <SPAN =
class=3Dnum>0x8b</SPAN>);
</CODE></PRE>
<P =
class=3Dbhw98>=CD=A8=B9=FDGUID=D5=D2=B3=F6=C9=E8=B1=B8=C2=B7=BE=B6=A3=AC=D0=
=E8=D2=AA=D3=C3=B5=BD=D2=BB=D7=E9=C9=E8=B1=B8=B9=DC=C0=ED=B5=C4API=BA=AF=CA=
=FD
<P class=3Dbhw98>SetupDiGetClassDevs, =
SetupDiEnumDeviceInterfaces,=20
SetupDiGetInterfaceDeviceDetail, =
SetupDiDestroyDeviceInfoList,=20
<P =
class=3Dbhw98>=D2=D4=BC=B0=BD=E1=B9=B9SP_DEVICE_INTERFACE_DATA,=20
SP_DEVICE_INTERFACE_DETAIL_DATA=A1=A3=20
<P =
class=3Dbhw98>=D3=D0=B9=D8=D0=C5=CF=A2=C7=EB=B2=E9=D4=C4MSDN=A3=AC=D5=E2=C0=
=EF=BE=CD=B2=BB=CF=EA=CF=B8=BD=E9=C9=DC=C1=CB=A1=A3=20
<P =
class=3Dbhw98>=CA=B5=CF=D6GUID=B5=BD=C9=E8=B1=B8=C2=B7=BE=B6=B5=C4=B4=FA=C2=
=EB=C8=E7=CF=C2=A3=BA <PRE class=3Dbhw98><CODE class=3Dbhw98><SPAN =
class=3Drem>// =
SetupDiGetInterfaceDeviceDetail=CB=F9=D0=E8=D2=AA=B5=C4=CA=E4=B3=F6=B3=A4=
=B6=C8=A3=AC=B6=A8=D2=E5=D7=E3=B9=BB=B4=F3</SPAN>
<SPAN class=3Dkey>#define</SPAN> INTERFACE_DETAIL_SIZE (<SPAN =
class=3Dnum>1024</SPAN>)
=20
<SPAN class=3Drem>// =
=B8=F9=BE=DDGUID=BB=F1=B5=C3=C9=E8=B1=B8=C2=B7=BE=B6</SPAN>
<SPAN class=3Drem>// lpGuid: GUID=D6=B8=D5=EB</SPAN>
<SPAN class=3Drem>// pszDevicePath: =
=C9=E8=B1=B8=C2=B7=BE=B6=D6=B8=D5=EB=B5=C4=D6=B8=D5=EB</SPAN>
<SPAN class=3Drem>// =B7=B5=BB=D8: =
=B3=C9=B9=A6=B5=C3=B5=BD=B5=C4=C9=E8=B1=B8=C2=B7=BE=B6=B8=F6=CA=FD=A3=AC=BF=
=C9=C4=DC=B2=BB=D6=B91=B8=F6</SPAN>
<SPAN class=3Dkey>int</SPAN> GetDevicePath(LPGUID lpGuid, LPTSTR* =
pszDevicePath)
{
HDEVINFO hDevInfoSet;
SP_DEVICE_INTERFACE_DATA ifdata;
PSP_DEVICE_INTERFACE_DETAIL_DATA pDetail;
<SPAN class=3Dkey>int</SPAN> nCount;
BOOL bResult;
=20
<SPAN class=3Drem>// =
=C8=A1=B5=C3=D2=BB=B8=F6=B8=C3GUID=CF=E0=B9=D8=B5=C4=C9=E8=B1=B8=D0=C5=CF=
=A2=BC=AF=BE=E4=B1=FA</SPAN>
hDevInfoSet =3D ::SetupDiGetClassDevs(lpGuid, <SPAN =
class=3Drem>// class GUID </SPAN>
NULL, <SPAN class=3Drem>// =
=CE=DE=B9=D8=BC=FC=D7=D6 </SPAN>
NULL, <SPAN class=3Drem>// =
=B2=BB=D6=B8=B6=A8=B8=B8=B4=B0=BF=DA=BE=E4=B1=FA </SPAN>
DIGCF_PRESENT | DIGCF_DEVICEINTERFACE); <SPAN class=3Drem>// =
=C4=BF=C7=B0=B4=E6=D4=DA=B5=C4=C9=E8=B1=B8</SPAN>
=20
<SPAN class=3Drem>// =CA=A7=B0=DC...</SPAN>
<SPAN class=3Dkey>if</SPAN> (hDevInfoSet =3D=3D =
INVALID_HANDLE_VALUE)
{
<SPAN class=3Dkey>return</SPAN> <SPAN class=3Dnum>0</SPAN>;
}
=20
<SPAN class=3Drem>// =
=C9=EA=C7=EB=C9=E8=B1=B8=BD=D3=BF=DA=CA=FD=BE=DD=BF=D5=BC=E4</SPAN>
pDetail =3D =
(PSP_DEVICE_INTERFACE_DETAIL_DATA)::GlobalAlloc(LMEM_ZEROINIT, =
INTERFACE_DETAIL_SIZE);
=20
pDetail->cbSize =3D <SPAN =
class=3Dkey>sizeof</SPAN>(SP_DEVICE_INTERFACE_DETAIL_DATA);
=20
nCount =3D <SPAN class=3Dnum>0</SPAN>;
bResult =3D TRUE;
=20
<SPAN class=3Drem>// =C9=E8=B1=B8=D0=F2=BA=C5=3D0,1,2... =
=D6=F0=D2=BB=B2=E2=CA=D4=C9=E8=B1=B8=BD=D3=BF=DA=A3=AC=B5=BD=CA=A7=B0=DC=CE=
=AA=D6=B9</SPAN>
<SPAN class=3Dkey>while</SPAN> (bResult)
{
ifdata.cbSize =3D <SPAN class=3Dkey>sizeof</SPAN>(ifdata);
=20
<SPAN class=3Drem>// =
=C3=B6=BE=D9=B7=FB=BA=CF=B8=C3GUID=B5=C4=C9=E8=B1=B8=BD=D3=BF=DA</SPAN>
bResult =3D ::SetupDiEnumDeviceInterfaces(
hDevInfoSet, <SPAN class=3Drem>// =
=C9=E8=B1=B8=D0=C5=CF=A2=BC=AF=BE=E4=B1=FA</SPAN>
NULL, <SPAN class=3Drem>// =
=B2=BB=D0=E8=B6=EE=CD=E2=B5=C4=C9=E8=B1=B8=C3=E8=CA=F6</SPAN>
lpGuid, <SPAN class=3Drem>// GUID</SPAN>
(ULONG)nCount, <SPAN class=3Drem>// =
=C9=E8=B1=B8=D0=C5=CF=A2=BC=AF=C0=EF=B5=C4=C9=E8=B1=B8=D0=F2=BA=C5</SPAN>=
&ifdata); <SPAN class=3Drem>// =
=C9=E8=B1=B8=BD=D3=BF=DA=D0=C5=CF=A2</SPAN>
=20
<SPAN class=3Dkey>if</SPAN> (bResult)
{
<SPAN class=3Drem>// =
=C8=A1=B5=C3=B8=C3=C9=E8=B1=B8=BD=D3=BF=DA=B5=C4=CF=B8=BD=DA(=C9=E8=B1=B8=
=C2=B7=BE=B6)</SPAN>
bResult =3D SetupDiGetInterfaceDeviceDetail(
hDevInfoSet, <SPAN class=3Drem>// =
=C9=E8=B1=B8=D0=C5=CF=A2=BC=AF=BE=E4=B1=FA</SPAN>
&ifdata, <SPAN class=3Drem>// =
=C9=E8=B1=B8=BD=D3=BF=DA=D0=C5=CF=A2</SPAN>
pDetail, <SPAN class=3Drem>// =
=C9=E8=B1=B8=BD=D3=BF=DA=CF=B8=BD=DA(=C9=E8=B1=B8=C2=B7=BE=B6)</SPAN>
INTERFACE_DETAIL_SIZE, <SPAN class=3Drem>// =
=CA=E4=B3=F6=BB=BA=B3=E5=C7=F8=B4=F3=D0=A1</SPAN>
NULL, <SPAN class=3Drem>// =
=B2=BB=D0=E8=BC=C6=CB=E3=CA=E4=B3=F6=BB=BA=B3=E5=C7=F8=B4=F3=D0=A1(=D6=B1=
=BD=D3=D3=C3=C9=E8=B6=A8=D6=B5)</SPAN>
NULL); <SPAN class=3Drem>// =
=B2=BB=D0=E8=B6=EE=CD=E2=B5=C4=C9=E8=B1=B8=C3=E8=CA=F6</SPAN>
=20
<SPAN class=3Dkey>if</SPAN> (bResult)
{
<SPAN class=3Drem>// =
=B8=B4=D6=C6=C9=E8=B1=B8=C2=B7=BE=B6=B5=BD=CA=E4=B3=F6=BB=BA=B3=E5=C7=F8<=
/SPAN>
::strcpy(pszDevicePath[nCount], pDetail->DevicePath);
=20
<SPAN class=3Drem>// =
=B5=F7=D5=FB=BC=C6=CA=FD=D6=B5</SPAN>
nCount++;
}
}
}
=20
<SPAN class=3Drem>// =
=CA=CD=B7=C5=C9=E8=B1=B8=BD=D3=BF=DA=CA=FD=BE=DD=BF=D5=BC=E4</SPAN>
::GlobalFree(pDetail);
=20
<SPAN class=3Drem>// =
=B9=D8=B1=D5=C9=E8=B1=B8=D0=C5=CF=A2=BC=AF=BE=E4=B1=FA</SPAN>
::SetupDiDestroyDeviceInfoList(hDevInfoSet);
=20
<SPAN class=3Dkey>return</SPAN> nCount;
}
</CODE></PRE>
<P=20
=
class=3Dbhw98>=B5=F7=D3=C3GetDevicePath=BA=AF=CA=FD=CA=B1=D2=AA=D7=A2=D2=E2=
=A3=ACpszDevicePath=CA=C7=B8=F6=D6=B8=CF=F2=D7=D6=B7=FB=B4=AE=D6=B8=D5=EB=
=B5=C4=D6=B8=D5=EB=A3=AC=C0=FD=C8=E7=BF=C9=D2=D4=D5=E2=D1=F9 <PRE =
class=3Dbhw98><CODE class=3Dbhw98> <SPAN class=3Dkey>int</SPAN> i;
<SPAN class=3Dkey>char</SPAN>* szDevicePath[MAX_DEVICE]; =
<SPAN class=3Drem>// =C9=E8=B1=B8=C2=B7=BE=B6</SPAN>
=20
<SPAN class=3Drem>// =
=B7=D6=C5=E4=D0=E8=D2=AA=B5=C4=BF=D5=BC=E4</SPAN>
<SPAN class=3Dkey>for</SPAN> (i =3D <SPAN class=3Dnum>0</SPAN>; i =
< MAX_DEVICE; i++)
{
szDevicePath[i] =3D <SPAN class=3Dkey>new</SPAN> <SPAN =
class=3Dkey>char</SPAN>[<SPAN class=3Dnum>256</SPAN>];
}
=20
<SPAN class=3Drem>// =C8=A1=C9=E8=B1=B8=C2=B7=BE=B6</SPAN>
nDevice =3D ::GetDevicePath((LPGUID)&DiskClassGuid, =
szDevicePath);
=20
<SPAN class=3Drem>// =
=D6=F0=D2=BB=BB=F1=C8=A1=C9=E8=B1=B8=D0=C5=CF=A2</SPAN>
<SPAN class=3Dkey>for</SPAN> (i =3D <SPAN class=3Dnum>0</SPAN>; i =
< nDevice; i++)
{
<SPAN class=3Drem>// =B4=F2=BF=AA=C9=E8=B1=B8</SPAN>
hDevice =3D ::OpenDevice(szDevicePath[i]);
=20
<SPAN class=3Dkey>if</SPAN> (hDevice !=3D INVALID_HANDLE_VALUE)
{
... ... <SPAN class=3Drem>// I/O=B2=D9=D7=F7</SPAN>
=20
::CloseHandle(hDevice);
}
}
=20
<SPAN class=3Drem>// =CA=CD=B7=C5=BF=D5=BC=E4</SPAN>
<SPAN class=3Dkey>for</SPAN> (i =3D <SPAN class=3Dnum>0</SPAN>; i =
& lt; MAX_DEVICE; i++)
{
<SPAN class=3Dkey>delete</SPAN> []szDevicePath[i];
}
</CODE></PRE>
<P=20
=
class=3Dbhw98>=B1=BE=C0=FD=B5=C4Project=D6=D0=B3=FD=C1=CB=D2=AA=B0=FC=BA=AC=
winioctl.h=CD=E2=A3=AC=BB=B9=D2=AA=B0=FC=BA=ACinitguid.h=A3=ACsetupapi.h=A3=
=AC=D2=D4=BC=B0=C1=AC=BD=D3setupapi.lib=A1=A3=20
<P class=3Dbhw98><STRONG class=3Dbhw98>Q</STRONG>=20
=
=B5=C3=B5=BD=C9=E8=B1=B8=C2=B7=BE=B6=BA=F3=A3=AC=BE=CD=BF=C9=D2=D4=B5=BD=CF=
=C2=D2=BB=B2=BD=A3=AC=D3=C3CreateFile=B4=F2=BF=AA=C9=E8=B1=B8=A3=AC=C8=BB=
=BA=F3=D3=C3DeviceIoControl=BD=F8=D0=D0=B6=C1=D0=B4=C1=CB=B0=C9=A3=BF=20
<P class=3Dbhw98><STRONG class=3Dbhw98>A</STRONG>=20
=
=CA=C7=B5=C4=A1=A3=BE=A1=B9=DC=B8=C3=C9=E8=B1=B8=C2=B7=BE=B6=D3=EB=D2=D4=C7=
=B0=CE=D2=C3=C7=BD=D3=B4=A5=B5=C4=C4=C7=D0=A9=B2=BB=CC=AB=D2=BB=D1=F9=A1=A3=
=B1=BE=CA=C7=A1=B0\\.\PhysicalDrive0=A1=B1=A3=AC=CF=D6=D4=DA=C4=F1=C7=B9=BB=
=BB=C5=DA=A3=AC=B1=E4=B3=C9=C1=CB=C0=E0=CB=C6=D5=E2=D1=F9=B5=C4=D2=BB=B8=B1=
=D7=F0=C8=DD=A3=BA
<P=20
=
class=3Dbhw98>=A1=B0\\?\ide#diskmaxtor_2f040j0__________________________v=
am51jj0#3146563447534558202020202020202020202020#{53f56307-b6bf-11d0-94f2=
-00a0c91efb8b}=A1=B1=A1=A3
<P =
class=3Dbhw98>=C6=E4=CA=B5=D5=E2=B8=F6=C9=E8=B1=B8=C3=FB=D4=DA=D7=A2=B2=E1=
=B1=ED=B5=C4=C4=B3=B4=A6=BF=C9=D2=D4=D5=D2=B5=BD=A3=AC=C0=FD=C8=E7=D4=DAW=
in2000=D6=D0=D5=E2=B8=F6=C3=FB=D7=D6=BF=C9=D2=D4=CE=BB=D3=DA=20
<P=20
=
class=3Dbhw98>HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Disk\E=
num\0=A3=AC=20
<P=20
=
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -