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

📄 csdn技术中心 实战deviceiocontrol 之四:获取硬盘的详细信息.mht

📁 DeviceIOControl实战演示及源代码
💻 MHT
📖 第 1 页 / 共 5 页
字号:
    USHORT  wReserved82[<SPAN class=3Dnum>6</SPAN>];             <SPAN =
class=3Drem>// WORD 82-87: =B1=A3=C1=F4</SPAN>
    <SPAN class=3Dkey>struct</SPAN> {
        USHORT  Mode0:<SPAN class=3Dnum>1</SPAN>;                <SPAN =
class=3Drem>// 1=3D=D6=A7=B3=D6=C4=A3=CA=BD0 (16.7Mb/s)</SPAN>
        USHORT  Mode1:<SPAN class=3Dnum>1</SPAN>;                <SPAN =
class=3Drem>// 1=3D=D6=A7=B3=D6=C4=A3=CA=BD1 (25Mb/s)</SPAN>
        USHORT  Mode2:<SPAN class=3Dnum>1</SPAN>;                <SPAN =
class=3Drem>// 1=3D=D6=A7=B3=D6=C4=A3=CA=BD2 (33Mb/s)</SPAN>
        USHORT  Mode3:<SPAN class=3Dnum>1</SPAN>;                <SPAN =
class=3Drem>// 1=3D=D6=A7=B3=D6=C4=A3=CA=BD3 (44Mb/s)</SPAN>
        USHORT  Mode4:<SPAN class=3Dnum>1</SPAN>;                <SPAN =
class=3Drem>// 1=3D=D6=A7=B3=D6=C4=A3=CA=BD4 (66Mb/s)</SPAN>
        USHORT  Mode5:<SPAN class=3Dnum>1</SPAN>;                <SPAN =
class=3Drem>// 1=3D=D6=A7=B3=D6=C4=A3=CA=BD5 (100Mb/s)</SPAN>
        USHORT  Mode6:<SPAN class=3Dnum>1</SPAN>;                <SPAN =
class=3Drem>// 1=3D=D6=A7=B3=D6=C4=A3=CA=BD6 (133Mb/s)</SPAN>
        USHORT  Mode7:<SPAN class=3Dnum>1</SPAN>;                <SPAN =
class=3Drem>// 1=3D=D6=A7=B3=D6=C4=A3=CA=BD7 (166Mb/s) ???</SPAN>
        USHORT  Mode0Sel:<SPAN class=3Dnum>1</SPAN>;             <SPAN =
class=3Drem>// 1=3D=D2=D1=D1=A1=D4=F1=C4=A3=CA=BD0</SPAN>
        USHORT  Mode1Sel:<SPAN class=3Dnum>1</SPAN>;             <SPAN =
class=3Drem>// 1=3D=D2=D1=D1=A1=D4=F1=C4=A3=CA=BD1</SPAN>
        USHORT  Mode2Sel:<SPAN class=3Dnum>1</SPAN>;             <SPAN =
class=3Drem>// 1=3D=D2=D1=D1=A1=D4=F1=C4=A3=CA=BD2</SPAN>
        USHORT  Mode3Sel:<SPAN class=3Dnum>1</SPAN>;             <SPAN =
class=3Drem>// 1=3D=D2=D1=D1=A1=D4=F1=C4=A3=CA=BD3</SPAN>
        USHORT  Mode4Sel:<SPAN class=3Dnum>1</SPAN>;             <SPAN =
class=3Drem>// 1=3D=D2=D1=D1=A1=D4=F1=C4=A3=CA=BD4</SPAN>
        USHORT  Mode5Sel:<SPAN class=3Dnum>1</SPAN>;             <SPAN =
class=3Drem>// 1=3D=D2=D1=D1=A1=D4=F1=C4=A3=CA=BD5</SPAN>
        USHORT  Mode6Sel:<SPAN class=3Dnum>1</SPAN>;             <SPAN =
class=3Drem>// 1=3D=D2=D1=D1=A1=D4=F1=C4=A3=CA=BD6</SPAN>
        USHORT  Mode7Sel:<SPAN class=3Dnum>1</SPAN>;             <SPAN =
class=3Drem>// 1=3D=D2=D1=D1=A1=D4=F1=C4=A3=CA=BD7</SPAN>
    } wUltraDMA;                        <SPAN class=3Drem>// WORD 88:  =
Ultra DMA=D6=A7=B3=D6=C4=DC=C1=A6</SPAN>
    USHORT    wReserved89[<SPAN class=3Dnum>167</SPAN>];         <SPAN =
class=3Drem>// WORD 89-255</SPAN>
} IDINFO, *PIDINFO;
 =20
<SPAN class=3Drem>// =
SCSI=C7=FD=B6=AF=CB=F9=D0=E8=B5=C4=CA=E4=C8=EB=CA=E4=B3=F6=B9=B2=D3=C3=B5=
=C4=BD=E1=B9=B9</SPAN>
<SPAN class=3Dkey>typedef</SPAN> <SPAN class=3Dkey>struct</SPAN> =
_SRB_IO_CONTROL
{
   ULONG HeaderLength;        <SPAN class=3Drem>// =
=CD=B7=B3=A4=B6=C8</SPAN>
   UCHAR Signature[<SPAN class=3Dnum>8</SPAN>];        <SPAN =
class=3Drem>// =CC=D8=D5=F7=C3=FB=B3=C6</SPAN>
   ULONG Timeout;             <SPAN class=3Drem>// =
=B3=AC=CA=B1=CA=B1=BC=E4</SPAN>
   ULONG ControlCode;         <SPAN class=3Drem>// =
=BF=D8=D6=C6=C2=EB</SPAN>
   ULONG ReturnCode;          <SPAN class=3Drem>// =
=B7=B5=BB=D8=C2=EB</SPAN>
   ULONG Length;              <SPAN class=3Drem>// =
=BB=BA=B3=E5=C7=F8=B3=A4=B6=C8</SPAN>
} SRB_IO_CONTROL, *PSRB_IO_CONTROL;
</CODE></PRE>
            <P =
class=3Dbhw98>=D0=E8=D2=AA=D2=FD=C6=F0=D7=A2=D2=E2=B5=C4=CA=C7IDINFO=B5=DA=
57-58 WORD=20
            =
(CHS=BF=C9=D1=B0=D6=B7=B5=C4=C9=C8=C7=F8=CA=FD)=A3=AC=D2=F2=CE=AA=B2=BB=C2=
=FA=D7=E332=CE=BB=B6=D4=C6=EB=B5=C4=D2=AA=C7=F3=A3=AC=B2=BB=BF=C9=B6=A8=D2=
=E5=CE=AA=D2=BB=B8=F6ULONG=D7=D6=B6=CE=A1=A3Lynn=20
            =
McGuire=B5=C4=B3=CC=D0=F2=C0=EF=D5=FD=CA=C7=D3=C9=D3=DA=B6=A8=D2=E5=CE=AA=
=D2=BB=B8=F6ULONG=D7=D6=B6=CE=A3=AC=B5=BC=D6=C2=B8=C3=BD=E1=B9=B9=B2=BB=BF=
=C9=D3=C3=A1=A3=20
            <P =
class=3Dbhw98>=D2=D4=CF=C2=CA=C7=BA=CB=D0=C4=B4=FA=C2=EB=A3=BA <PRE =
class=3Dbhw98><CODE class=3Dbhw98><SPAN class=3Drem>// =
=B4=F2=BF=AA=C9=E8=B1=B8</SPAN>
<SPAN class=3Drem>// filename: =
=C9=E8=B1=B8=B5=C4=A1=B0=CE=C4=BC=FE=C3=FB=A1=B1(=C9=E8=B1=B8=C2=B7=BE=B6=
)</SPAN>
HANDLE OpenDevice(LPCTSTR filename)
{
    HANDLE hDevice;
 =20
    <SPAN class=3Drem>// =B4=F2=BF=AA=C9=E8=B1=B8</SPAN>
    hDevice =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> hDevice;
}
 =20
<SPAN class=3Drem>// =CF=F2=C7=FD=B6=AF=B7=A2=A1=B0IDENTIFY =
DEVICE=A1=B1=C3=FC=C1=EE=A3=AC=BB=F1=B5=C3=C9=E8=B1=B8=D0=C5=CF=A2</SPAN>=

<SPAN class=3Drem>// hDevice: =C9=E8=B1=B8=BE=E4=B1=FA</SPAN>
<SPAN class=3Drem>// pIdInfo:  =
=C9=E8=B1=B8=D0=C5=CF=A2=BD=E1=B9=B9=D6=B8=D5=EB</SPAN>
BOOL IdentifyDevice(HANDLE hDevice, PIDINFO pIdInfo)
{
    PSENDCMDINPARAMS pSCIP;      <SPAN class=3Drem>// =
=CA=E4=C8=EB=CA=FD=BE=DD=BD=E1=B9=B9=D6=B8=D5=EB</SPAN>
    PSENDCMDOUTPARAMS pSCOP;     <SPAN class=3Drem>// =
=CA=E4=B3=F6=CA=FD=BE=DD=BD=E1=B9=B9=D6=B8=D5=EB</SPAN>
    DWORD dwOutBytes;            <SPAN class=3Drem>// =
IOCTL=CA=E4=B3=F6=CA=FD=BE=DD=B3=A4=B6=C8</SPAN>
    BOOL bResult;                <SPAN class=3Drem>// =
IOCTL=B7=B5=BB=D8=D6=B5</SPAN>
 =20
    <SPAN class=3Drem>// =
=C9=EA=C7=EB=CA=E4=C8=EB/=CA=E4=B3=F6=CA=FD=BE=DD=BD=E1=B9=B9=BF=D5=BC=E4=
</SPAN>
    pSCIP =3D (PSENDCMDINPARAMS)::GlobalAlloc(LMEM_ZEROINIT, <SPAN =
class=3Dkey>sizeof</SPAN>(SENDCMDINPARAMS) - <SPAN =
class=3Dnum>1</SPAN>);
    pSCOP =3D (PSENDCMDOUTPARAMS)::GlobalAlloc(LMEM_ZEROINIT, <SPAN =
class=3Dkey>sizeof</SPAN>(SENDCMDOUTPARAMS) + <SPAN =
class=3Dkey>sizeof</SPAN>(IDINFO) - <SPAN class=3Dnum>1</SPAN>);
 =20
    <SPAN class=3Drem>// =
=D6=B8=B6=A8ATA/ATAPI=C3=FC=C1=EE=B5=C4=BC=C4=B4=E6=C6=F7=D6=B5</SPAN>
<SPAN class=3Drem>//    pSCIP-&gt;irDriveRegs.bFeaturesReg =3D 0;</SPAN>
<SPAN class=3Drem>//    pSCIP-&gt;irDriveRegs.bSectorCountReg =3D =
0;</SPAN>
<SPAN class=3Drem>//    pSCIP-&gt;irDriveRegs.bSectorNumberReg =3D =
0;</SPAN>
<SPAN class=3Drem>//    pSCIP-&gt;irDriveRegs.bCylLowReg =3D 0;</SPAN>
<SPAN class=3Drem>//    pSCIP-&gt;irDriveRegs.bCylHighReg =3D 0;</SPAN>
<SPAN class=3Drem>//    pSCIP-&gt;irDriveRegs.bDriveHeadReg =3D =
0;</SPAN>
    pSCIP-&gt;irDriveRegs.bCommandReg =3D IDE_ATA_IDENTIFY;
 =20
    <SPAN class=3Drem>// =
=D6=B8=B6=A8=CA=E4=C8=EB/=CA=E4=B3=F6=CA=FD=BE=DD=BB=BA=B3=E5=C7=F8=B4=F3=
=D0=A1</SPAN>
    pSCIP-&gt;cBufferSize =3D <SPAN class=3Dnum>0</SPAN>;
    pSCOP-&gt;cBufferSize =3D <SPAN class=3Dkey>sizeof</SPAN>(IDINFO);
 =20
    <SPAN class=3Drem>// IDENTIFY DEVICE</SPAN>
    bResult =3D ::DeviceIoControl(hDevice,        <SPAN class=3Drem>// =
=C9=E8=B1=B8=BE=E4=B1=FA</SPAN>
        DFP_RECEIVE_DRIVE_DATA,                 <SPAN class=3Drem>// =
=D6=B8=B6=A8IOCTL</SPAN>
        pSCIP, <SPAN class=3Dkey>sizeof</SPAN>(SENDCMDINPARAMS) - <SPAN =
class=3Dnum>1</SPAN>,     <SPAN class=3Drem>// =
=CA=E4=C8=EB=CA=FD=BE=DD=BB=BA=B3=E5=C7=F8</SPAN>
        pSCOP, <SPAN class=3Dkey>sizeof</SPAN>(SENDCMDOUTPARAMS) + <SPAN =
class=3Dkey>sizeof</SPAN>(IDINFO) - <SPAN class=3Dnum>1</SPAN>,    <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=3Drem>// =
=B8=B4=D6=C6=C9=E8=B1=B8=B2=CE=CA=FD=BD=E1=B9=B9</SPAN>
    ::memcpy(pIdInfo, pSCOP-&gt;bBuffer, <SPAN =
class=3Dkey>sizeof</SPAN>(IDINFO));
 =20
    <SPAN class=3Drem>// =
=CA=CD=B7=C5=CA=E4=C8=EB/=CA=E4=B3=F6=CA=FD=BE=DD=BF=D5=BC=E4</SPAN>
    ::GlobalFree(pSCOP);
    ::GlobalFree(pSCIP);
 =20
    <SPAN class=3Dkey>return</SPAN> bResult;
}
 =20
<SPAN class=3Drem>// =CF=F2SCSI =
MINI-PORT=C7=FD=B6=AF=B7=A2=A1=B0IDENTIFY =
DEVICE=A1=B1=C3=FC=C1=EE=A3=AC=BB=F1=B5=C3=C9=E8=B1=B8=D0=C5=CF=A2</SPAN>=

<SPAN class=3Drem>// hDevice: =C9=E8=B1=B8=BE=E4=B1=FA</SPAN>
<SPAN class=3Drem>// pIdInfo:  =
=C9=E8=B1=B8=D0=C5=CF=A2=BD=E1=B9=B9=D6=B8=D5=EB</SPAN>
BOOL IdentifyDeviceAsScsi(HANDLE hDevice, <SPAN class=3Dkey>int</SPAN> =
nDrive, PIDINFO pIdInfo)
{
    PSENDCMDINPARAMS pSCIP;     <SPAN class=3Drem>// =
=CA=E4=C8=EB=CA=FD=BE=DD=BD=E1=B9=B9=D6=B8=D5=EB</SPAN>
    PSENDCMDOUTPARAMS pSCOP;    <SPAN class=3Drem>// =
=CA=E4=B3=F6=CA=FD=BE=DD=BD=E1=B9=B9=D6=B8=D5=EB</SPAN>
    PSRB_IO_CONTROL pSRBIO;     <SPAN class=3Drem>// =
SCSI=CA=E4=C8=EB=CA=E4=B3=F6=CA=FD=BE=DD=BD=E1=B9=B9=D6=B8=D5=EB</SPAN>
    DWORD dwOutBytes;           <SPAN class=3Drem>// =
IOCTL=CA=E4=B3=F6=CA=FD=BE=DD=B3=A4=B6=C8</SPAN>
    BOOL bResult;               <SPAN class=3Drem>// =
IOCTL=B7=B5=BB=D8=D6=B5</SPAN>
 =20
    <SPAN class=3Drem>// =
=C9=EA=C7=EB=CA=E4=C8=EB/=CA=E4=B3=F6=CA=FD=BE=DD=BD=E1=B9=B9=BF=D5=BC=E4=
</SPAN>
    pSRBIO =3D (PSRB_IO_CONTROL)::GlobalAlloc(LMEM_ZEROINIT,
        <SPAN class=3Dkey>sizeof</SPAN>(SRB_IO_CONTROL) + <SPAN =
class=3Dkey>sizeof</SPAN>(SENDCMDOUTPARAMS) + <SPAN =
class=3Dkey>sizeof</SPAN>(IDINFO) - <SPAN class=3Dnum>1</SPAN>);
    pSCIP =3D (PSENDCMDINPARAMS)((<SPAN class=3Dkey>char</SPAN> *)pSRBIO =
+ <SPAN class=3Dkey>sizeof</SPAN>(SRB_IO_CONTROL));
    pSCOP =3D (PSENDCMDOUTPARAMS)((<SPAN class=3Dkey>char</SPAN> =
*)pSRBIO + <SPAN class=3Dkey>sizeof</SPAN>(SRB_IO_CONTROL));
 =20
    <SPAN class=3Drem>// =
=CC=EE=B3=E4=CA=E4=C8=EB/=CA=E4=B3=F6=CA=FD=BE=DD</SPAN>
    pSRBIO-&gt;HeaderLength =3D <SPAN =
class=3Dkey>sizeof</SPAN>(SRB_IO_CONTROL);
    pSRBIO-&gt;Timeout =3D <SPAN class=3Dnum>10000</SPAN>;
    pSRBIO-&gt;Length =3D <SPAN =
class=3Dkey>sizeof</SPAN>(SENDCMDOUTPARAMS) + <SPAN =
class=3Dkey>sizeof</SPAN>(IDINFO) - <SPAN class=3Dnum>1</SPAN>;
    pSRBIO-&gt;ControlCode =3D IOCTL_SCSI_MINIPORT_IDENTIFY;
    ::strncpy ((<SPAN class=3Dkey>char</SPAN> *)pSRBIO-&gt;Signature, =
<SPAN class=3Dstr>"SCSIDISK"</SPAN>, <SPAN class=3Dnum>8</SPAN>);
 =20
    <SPAN class=3Drem>// =
=D6=B8=B6=A8ATA/ATAPI=C3=FC=C1=EE=B5=C4=BC=C4=B4=E6=C6=F7=D6=B5</SPAN>
<SPAN class=3Drem>//    pSCIP-&gt;irDriveRegs.bFeaturesReg =3D 0;</SPAN>
<SPAN class=3Drem>//    pSCIP-&gt;irDriveRegs.bSectorCountReg =3D =
0;</SPAN>
<SPAN class=3Drem>//    pSCIP-&gt;irDriveRegs.bSectorNumberReg =3D =
0;</SPAN>
<SPAN class=3Drem>//    pSCIP-&gt;irDriveRegs.bCylLowReg =3D 0;</SPAN>
<SPAN class=3Drem>//    pSCIP-&gt;irDriveRegs.bCylHighReg =3D 0;</SPAN>
<SPAN class=3Drem>//    pSCIP-&gt;irDriveRegs.bDriveHeadReg =3D =
0;</SPAN>
    pSCIP-&gt;irDriveRegs.bCommandReg =3D IDE_ATA_IDENTIFY;
    pSCIP-&gt;bDriveNumber =3D nDrive;
 =20
    <SPAN class=3Drem>// IDENTIFY DEVICE</SPAN>
    bResult =3D ::DeviceIoControl(hDevice,    <SPAN class=3Drem>// =
=C9=E8=B1=B8=BE=E4=B1=FA</SPAN>
        IOCTL_SCSI_MINIPORT,                <SPAN class=3Drem>// =
=D6=B8=B6=A8IOCTL</SPAN>
        pSRBIO, <SPAN class=3Dkey>sizeof</SPAN>(SRB_IO_CONTROL) + <SPAN =
class=3Dkey>sizeof</SPAN>(SENDCMDINPARAMS) - <SPAN class=3Dnum>1</SPAN>, =
   <SPAN class=3Drem>// =
=CA=E4=C8=EB=CA=FD=BE=DD=BB=BA=B3=E5=C7=F8</SPAN>
        pSRBIO, <SPAN class=3Dkey>sizeof</SPAN>(SRB_IO_CONTROL) + <SPAN =
class=3Dkey>sizeof</SPAN>(SENDCMDOUTPARAMS) + <SPAN =
class=3Dkey>sizeof</SPAN>(IDINFO) - <SPAN class=3Dnum>1</SPAN>,    <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=3Drem>// =
=B8=B4=D6=C6=C9=E8=B1=B8=B2=CE=CA=FD=BD=E1=B9=B9</SPAN>
    ::memcpy(pIdInfo, pSCOP-&gt;bBuffer, <SPAN =
class=3Dkey>sizeof</SPAN>(IDINFO));
 =20
    <SPAN class=3Drem>// =
=CA=CD=B7=C5=CA=E4=C8=EB/=CA=E4=B3=F6=CA=FD=BE=DD=BF=D5=BC=E4</SPAN>
    ::GlobalFree(pSRBIO);
 =20
    <SPAN class=3Dkey>return</SPAN> bResult;
}
 =20
<SPAN class=3Drem>// =
=BD=AB=B4=AE=D6=D0=B5=C4=D7=D6=B7=FB=C1=BD=C1=BD=B5=DF=B5=B9</SPAN>
<SPAN class=3Drem>// =
=D4=AD=D2=F2=CA=C7ATA/ATAPI=D6=D0=B5=C4WORD=A3=AC=D3=EBWindows=B2=C9=D3=C3=
=B5=C4=D7=D6=BD=DA=CB=B3=D0=F2=CF=E0=B7=B4</SPAN>
<SPAN class=3Drem>// =
=C7=FD=B6=AF=B3=CC=D0=F2=D6=D0=D2=D1=BE=AD=BD=AB=CA=D5=B5=BD=B5=C4=CA=FD=BE=
=DD=C8=AB=B2=BF=B7=B4=B9=FD=C0=B4=A3=AC=CE=D2=C3=C7=C0=B4=B8=F6=B8=BA=B8=BA=
=B5=C3=D5=FD</SPAN>
<SPAN class=3Dkey>void</SPAN> AdjustString(<SPAN =
class=3Dkey>char</SPAN>* str, <SPAN class=3Dkey>int</SPAN> len)
{
    <SPAN class=3Dkey>char</SPAN> ch;
    <SPAN class=3Dkey>int</SPAN> i;
 =20
    <SPAN class=3Drem>// =C1=BD=C1=BD=B5=DF=B5=B9</SPAN>
    <SPAN class=3Dkey>for</SPAN> (i =3D <SPAN class=3Dnum>0</SPAN>; i =
&lt; len; i +=3D <SPAN class=3Dnum>2</SPAN>)
    {
        ch =3D str[i];
        str[i] =3D str[i + <SPAN class=3Dnum>1</SPAN>];
        str[i + <SPAN class=3Dnum>1</SPAN>] =3D ch;
    }
 =20
    <SPAN class=3Drem>// =
=C8=F4=CA=C7=D3=D2=B6=D4=C6=EB=B5=C4=A3=AC=B5=F7=D5=FB=CE=AA=D7=F3=B6=D4=C6=
=EB (=C8=A5=B5=F4=D7=F3=B1=DF=B5=C4=BF=D5=B8=F1)</SPAN>
    i =3D <SPAN class=3Dnum>0</SPAN>;

⌨️ 快捷键说明

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