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

📄 20000916013.htm

📁 C++Builder教学大全
💻 HTM
📖 第 1 页 / 共 3 页
字号:
        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>mov ax,168Ah ;功能号</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>lea si,str ;要求ds/si值是str的段值/偏移值</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>int 2Fh ;取入口的段/偏移到es/di,成功时,al返回0</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>cmp al,0</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>jne L0</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>mov word ptr [entry],di</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>mov word ptr [entry+2],es</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>...</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>call [entry]</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>对handler的处理如第二条。</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>5. 被DPMI的保护模式下16位应用程序访问的接口</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>与第4条类似,但选Protected Mode标签,即可生成My_ProtVendorEntry::handler入</span></p>

        <p class=MsoPlainText align="left">口<span lang=EN-US>,访问它的程序是:</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>int PASCAL WinMain(HANDLE h1,HANDLE h0,LPSTR lpCmdLine,int 

          nCmdShow){</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>char *id=&quot;my&quot;;</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>FARPROC entry;</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>_asm{</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>mov ax,168Ah</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>mov si,id</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>int 2Fh ;取入口的选择符/偏移到es/di</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>cmp al,0</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun: yes">&nbsp; 

          </span><span style="mso-spacerun: yes">&nbsp;&nbsp;</span>...</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>}</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>}</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>对handler的处理如第2条。</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>6. 可被其他VxD访问的接口</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>若your.VxD欲调my.VxD的做两数相减的minus接口,需在my.VxD的VxD service页上输</span></p>

        <p class=MsoPlainText align="left">入原型</p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>DWORD _cdecl minus(DWORD i,DWORD j),再在MyDevice::minus中,写return(i-j);</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>your.mak中,需处理中间文件wrap.cpp:</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>OBJECTS=your.OBJ wrap.obj</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>...</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>wrap.OBJ:wrap.cpp my.h</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>wrap.cpp中,对带参数的VxD服务,需用VMM宏指令VxDJmp转入,各参数进入wrap时,已</span></p>

        <p class=MsoPlainText align="left">按<span lang=EN-US>C的调用约定入栈;对不带参数VxD服务,可调用VMM宏指令VxDCall(接口名):</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>#include &quot;my.h&quot;</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>DWORD _cdecl MyDevice::minus(DWORD i,DWORD j){</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>VxDJmp(minus);</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>}</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>your.cpp的某一函数f,可用VMM服务Get_DDB,查my.VxD是否已装入,若未装入,则用V</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US>xDLDR服务VxDLDR_LoadDevice将其装入:</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>#define DEVICE_MAIN</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>#include &quot;your.h&quot;</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>Declare_Virtual_Device(YOUR)</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>#undef DEVICE_MAIN</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>#include &quot;my.h&quot; //此行需在DEVICE_MAIN外</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>VOID f(){</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>PDEVICEINFO pinfo;</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>PDDB pddb;</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>DWORD r;</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>pddb=Get_DDB(0,&quot;MY</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>&quot;); //用空格补全长度小于8的VxD名</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>if (pddb==0) {//未装入</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>r=VxDLDR_LoadDevice(&quot;my.VxD&quot;,</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>VxDLDR_INIT_DEVICE,&amp;pinfo,&amp;pddb);</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>if (r!=0) //VxDLDR_LoadDevice未能成功装入my.VxD</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>return;</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>}</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>MyDevice::minus(值1,值2);</span></p>

        <p class=MsoPlainText align="left"><span lang=EN-US><span style="mso-spacerun:

yes">&nbsp;&nbsp;&nbsp; </span>}</span></p>

          </td>

    </tr>

  </table>

 

</div>

</BODY></HTML>

⌨️ 快捷键说明

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