从VXD中调用WDM的服务

电脑使用小技巧

4人已加入

描述

从VXD中调用WDM的服务

Calling WDM Services from Windows 98 VxDs  
If you are developing VxDs specifically for Windows 98, you might  
occasionally need to call a WDM service from a VxD. The Windows 98 DDK  
 
has some limited support for doing this, although it isn't fully  
documented.  
In subdirectory lib\i386\free\win98 you'll find library wdmvxd.clb. This 
  
library gives you linkage to most if not all of the WDM entry points  
provided with Windows 98. Each of the object files loads registers and  
 
invokes INT 2Eh, which traps to a system dispatcher. Before invoking the 
  
called WDM service, the dispatcher takes care of ensuring that the  
stack is set up for structured exception handling, which is supported in 
  
WDM drivers.  
The library is set up to look like an import library, even though it  
does not result in any imports being generated. If you use DUMPBIN  
with the /linkermember switch, you'll see that the entry points are  
prefixed with __imp_. This was done so that you can use prototypes  
 
directly from wdm.h.  
For example, suppose you wanted to call RtlInitUnicodeString from a VxD. 
  
You would need this prototype from wdm.h:  
NTSYSAPI  
VOID  
NTAPI  
RtlInitUnicodeString(  
PUNICODE_STRING DestinationString,  
PCWSTR SourceString  
);  
In addition, you may need these definitions:  
#define NTSYSAPI __declspec(dllimport)  
#define NTAPI __stdcall  
Then it's simply a matter of having the typedef's and linking against  
wdmvxd.clb.  
Use wdmvxd.clb only when absolutely necessary, and always with extreme  
 
caution. Because IRQL is largely undefined in VxDs, there are numerous  
 
ways to get into trouble when making these calls.

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 相关推荐
  • VXD

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分