从VXD中调用WDM的服务 -- NUMEGA

王朝vc·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

从VXD中调用WDM的服务

作者:NUMEGA

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.

-----------------------

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航