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

📄 csdn技术中心 实战deviceiocontrol 之三:制作磁盘镜像文件.mht

📁 DeviceIOControl实战演示及源代码
💻 MHT
📖 第 1 页 / 共 5 页
字号:
}
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
            =
DOS=C3=FC=C1=EEDISKCOPY=B8=F8=CE=D2=BA=DC=C9=EE=B5=C4=D3=A1=CF=F3=A3=AC=CF=
=D6=D4=DA=D2=B2=D3=D0=D0=ED=B6=E0=A1=B0=BF=CB=C2=A1=A1=B1=C8=ED=BC=FE=A3=AC=
=BF=C9=D2=D4=B6=D4=B4=C5=C5=CC=BD=F8=D0=D0=C8=AB=C5=CC=B8=B4=D6=C6=A1=A3=CE=
=D2=CF=EB=A3=AC=D2=AA=D6=C6=D7=F7=B4=C5=C5=CC=BE=B5=CF=F1=CE=C4=BC=FE=A3=AC=
DeviceIoControl=D3=A6=B8=C3=BA=DC=D3=D0=D3=C3=CE=E4=D6=AE=B5=D8=B0=C9=A3=BF=
=20

            <P class=3Dbhw98><STRONG class=3Dbhw98>A</STRONG>=20
            =
=CA=C7=B5=C4=A1=A3=D5=E2=C0=EF=BE=D9=D2=BB=B8=F6=D6=C6=D7=F7=C8=ED=C5=CC=BE=
=B5=CF=F1=CE=C4=BC=FE=A3=AC=B9=A6=C4=DC=C0=E0=CB=C6=D3=DA=A1=B0DISKCOPY=A1=
=B1=B5=C4=C0=FD=D7=D3=A1=A3
            <P =
class=3Dbhw98>=B1=BE=C0=FD=CA=B5=CF=D6=C6=E4=B9=A6=C4=DC=B5=C4=BA=CB=D0=C4=
=B4=FA=C2=EB=C8=E7=CF=C2=A3=BA <PRE class=3Dbhw98><CODE =
class=3Dbhw98><SPAN class=3Drem>// =B4=F2=BF=AA=B4=C5=C5=CC</SPAN>
HANDLE OpenDisk(LPCTSTR filename)
{
    HANDLE hDisk;
 =20
    <SPAN class=3Drem>// =B4=F2=BF=AA=C9=E8=B1=B8</SPAN>
    hDisk =3D ::CreateFile(filename,           <SPAN class=3Drem>// =
=CE=C4=BC=FE=C3=FB</SPAN>
        GENERIC_READ | GENERIC_WRITE,        <SPAN class=3Drem>// =
=B6=C1=D0=B4=B7=BD=CA=BD</SPAN>
        FILE_SHARE_READ | FILE_SHARE_WRITE,  <SPAN class=3Drem>// =
=B9=B2=CF=ED=B7=BD=CA=BD</SPAN>
        NULL,                                <SPAN class=3Drem>// =
=C4=AC=C8=CF=B5=C4=B0=B2=C8=AB=C3=E8=CA=F6=B7=FB</SPAN>
        OPEN_EXISTING,                       <SPAN class=3Drem>// =
=B4=B4=BD=A8=B7=BD=CA=BD</SPAN>
        <SPAN class=3Dnum>0</SPAN>,                                   =
<SPAN class=3Drem>// =
=B2=BB=D0=E8=C9=E8=D6=C3=CE=C4=BC=FE=CA=F4=D0=D4</SPAN>
        NULL);                               <SPAN class=3Drem>// =
=B2=BB=D0=E8=B2=CE=D5=D5=C4=A3=B0=E5=CE=C4=BC=FE</SPAN>
 =20
    <SPAN class=3Dkey>return</SPAN> hDisk;
}
 =20
<SPAN class=3Drem>// =BB=F1=C8=A1=B4=C5=C5=CC=B2=CE=CA=FD</SPAN>
BOOL GetDiskGeometry(HANDLE hDisk, PDISK_GEOMETRY lpGeometry)
{
    DWORD dwOutBytes;
    BOOL bResult;
 =20
    <SPAN class=3Drem>// =
=D3=C3IOCTL_DISK_GET_DRIVE_GEOMETRY=C8=A1=B4=C5=C5=CC=B2=CE=CA=FD</SPAN>
    bResult =3D ::DeviceIoControl(hDisk,        <SPAN class=3Drem>// =
=C9=E8=B1=B8=BE=E4=B1=FA</SPAN>
        IOCTL_DISK_GET_DRIVE_GEOMETRY,        <SPAN class=3Drem>// =
=C8=A1=B4=C5=C5=CC=B2=CE=CA=FD</SPAN>
        NULL, <SPAN class=3Dnum>0</SPAN>,                              =
<SPAN class=3Drem>// =B2=BB=D0=E8=D2=AA=CA=E4=C8=EB=CA=FD=BE=DD</SPAN>
        lpGeometry, <SPAN class=3Dkey>sizeof</SPAN>(DISK_GEOMETRY),    =
<SPAN class=3Drem>// =CA=E4=B3=F6=CA=FD=BE=DD=BB=BA=B3=E5=C7=F8</SPAN>
        &amp;dwOutBytes,                          <SPAN class=3Drem>// =
=CA=E4=B3=F6=CA=FD=BE=DD=B3=A4=B6=C8</SPAN>
        (LPOVERLAPPED)NULL);                  <SPAN class=3Drem>// =
=D3=C3=CD=AC=B2=BDI/O</SPAN>
 =20
    <SPAN class=3Dkey>return</SPAN> bResult;
}
 =20
<SPAN class=3Drem>// =
=B4=D3=D6=B8=B6=A8=B4=C5=B5=C0=BF=AA=CA=BC=B6=C1=B4=C5=C5=CC</SPAN>
BOOL ReadTracks(HANDLE hDisk, PDISK_GEOMETRY lpGeometry, LPVOID pBuf, =
DWORD dwStartCylinder, DWORD dwCylinderNumber)
{
    DWORD VirtBufSize;
    DWORD BytesRead;
 =20
    <SPAN class=3Drem>// =B4=F3=D0=A1</SPAN>
    VirtBufSize =3D  lpGeometry-&gt;TracksPerCylinder * =
lpGeometry-&gt;SectorsPerTrack * lpGeometry-&gt;BytesPerSector;
 =20
    <SPAN class=3Drem>// =C6=AB=D2=C6</SPAN>
    ::SetFilePointer(hDisk, VirtBufSize*dwStartCylinder, NULL, =
FILE_BEGIN);
 =20
    <SPAN class=3Dkey>return</SPAN> ::ReadFile(hDisk, pBuf, =
VirtBufSize*dwCylinderNumber, &amp;BytesRead, NULL);
}
 =20
<SPAN class=3Drem>// =
=B4=D3=D6=B8=B6=A8=B4=C5=B5=C0=BF=AA=CA=BC=D0=B4=B4=C5=C5=CC</SPAN>
BOOL WriteTracks(HANDLE hDisk, PDISK_GEOMETRY lpGeometry, LPVOID pBuf, =
DWORD dwStartCylinder, DWORD dwCylinderNumber)
{
    DWORD VirtBufSize;
    DWORD BytesWritten;
 =20
    <SPAN class=3Drem>// =B4=F3=D0=A1</SPAN>
    VirtBufSize =3D  lpGeometry-&gt;TracksPerCylinder * =
lpGeometry-&gt;SectorsPerTrack * lpGeometry-&gt;BytesPerSector;
 =20
    <SPAN class=3Drem>// =C6=AB=D2=C6</SPAN>
    ::SetFilePointer(hDisk, VirtBufSize*dwStartCylinder, NULL, =
FILE_BEGIN);
 =20
    <SPAN class=3Dkey>return</SPAN> ::WriteFile(hDisk, pBuf, =
VirtBufSize*dwCylinderNumber, &amp;BytesWritten, NULL);
}
 =20
<SPAN class=3Drem>// =
=B4=D3=D6=B8=B6=A8=B4=C5=B5=C0=BF=AA=CA=BC=B8=F1=CA=BD=BB=AF=B4=C5=C5=CC<=
/SPAN>
BOOL LowLevelFormatTracks(HANDLE hDisk, PDISK_GEOMETRY lpGeometry, DWORD =
dwStartCylinder, DWORD dwCylinderNumber)
{
    FORMAT_PARAMETERS FormatParameters;
    PBAD_TRACK_NUMBER lpBadTrack;
    DWORD dwOutBytes;
    DWORD dwBufSize;
    BOOL bResult;
 =20
    FormatParameters.MediaType =3D lpGeometry-&gt;MediaType;
    FormatParameters.StartCylinderNumber =3D dwStartCylinder;
    FormatParameters.EndCylinderNumber =3D dwStartCylinder + =
dwCylinderNumber - <SPAN class=3Dnum>1</SPAN>;
    FormatParameters.StartHeadNumber =3D <SPAN class=3Dnum>0</SPAN>;
    FormatParameters.EndHeadNumber =3D lpGeometry-&gt;TracksPerCylinder =
- <SPAN class=3Dnum>1</SPAN>;
 =20
    dwBufSize =3D lpGeometry-&gt;TracksPerCylinder * <SPAN =
class=3Dkey>sizeof</SPAN>(BAD_TRACK_NUMBER);
 =20
    lpBadTrack =3D (PBAD_TRACK_NUMBER) new BYTE[dwBufSize];
 =20
    <SPAN class=3Drem>// =
=D3=C3IOCTL_DISK_FORMAT_TRACKS=B6=D4=C1=AC=D0=F8=B4=C5=B5=C0=BD=F8=D0=D0=B5=
=CD=BC=B6=B8=F1=CA=BD=BB=AF</SPAN>
    bResult =3D ::DeviceIoControl(hDisk,               <SPAN =
class=3Drem>// =C9=E8=B1=B8=BE=E4=B1=FA</SPAN>
        IOCTL_DISK_FORMAT_TRACKS,                    <SPAN =
class=3Drem>// =B5=CD=BC=B6=B8=F1=CA=BD=BB=AF</SPAN>
        &amp;FormatParameters, <SPAN =
class=3Dkey>sizeof</SPAN>(FormatParameters), <SPAN class=3Drem>// =
=CA=E4=C8=EB=CA=FD=BE=DD=BB=BA=B3=E5=C7=F8</SPAN>
        lpBadTrack, dwBufSize,                       <SPAN =
class=3Drem>// =CA=E4=B3=F6=CA=FD=BE=DD=BB=BA=B3=E5=C7=F8</SPAN>
        &amp;dwOutBytes,                                 <SPAN =
class=3Drem>// =CA=E4=B3=F6=CA=FD=BE=DD=B3=A4=B6=C8</SPAN>
        (LPOVERLAPPED)NULL);                         <SPAN =
class=3Drem>// =D3=C3=CD=AC=B2=BDI/O</SPAN>
 =20
    delete lpBadTrack;
 =20
    <SPAN class=3Dkey>return</SPAN> bResult;
}
 =20
<SPAN class=3Drem>// =BD=AB=BE=ED=CB=F8=B6=A8</SPAN>
BOOL LockVolume(HANDLE hDisk)
{
    DWORD dwOutBytes;
    BOOL bResult;
 =20
    <SPAN class=3Drem>// =D3=C3FSCTL_LOCK_VOLUME=CB=F8=BE=ED</SPAN>
    bResult =3D ::DeviceIoControl(hDisk,        <SPAN class=3Drem>// =
=C9=E8=B1=B8=BE=E4=B1=FA</SPAN>
        FSCTL_LOCK_VOLUME,                    <SPAN class=3Drem>// =
=CB=F8=BE=ED</SPAN>
        NULL, <SPAN class=3Dnum>0</SPAN>,                              =
<SPAN class=3Drem>// =B2=BB=D0=E8=D2=AA=CA=E4=C8=EB=CA=FD=BE=DD</SPAN>
        NULL, <SPAN class=3Dnum>0</SPAN>,                              =
<SPAN class=3Drem>// =B2=BB=D0=E8=D2=AA=CA=E4=B3=F6=CA=FD=BE=DD</SPAN>
        &amp;dwOutBytes,                          <SPAN class=3Drem>// =
=CA=E4=B3=F6=CA=FD=BE=DD=B3=A4=B6=C8</SPAN>
        (LPOVERLAPPED)NULL);                  <SPAN class=3Drem>// =
=D3=C3=CD=AC=B2=BDI/O</SPAN>
 =20
    <SPAN class=3Dkey>return</SPAN> bResult;
}
 =20
<SPAN class=3Drem>// =BD=AB=BE=ED=BD=E2=CB=F8</SPAN>
BOOL UnlockVolume(HANDLE hDisk)
{
    DWORD dwOutBytes;
    BOOL bResult;
 =20
    <SPAN class=3Drem>// =
=D3=C3FSCTL_UNLOCK_VOLUME=BF=AA=BE=ED=CB=F8</SPAN>
    bResult =3D ::DeviceIoControl(hDisk,        <SPAN class=3Drem>// =
=C9=E8=B1=B8=BE=E4=B1=FA</SPAN>
        FSCTL_UNLOCK_VOLUME,                  <SPAN class=3Drem>// =
=BF=AA=BE=ED=CB=F8</SPAN>
        NULL, <SPAN class=3Dnum>0</SPAN>,                              =
<SPAN class=3Drem>// =B2=BB=D0=E8=D2=AA=CA=E4=C8=EB=CA=FD=BE=DD</SPAN>
        NULL, <SPAN class=3Dnum>0</SPAN>,                              =
<SPAN class=3Drem>// =B2=BB=D0=E8=D2=AA=CA=E4=B3=F6=CA=FD=BE=DD</SPAN>
        &amp;dwOutBytes,                          <SPAN class=3Drem>// =
=CA=E4=B3=F6=CA=FD=BE=DD=B3=A4=B6=C8</SPAN>
        (LPOVERLAPPED)NULL);                  <SPAN class=3Drem>// =
=D3=C3=CD=AC=B2=BDI/O</SPAN>
 =20
    <SPAN class=3Dkey>return</SPAN> bResult;
}
 =20
<SPAN class=3Drem>// =BD=AB=BE=ED=D0=B6=CF=C2</SPAN>
<SPAN class=3Drem>// =
=B8=C3=B2=D9=D7=F7=CA=B9=CF=B5=CD=B3=D6=D8=D0=C2=B1=E6=CA=B6=B4=C5=C5=CC=A3=
=AC=B5=C8=D0=A7=D3=DA=D6=D8=D0=C2=B2=E5=C5=CC</SPAN>
BOOL DismountVolume(HANDLE hDisk)
{
    DWORD dwOutBytes;
    BOOL bResult;
 =20
    <SPAN class=3Drem>// =D3=C3FSCTL_DISMOUNT_VOLUME=D0=B6=BE=ED</SPAN>
    bResult =3D ::DeviceIoControl(hDisk,        <SPAN class=3Drem>// =
=C9=E8=B1=B8=BE=E4=B1=FA</SPAN>
        FSCTL_DISMOUNT_VOLUME,                <SPAN class=3Drem>// =
=D0=B6=BE=ED</SPAN>
        NULL, <SPAN class=3Dnum>0</SPAN>,                              =
<SPAN class=3Drem>// =B2=BB=D0=E8=D2=AA=CA=E4=C8=EB=CA=FD=BE=DD</SPAN>
        NULL, <SPAN class=3Dnum>0</SPAN>,                              =
<SPAN class=3Drem>// =B2=BB=D0=E8=D2=AA=CA=E4=B3=F6=CA=FD=BE=DD</SPAN>
        &amp;dwOutBytes,                          <SPAN class=3Drem>// =
=CA=E4=B3=F6=CA=FD=BE=DD=B3=A4=B6=C8</SPAN>
        (LPOVERLAPPED)NULL);                  <SPAN class=3Drem>// =
=D3=C3=CD=AC=B2=BDI/O</SPAN>
 =20
    <SPAN class=3Dkey>return</SPAN> bResult;
}
</CODE></PRE>
            <P=20
            =
class=3Dbhw98>=BD=AB=C8=ED=C5=CC=B1=A3=B4=E6=B3=C9=BE=B5=CF=F1=CE=C4=BC=FE=
=B5=C4=B2=BD=D6=E8=BC=F2=B5=A5=C3=E8=CA=F6=CE=AA=A3=BA<BR>1=A1=A2=B4=B4=BD=
=A8=BF=D5=B5=C4=BE=B5=CF=F1=CE=C4=BC=FE=A1=A3<BR>2=A1=A2=B5=F7=D3=C3OpenD=
isk=B4=F2=BF=AA=C8=ED=C5=CC=A1=A3=B3=C9=B9=A6=D7=AA3=A3=AC=CA=A7=B0=DC=D7=
=AA8=A1=A3<BR>3=A1=A2=B5=F7=D3=C3LockVolume=BD=AB=BE=ED=CB=F8=B6=A8=A1=A3=
=B3=C9=B9=A6=D7=AA4=A3=AC=CA=A7=B0=DC=D7=AA7=A1=A3<BR>4=A1=A2=B5=F7=D3=C3=
GetDiskGeometry=BB=F1=C8=A1=B2=CE=CA=FD=A1=A3=B3=C9=B9=A6=D7=AA5=A3=AC=CA=
=A7=B0=DC=D7=AA6=A1=A3<BR>5=A1=A2=BD=AB=B4=C5=C5=CC=B2=CE=CA=FD=D0=B4=C8=EB=
=BE=B5=CF=F1=CE=C4=BC=FE=D7=F7=CE=AA=CE=C4=BC=FE=CD=B7=A1=A3=B5=F7=D3=C3R=
eadTracks=B0=B4=D6=F9=C3=E6=B6=C1=B3=F6=CA=FD=BE=DD=A3=AC=B1=A3=B4=E6=D4=DA=
=BE=B5=CF=F1=CE=C4=BC=FE=D6=D0=A1=A3=D1=AD=BB=B7=B4=CE=CA=FD=B5=C8=D3=DA=D6=
=F9=C3=E6=CA=FD=A1=A3<BR>6=A1=A2=B5=F7=D3=C3UnlockVolume=BD=AB=BE=ED=BD=E2=
=CB=F8=A1=A3<BR>7=A1=A2=B5=F7=D3=C3CloseDisk=B9=D8=B1=D5=C8=ED=C5=CC=A1=A3=
<BR>8=A1=A2=B9=D8=B1=D5=BE=B5=CF=F1=CE=C4=BC=FE=A1=A3</P>
            <P=20
            =
class=3Dbhw98>=BD=AB=BE=B5=CF=F1=CE=C4=BC=FE=D4=D8=C8=EB=C8=ED=C5=CC=B5=C4=
=B2=BD=D6=E8=BC=F2=B5=A5=C3=E8=CA=F6=CE=AA=A3=BA<BR>1=A1=A2=B4=F2=BF=AA=BE=
=B5=CF=F1=CE=C4=BC=FE=A1=A3<BR>2=A1=A2=B5=F7=D3=C3OpenDisk=B4=F2=BF=AA=C8=
=ED=C5=CC=A1=A3=B3=C9=B9=A6=D7=AA3=A3=AC=CA=A7=B0=DC=D7=AA11=A1=A3<BR>3=A1=

⌨️ 快捷键说明

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