📄 csdn技术中心 实战deviceiocontrol 之一:通过api访问设备驱动程序.mht
字号:
}
LI.bhw98 {
FONT-SIZE: 9pt; MARGIN: 3px 0px 0px 3px; LINE-HEIGHT: normal; =
FONT-FAMILY: Verdana, Arial
}
H1.bhw98 {
MARGIN-TOP: 25px; FONT-WEIGHT: bolder; FONT-SIZE: 12pt; MARGIN-BOTTOM: =
5px; LINE-HEIGHT: normal; FONT-FAMILY: Verdana, Arial
}
H2.bhw98 {
MARGIN-TOP: 20px; FONT-WEIGHT: bolder; FONT-SIZE: 10.5pt; =
MARGIN-BOTTOM: 5px; LINE-HEIGHT: normal; FONT-FAMILY: Verdana, Arial
}
H3.bhw98 {
MARGIN-TOP: 15px; FONT-WEIGHT: bolder; FONT-SIZE: 9pt; MARGIN-BOTTOM: =
5px; LINE-HEIGHT: normal; FONT-FAMILY: Verdana, Arial
}
SPAN.key {
COLOR: #0000ff
}
SPAN.num {
COLOR: #800000
}
SPAN.str {
COLOR: #8b008b
}
SPAN.rem {
COLOR: #008000
}
</STYLE>
<P class=3Dbhw98><STRONG class=3Dbhw98>Q</STRONG>=20
=
=D4=DANT/2000/XP=D6=D0=A3=AC=CE=D2=CF=EB=D3=C3VC=B1=E0=D0=B4=D3=A6=D3=C3=B3=
=CC=D0=F2=B7=C3=CE=CA=D3=B2=BC=FE=C9=E8=B1=B8=A3=AC=C8=E7=BB=F1=C8=A1=B4=C5=
=C5=CC=B2=CE=CA=FD=A1=A2=B6=C1=D0=B4=BE=F8=B6=D4=C9=C8=C7=F8=CA=FD=BE=DD=A1=
=A2=B2=E2=CA=D4=B9=E2=C7=FD=CA=B5=BC=CA=CB=D9=B6=C8=B5=C8=A3=AC=B8=C3=B4=D3=
=C4=C4=C0=EF=C8=EB=CA=D6=C4=D8=A3=BF=20
<P class=3Dbhw98><STRONG class=3Dbhw98>A</STRONG>=20
=
=D4=DANT/2000/XP=D6=D0=A3=AC=D3=A6=D3=C3=B3=CC=D0=F2=BF=C9=D2=D4=CD=A8=B9=
=FDAPI=BA=AF=CA=FDDeviceIoControl=C0=B4=CA=B5=CF=D6=B6=D4=C9=E8=B1=B8=B5=C4=
=B7=C3=CE=CA=A1=AA=BB=F1=C8=A1=D0=C5=CF=A2=A3=AC=B7=A2=CB=CD=C3=FC=C1=EE=A3=
=AC=BD=BB=BB=BB=CA=FD=BE=DD=B5=C8=A1=A3=C0=FB=D3=C3=B8=C3=BD=D3=BF=DA=BA=AF=
=CA=FD=CF=F2=D6=B8=B6=A8=B5=C4=C9=E8=B1=B8=C7=FD=B6=AF=B7=A2=CB=CD=D5=FD=C8=
=B7=B5=C4=BF=D8=D6=C6=C2=EB=BC=B0=CA=FD=BE=DD=A3=AC=C8=BB=BA=F3=B7=D6=CE=F6=
=CB=FC=B5=C4=CF=EC=D3=A6=A3=AC=BE=CD=BF=C9=D2=D4=B4=EF=B5=BD=CE=D2=C3=C7=B5=
=C4=C4=BF=B5=C4=A1=A3=20
<P =
class=3Dbhw98>DeviceIoControl=B5=C4=BA=AF=CA=FD=D4=AD=D0=CD=CE=AA <PRE =
class=3Dbhw98><CODE class=3Dbhw98>BOOL DeviceIoControl(
HANDLE hDevice, <SPAN class=3Drem>// =
=C9=E8=B1=B8=BE=E4=B1=FA</SPAN>
DWORD dwIoControlCode, <SPAN class=3Drem>// =
=BF=D8=D6=C6=C2=EB</SPAN>
LPVOID lpInBuffer, <SPAN class=3Drem>// =
=CA=E4=C8=EB=CA=FD=BE=DD=BB=BA=B3=E5=C7=F8=D6=B8=D5=EB</SPAN>
DWORD nInBufferSize, <SPAN class=3Drem>// =
=CA=E4=C8=EB=CA=FD=BE=DD=BB=BA=B3=E5=C7=F8=B3=A4=B6=C8</SPAN>
LPVOID lpOutBuffer, <SPAN class=3Drem>// =
=CA=E4=B3=F6=CA=FD=BE=DD=BB=BA=B3=E5=C7=F8=D6=B8=D5=EB</SPAN>
DWORD nOutBufferSize, <SPAN class=3Drem>// =
=CA=E4=B3=F6=CA=FD=BE=DD=BB=BA=B3=E5=C7=F8=B3=A4=B6=C8</SPAN>
LPDWORD lpBytesReturned, <SPAN class=3Drem>// =
=CA=E4=B3=F6=CA=FD=BE=DD=CA=B5=BC=CA=B3=A4=B6=C8=B5=A5=D4=AA=B3=A4=B6=C8<=
/SPAN>
LPOVERLAPPED lpOverlapped <SPAN class=3Drem>// =
=D6=D8=B5=FE=B2=D9=D7=F7=BD=E1=B9=B9=D6=B8=D5=EB</SPAN>
);
</CODE></PRE>
<P =
class=3Dbhw98>=C9=E8=B1=B8=BE=E4=B1=FA=D3=C3=C0=B4=B1=EA=CA=B6=C4=E3=CB=F9=
=B7=C3=CE=CA=B5=C4=C9=E8=B1=B8=A1=A3=20
<P=20
=
class=3Dbhw98>=B7=A2=CB=CD=B2=BB=CD=AC=B5=C4=BF=D8=D6=C6=C2=EB=A3=AC=BF=C9=
=D2=D4=B5=F7=D3=C3=C9=E8=B1=B8=C7=FD=B6=AF=B3=CC=D0=F2=B5=C4=B2=BB=CD=AC=C0=
=E0=D0=CD=B5=C4=B9=A6=C4=DC=A1=A3=D4=DA=CD=B7=CE=C4=BC=FEwinioctl.h=D6=D0=
=A3=AC=D4=A4=B6=A8=D2=E5=B5=C4=B1=EA=D7=BC=C9=E8=B1=B8=BF=D8=D6=C6=C2=EB=A3=
=AC=B6=BC=D2=D4IOCTL=BB=F2FSCTL=BF=AA=CD=B7=A1=A3=C0=FD=C8=E7=A3=ACIOCTL_=
DISK_GET_DRIVE_GEOMETRY=CA=C7=B6=D4=CE=EF=C0=ED=C7=FD=B6=AF=C6=F7=C8=A1=BD=
=E1=B9=B9=B2=CE=CA=FD=A3=A8=BD=E9=D6=CA=C0=E0=D0=CD=A1=A2=D6=F9=C3=E6=CA=FD=
=A1=A2=C3=BF=D6=F9=C3=E6=B4=C5=B5=C0=CA=FD=A1=A2=C3=BF=B4=C5=B5=C0=C9=C8=C7=
=F8=CA=FD=B5=C8=A3=A9=B5=C4=BF=D8=D6=C6=C2=EB=A3=ACFSCTL_LOCK_VOLUME=CA=C7=
=B6=D4=C2=DF=BC=AD=C7=FD=B6=AF=C6=F7=B5=C4=BE=ED=BC=D3=CB=F8=B5=C4=BF=D8=D6=
=C6=C2=EB=A1=A3=20
<P=20
=
class=3Dbhw98>=CA=E4=C8=EB=CA=E4=B3=F6=CA=FD=BE=DD=BB=BA=B3=E5=C7=F8=CA=C7=
=B7=F1=D0=E8=D2=AA=A3=AC=CA=C7=BA=CE=D6=D6=BD=E1=B9=B9=A3=AC=D2=D4=BC=B0=D5=
=BC=B6=E0=C9=D9=D7=D6=BD=DA=BF=D5=BC=E4=A3=AC=CD=EA=C8=AB=D3=C9=B2=BB=CD=AC=
=C9=E8=B1=B8=B5=C4=B2=BB=CD=AC=B2=D9=D7=F7=C0=E0=D0=CD=BE=F6=B6=A8=A1=A3=D4=
=DA=CD=B7=CE=C4=BC=FEwinioctl.h=D6=D0=A3=AC=D2=D1=BE=AD=CE=AA=B1=EA=D7=BC=
=C9=E8=B1=B8=D4=A4=B6=A8=D2=E5=C1=CB=D2=BB=D0=A9=CA=E4=C8=EB=CA=E4=B3=F6=CA=
=FD=BE=DD=BD=E1=B9=B9=A1=A3=D6=D8=B5=FE=B2=D9=D7=F7=BD=E1=B9=B9=D6=B8=D5=EB=
=C9=E8=D6=C3=CE=AANULL=A3=ACDeviceIoControl=BD=AB=BD=F8=D0=D0=D7=E8=C8=FB=
=B5=F7=D3=C3=A3=BB=B7=F1=D4=F2=A3=AC=D3=A6=D4=DA=B1=E0=B3=CC=CA=B1=B0=B4=D2=
=EC=B2=BD=B2=D9=D7=F7=C9=E8=BC=C6=A1=A3=20
<P class=3Dbhw98><STRONG class=3Dbhw98>Q</STRONG> =
=C9=E8=B1=B8=BE=E4=B1=FA=CA=C7=B4=D3=C4=C4=C0=EF=BB=F1=B5=C3=B5=C4=A3=BF =
<P class=3Dbhw98><STRONG class=3Dbhw98>A</STRONG>=20
=
=C9=E8=B1=B8=BE=E4=B1=FA=BF=C9=D2=D4=D3=C3API=BA=AF=CA=FDCreateFile=BB=F1=
=B5=C3=A1=A3=CB=FC=B5=C4=D4=AD=D0=CD=CE=AA <PRE class=3Dbhw98><CODE =
class=3Dbhw98>HANDLE CreateFile(
LPCTSTR lpFileName, <SPAN class=3Drem>// =
=CE=C4=BC=FE=C3=FB/=C9=E8=B1=B8=C2=B7=BE=B6</SPAN>
DWORD dwDesiredAccess, <SPAN class=3Drem>// =
=B7=C3=CE=CA=B7=BD=CA=BD</SPAN>
DWORD dwShareMode, <SPAN class=3Drem>// =
=B9=B2=CF=ED=B7=BD=CA=BD</SPAN>
LPSECURITY_ATTRIBUTES lpSecurityAttributes, <SPAN class=3Drem>// =
=B0=B2=C8=AB=C3=E8=CA=F6=B7=FB=D6=B8=D5=EB</SPAN>
DWORD dwCreationDisposition, <SPAN class=3Drem>// =
=B4=B4=BD=A8=B7=BD=CA=BD</SPAN>
DWORD dwFlagsAndAttributes, <SPAN class=3Drem>// =
=CE=C4=BC=FE=CA=F4=D0=D4=BC=B0=B1=EA=D6=BE</SPAN>
HANDLE hTemplateFile <SPAN class=3Drem>// =
=C4=A3=B0=E5=CE=C4=BC=FE=B5=C4=BE=E4=B1=FA</SPAN>
);
</CODE></PRE>
<P=20
=
class=3Dbhw98>CreateFile=D5=E2=B8=F6=BA=AF=CA=FD=D3=C3=B4=A6=BA=DC=B6=E0=A3=
=AC=D5=E2=C0=EF=CE=D2=C3=C7=D3=C3=CB=FC=A1=B0=B4=F2=BF=AA=A1=B1=C9=E8=B1=B8=
=C7=FD=B6=AF=B3=CC=D0=F2=A3=AC=B5=C3=B5=BD=C9=E8=B1=B8=B5=C4=BE=E4=B1=FA=A1=
=A3=B2=D9=D7=F7=CD=EA=B3=C9=BA=F3=D3=C3CloseHandle=B9=D8=B1=D5=C9=E8=B1=B8=
=BE=E4=B1=FA=A1=A3=20
<P=20
=
class=3Dbhw98>=D3=EB=C6=D5=CD=A8=CE=C4=BC=FE=C3=FB=D3=D0=CB=F9=B2=BB=CD=AC=
=A3=AC=C9=E8=B1=B8=C7=FD=B6=AF=B5=C4=A1=B0=CE=C4=BC=FE=C3=FB=A1=B1(=B3=A3=
=B3=C6=CE=AA=A1=B0=C9=E8=B1=B8=C2=B7=BE=B6=A1=B1)=D0=CE=CA=BD=B9=CC=B6=A8=
=CE=AA=A1=B0\\.\DeviceName=A1=B1(=D7=A2=D2=E2=D4=DAC=B3=CC=D0=F2=D6=D0=B8=
=C3=D7=D6=B7=FB=B4=AE=D0=B4=B7=A8=CE=AA=A1=B0\\\\.\\DeviceName=A1=B1)=A3=AC=
DeviceName=B1=D8=D0=EB=D3=EB=C9=E8=B1=B8=C7=FD=B6=AF=B3=CC=D0=F2=C4=DA=B6=
=A8=D2=E5=B5=C4=C9=E8=B1=B8=C3=FB=B3=C6=D2=BB=D6=C2=A1=A3=20
<P=20
=
class=3Dbhw98>=D2=BB=B0=E3=B5=D8=A3=AC=B5=F7=D3=C3CreateFile=BB=F1=B5=C3=C9=
=E8=B1=B8=BE=E4=B1=FA=CA=B1=A3=AC=B7=C3=CE=CA=B7=BD=CA=BD=B2=CE=CA=FD=C9=E8=
=D6=C3=CE=AA0=BB=F2GENERIC_READ|GENERIC_WRITE=A3=AC=B9=B2=CF=ED=B7=BD=CA=BD=
=B2=CE=CA=FD=C9=E8=D6=C3=CE=AAFILE_SHARE_READ|FILE_SHARE_WRITE=A3=AC=B4=B4=
=BD=A8=B7=BD=CA=BD=B2=CE=CA=FD=C9=E8=D6=C3=CE=AAOPEN_EXISTING=A3=AC=C6=E4=
=CB=FC=B2=CE=CA=FD=C9=E8=D6=C3=CE=AA0=BB=F2NULL=A1=A3=20
<P class=3Dbhw98><STRONG class=3Dbhw98>Q</STRONG> =
=BF=C9=CA=C7=A3=AC=CE=D2=D4=F5=C3=B4=D6=AA=B5=C0=C9=E8=B1=B8=C3=FB=B3=C6=CA=
=C7=CA=B2=C3=B4=C4=D8=A3=BF=20
<P class=3Dbhw98><STRONG class=3Dbhw98>A</STRONG>=20
=
=D2=BB=D0=A9=B4=E6=B4=A2=C9=E8=B1=B8=B5=C4=C3=FB=B3=C6=CA=C7=CE=A2=C8=ED=B6=
=A8=D2=E5=BA=C3=B5=C4=A3=AC=B2=BB=BF=C9=C4=DC=D3=D0=CA=B2=C3=B4=B1=E4=BB=AF=
=A1=A3=B4=F3=CC=E5=C1=D0=B3=F6=C8=E7=CF=C2=20
<TABLE class=3Dbhw98 align=3Dcenter>
<TBODY>
<TR>
<TD class=3Dbhw98>=C8=ED=C5=CC=C7=FD=B6=AF=C6=F7
<TD class=3Dbhw98>A:, B:=20
<TR>
<TD class=3Dbhw98>=D3=B2=C5=CC=C2=DF=BC=AD=B7=D6=C7=F8
<TD class=3Dbhw98>C:, D:, E:, ...=20
<TR>
<TD class=3Dbhw98>=CE=EF=C0=ED=C7=FD=B6=AF=C6=F7
<TD class=3Dbhw98>PHYSICALDRIVEx=20
<TR>
<TD class=3Dbhw98>CD-ROM, DVD/ROM
<TD class=3Dbhw98>CDROMx=20
<TR>
<TD class=3Dbhw98>=B4=C5=B4=F8=BB=FA
<TD class=3Dbhw98>TAPEx </TR></TBODY></TABLE>
<P=20
=
class=3Dbhw98>=C6=E4=D6=D0=A3=AC=CE=EF=C0=ED=C7=FD=B6=AF=C6=F7=B2=BB=B0=FC=
=C0=A8=C8=ED=C7=FD=BA=CD=B9=E2=C7=FD=A1=A3=C2=DF=BC=AD=C7=FD=B6=AF=C6=F7=BF=
=C9=D2=D4=CA=C7IDE/SCSI/PCMCIA/USB=BD=D3=BF=DA=B5=C4=D3=B2=C5=CC=B7=D6=C7=
=F8=A3=A8=BE=ED=A3=A9=A1=A2=B9=E2=C7=FD=A1=A2MO=A1=A2CF=BF=A8=B5=C8=A3=AC=
=C9=F5=D6=C1=CA=C7=D0=E9=C4=E2=C5=CC=A1=A3x=3D0=A3=AC1=A3=AC2=20
=A1=AD=A1=AD=20
<P =
class=3Dbhw98>=C6=E4=CB=FC=B5=C4=C9=E8=B1=B8=C3=FB=B3=C6=D0=E8=CD=A8=B9=FD=
=C7=FD=B6=AF=BD=D3=BF=DA=B5=C4GUID=B5=F7=D3=C3=C9=E8=B1=B8=B9=DC=C0=ED=BA=
=AF=CA=FD=D7=E5=C8=A1=B5=C3=A3=AC=D5=E2=C0=EF=D4=DD=B2=BB=CC=D6=C2=DB=A1=A3=
=20
<P class=3Dbhw98><STRONG class=3Dbhw98>Q</STRONG>=20
=
=C7=EB=BE=D9=D2=BB=B8=F6=BC=F2=B5=A5=B5=C4=C0=FD=D7=D3=CB=B5=C3=F7=C8=E7=BA=
=CE=CD=A8=B9=FDDeviceIoControl=B7=C3=CE=CA=C9=E8=B1=B8=C7=FD=B6=AF=B3=CC=D0=
=F2=A1=A3=20
<P class=3Dbhw98><STRONG class=3Dbhw98>A</STRONG>=20
=
=D5=E2=C0=EF=D3=D0=D2=BB=B8=F6=B4=D3MSDN=C9=CF=D5=AA=B3=AD=C0=B4=B5=C4dem=
o=B3=CC=D0=F2=A3=AC=D1=DD=CA=BE=D4=DANT/2000/XP=D6=D0=C8=E7=BA=CE=CD=A8=B9=
=FDDeviceIoControl=BB=F1=C8=A1=D3=B2=C5=CC=B5=C4=BB=F9=B1=BE=B2=CE=CA=FD=A1=
=A3 <PRE class=3Dbhw98><CODE class=3Dbhw98><SPAN class=3Drem>/* The code =
of interest is in the subroutine GetDriveGeometry. The
code in main shows how to interpret the results of the IOCTL call. =
*/</SPAN>
=20
<SPAN class=3Dkey>#include</SPAN> <SPAN =
class=3Dstr><windows.h></SPAN>
<SPAN class=3Dkey>#include</SPAN> <SPAN =
class=3Dstr><winioctl.h></SPAN>
=20
BOOL GetDriveGeometry(DISK_GEOMETRY *pdg)
{
HANDLE hDevice; <SPAN class=3Drem>// handle to the =
drive to be examined</SPAN>
BOOL bResult; <SPAN class=3Drem>// results =
flag</SPAN>
DWORD junk; <SPAN class=3Drem>// discard =
results</SPAN>
=20
hDevice =3D CreateFile(<SPAN =
class=3Dstr>"\\\\.\\PhysicalDrive0"</SPAN>, <SPAN class=3Drem>// drive =
to open</SPAN>
<SPAN class=3Dnum>0</SPAN>, <SPAN =
class=3Drem>// no access to the drive</SPAN>
FILE_SHARE_READ | <SPAN class=3Drem>// share =
mode</SPAN>
FILE_SHARE_WRITE,
NULL, <SPAN class=3Drem>// default =
security attributes</SPAN>
OPEN_EXISTING, <SPAN class=3Drem>// =
disposition</SPAN>
<SPAN class=3Dnum>0</SPAN>, <SPAN =
class=3Drem>// file attributes</SPAN>
NULL); <SPAN class=3Drem>// do not copy =
file attributes</SPAN>
=20
<SPAN class=3Dkey>if</SPAN> (hDevice =3D=3D INVALID_HANDLE_VALUE) =
<SPAN class=3Drem>// cannot open the drive</SPAN>
{
<SPAN class=3Dkey>return</SPAN> (FALSE);
}
=20
bResult =3D DeviceIoControl(hDevice, <SPAN class=3Drem>// device =
to be queried</SPAN>
IOCTL_DISK_GET_DRIVE_GEOMETRY, <SPAN class=3Drem>// =
operation to perform</SPAN>
NULL, <SPAN class=3Dnum>0</SPAN>, =
<SPAN class=3Drem>// no input buffer</SPAN>
pdg, <SPAN class=3Dkey>sizeof</SPAN>(*pdg), =
<SPAN class=3Drem>// output buffer</SPAN>
&junk, <SPAN class=3Drem>// # =
bytes returned</SPAN>
(LPOVERLAPPED) NULL); <SPAN class=3Drem>// =
synchronous I/O</SPAN>
=20
CloseHandle(hDevice);
=20
<SPAN class=3Dkey>return</SPAN> (bResult);
}
=20
<SPAN class=3Dkey>int</SPAN> main(<SPAN class=3Dkey>int</SPAN> argc, =
<SPAN class=3Dkey>char</SPAN> *argv[])
{
DISK_GEOMETRY pdg; <SPAN class=3Drem>// disk drive =
geometry structure</SPAN>
BOOL bResult; <SPAN class=3Drem>// generic results =
flag</SPAN>
ULONGLONG DiskSize; <SPAN class=3Drem>// size of the =
drive, in bytes</SPAN>
=20
bResult =3D GetDriveGeometry (&pdg);
=20
<SPAN class=3Dkey>if</SPAN> (bResult)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -