一个VxD的问题,有兴趣的看看(谢谢_STLer!)

_STLer 2001-11-20 11:59:50
我用如下参数调用DeviceIoControl函数,
invoke DeviceIoControl,hVxD,1,addr InBuffer,8,NULL,NULL,NULL,NULL
===
注意:第一个参数为用CreateFile打开某个VxD的返回值,用sice看过,返回值正确,hVxD=0x00000008,
第二个参数为1,

我的VxD中对w32_DeviceIoControl消息进行了处理,处理代码如下:

VxD_PAGEABLE_CODE_SEG ;可分页代码段
BeginProc OnDeviceIoControl
assume esi:ptr DIOCParams
.if [esi].dwIoControlCode==DIOC_Open ; 如果为DIOC_Open,返回0,程序选;择了这个分支
xor eax,eax
.elseif [esi].dwIoControlCode==1 ;这是我希望的分支,
mov edi,[esi].lpvInBuffer
;-----------------------------------
; copy the message title to buffer
;-----------------------------------
VMMCall _lstrlen, <[edi]>
inc eax
push eax
VMMCall _HeapAllocate,<eax,HEAPZEROINIT>
mov pTitle,eax
pop eax
VMMCall _lstrcpyn,<pTitle,[edi],eax>
;-----------------------------------
; copy the message text to buffer
;-----------------------------------
VMMCall _lstrlen, <[edi+4]>
inc eax
push eax
VMMCall _HeapAllocate,<eax,HEAPZEROINIT>
mov pMessage,eax
pop eax
VMMCall _lstrcpyn,<pMessage,[edi+4],eax>
mov edi,pTitle
mov ecx,pMessage
mov eax,MB_OK
VMMCall Get_Sys_VM_Handle
VxDCall SHELL_sysmodal_Message ;我们期望的消息显示?
VMMCall _HeapFree,pTitle,0
VMMCall _HeapFree,pMessage,0
xor eax,eax
.endif
ret
EndProc OnDeviceIoControl
VxD_PAGEABLE_CODE_ENDS

问题:为什么DeviceIoControl()函数始终返回0?为什么?我如何确定,我的VxD是否真的收到w32_DeviceIoControl消息,sice如何拦截此消息,
谢谢您的回复!

_STLer (ax_0007@163.net)
...全文
100 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
TigerHu 2001-11-20
  • 打赏
  • 举报
回复
俺也来听听!
asm386 2001-11-20
  • 打赏
  • 举报
回复
在用 SOFTICE 加载 VXD 时,指定了源文件。则 用 BPX 函数名
如: BPX OnDeviceIoControl

当应用程序调用 VXD 的时候, SOFTICE 会自动中断到源代码中函数的位置。


asm386 2001-11-20
  • 打赏
  • 举报
回复
兄弟,DeviceIoControl 中用的 IOCTL control code 不是随便定义的。
操作系统有定义他的规则。并且 0-2047 是微软保留的,用户不可以使用。
当然如果你想使用微软的未公开的功能除外。2048-4095 才是留给用户使
用的。你定义的 IO 控制代码应该从 2048 开始。

原则上 IO 控制代码要用下面的宏生成。
#define CTL_CODE( DeviceType, Function, Method, Access ) ( ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method)
ky640 2001-11-20
  • 打赏
  • 举报
回复
在VXD里的函数处理出,随便给传入的内存地址拷贝一点什么,不是就可在DeviceIoControl执行后看调没调了嘛。
用softice我觉得自己还是很熟的,但一直没有找到调试vxd的办法,我一直都采用上面的办法来跟踪,只是有点烦
dog_dog 2001-11-20
  • 打赏
  • 举报
回复
push
xtky_limi 2001-11-20
  • 打赏
  • 举报
回复
占个位子旁听!!
push

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧