詳述C 語言的VxD與外界通訊的所有介面

2021-04-13 14:18:19 字數 2770 閱讀 8113

2023年02月16日 08:32:00

詳述c++語言的vxd與外界通訊的所有介面

case 命令碼c:

用p指向的ioctlpar

ams結構,與應用程式交換資料;

if (成功) return(0); /*

使deviceiocontrol的返回值r為true*/

else return(1);

default:

return(0);

} ---- 以上做法要求vxd立即交換資料(同步通訊),值file_flag_delete_on_close指明 closehandle將不在記憶體中保留引用記數為0的vxd.

---- 此時,p-

---- vwin32_dioccompletionroutine(p-

---- vmm動態裝卸vxd時,以命令碼0及-1傳送w32_deviceiocontrol訊息給vxd,故vireo公司建議命令碼c取[2048,4095].

---- (2) 被real/v86模式下16位應用程式訪問的介面:

entry dd ?

mov ax,1684h ;功能號

mov bx,3180h ;介面id

int 2fh ;取入口的段/

偏移到es/di,成功時,

di及es返回非零值

mov ax,es

or ax,di

jz l0

mov word ptr [entry],di

mov word ptr [entry+2],es

mov ah,碼c

call [entry]

---- l0: 錯誤處理

mydevice::v86_api_entry(vmhandle hvm

,client_struct* p)入口可以是:

if (p-

---- (3) 被保護模式下16位應用程式訪問的介面:

---- 與(2)類似,但選protected mode標籤,即可生成mydevice::pm_api_entry入口,訪問它的程式是:

int pascal winmain(handle h1,handle h0,

lpstr lpcmdline,int ncmdshow)

---- 對pm_api_entry的處理如(3.2).

---- (4) 被dpmi的實模式/v86模式下16位應用程式訪問的介面:

str db 'my',0 ;vxd的唯一標識串

entry dd ?

mov ax,168ah ;功能號

lea si,str ;要求ds/si值是str的段值/偏移值

int 2fh ;取入口的段/偏移到es/di,成功時,al返回0

cmp al,0

jne l0

mov word ptr [entry],di

mov word ptr [entry+2],es

...

call [entry]

---- 對handler的處理如(3.2).

---- (5) 被dpmi的保護模式下16位應用程式訪問的介面: 與(4)類似,但選protected mode標籤,即可生成my_protvendorentry::handler入口,訪問它的程式是:

int pascal winmain(handle h1,handle h0,

lpstr lpcmdline,int ncmdshow)

}

---- 對handler的處理如(3.2).

---- (6) 可被其它vxd訪問的介面:

---- 若your.vxd欲調my.vxd的做兩數相減的minus介面,需在my.vxd的vxd service頁上輸入原型dword _cdecl minus(dword i,dword j),再在mydevice::minus中,寫return(i-j);

---- your.mak中,需處理中間檔案wrap.cpp:

objects=your.obj wrap.obj

...

wrap.obj:wrap.cpp my.h

---- wrap.cpp中,對帶引數的vxd服務,需用vmm巨集指令vxdjmp轉入,各引數進入wrap時,已按c的呼叫約定入棧;對不帶引數vxd服務,可呼叫vmm巨集指令vxdcall(介面名):

#include "my.h"

dword _cdecl mydevice::

minus(dword i,dword j)

---- your.cpp的某一函式f,可用vmm服務get_ddb,查my.vxd是否已裝入,若未裝入,則用vxdldr服務

---- vxdldr_loaddevice將其裝入:

#define device_main

#include "your.h"

declare_virtual_device(your)

#undef device_main

---- #include "my.h" //此行需在device_main外

void f()

mydevice::minus(值1,值2);

}

中華技術網整理發布 http://www.asfocus.com http://www.netqu.com

C語言中Static的作用詳述

在c語言中,static的字面意思很容易把我們匯入歧途,其實它的作用有三條。1 先來介紹它的第一條也是最重要的一條 隱藏。當我們同時編譯多個檔案時,所有未加static字首的全域性變數和函式都具有全域性可見性。為理解這句話,我舉例來說明。我們要同時編譯兩個原始檔,乙個是a.c,另乙個是main.c。...

詳述 與equals的區別

1 在基本資料型別中比較值是否相等,在引用資料型別中比較位址是否相等。int a 12 int b 12 int c 3 system.out.println a b a與b值相同,結果為true system.out.println a c a與c值不同,結果為false string name1...

SAP是如何與外界溝通的?

翻譯一篇文章吧,官方的help components of sap communication technology sap通訊互動技術 在sap的環境下,用abap 寫的經典的技術,和非abap開發的結構,二者互相通訊,雙向的通訊,這種需求十分豐富。下面的內容提供了乙個概覽,sap提供的多種不同整...