深入探索Windows VxD与设备驱动开发:从C调用到包装库构建
1. 调用机制与错误处理
在开发过程中,调用机制和错误处理是非常重要的环节。对于C调用者而言,文件句柄返回值会由IFSMgr提前初始化并放置于EAX寄存器。当标志位被置位(表示出现错误)时,包装器会将IFSMgr的错误码从AX复制到错误码指针所指向的位置,同时将EAX置为零后返回。这样做的意义在于,它能明确告知C调用者函数执行失败,并且错误码参数中包含有价值的错误信息,方便后续的调试和问题排查。
2. 构建包装库
当你对WRAPPERS.ASM进行修改以添加自定义服务后,就需要重新构建WRAPPERS.CLB库。具体操作如下:
-找到Makefile:WRAPPERS.MAK文件位于代码盘的子目录中。
-执行构建命令:在命令行中输入nmake -fwrappers.mak即可开始构建。
这个Makefile有一个特殊之处,它会将WRAPPERS.ASM源文件进行六次不同的汇编操作,每次使用不同的SEGNUM定义值,从而生成六个不同的OBJ文件。随后,这六个OBJ文件都会被添加到库中。
SEGNUM并不会被WRAPPERS.ASM直接使用,而是由DDK中的LOCAL.INC文件利用其值将包装函数放置到特定的代码段,并生成特定于该段的函数名。以下是LOCAL.INC文件的部分内容:
IFE SEGNUM-1 SEGB TEXTEQU <VXD_LOCKED