如何向Ring3层发消息?

id_se 2000-04-13 11:21:00
使用VToolsD写VxD时,在VxD中如何使用PostMessage向Ring3层的应用程序发送消息?
先行谢过!
...全文
204 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
id_se 2000-04-14
  • 打赏
  • 举报
回复
非常感谢,有问题以后在请教。
JJONY 2000-04-14
  • 打赏
  • 举报
回复
hWnd可以用DeviceIoControl函数来传递到vxd中,

Ring 3程序:
...
HWND hWnd = ::AfxMainWnd()->GetSafeHwnd();
DeviceIoControl(m_hVxD,VXD_SET_HWND,&hWnd,sizeof(HANDLE),NULL,0,NULL,NULL,0);


VxD中:
DWORD XDevice::OnW32DeviceIoControl(PIOCTLPARAMS pDIOCParams)
{

switch(pDIOParams->dioc_IOCtlCode)
{
case VXD_SET_HWND:
memcpy(&g_hWnd,pDIOCParams->dioc_InBuf,sizeof(HANDLE));
break;
......
}
}
OK?清楚了吧。
id_se 2000-04-14
  • 打赏
  • 举报
回复
应用程序的hWnd如何传给VxD?
而且,用MFC时得到的是HWND类型的m_hWnd,它是一个结构而非16bit的窗口句柄。
我该怎么做?
JJONY 2000-04-14
  • 打赏
  • 举报
回复
可以,不是你要注意运行你的程序时所处于哪一个VM,是不是你程序所在的VM里。
id_se 2000-04-13
  • 打赏
  • 举报
回复
高手,请问这个调用是不是哪个类的MEMBER FUNCTION,或者调用时是不是有什么要求?
还是可以任意使用,没有限制?
另外,应用程序的hWnd如何传给VxD?
谢谢!
土豆 2000-04-13
  • 打赏
  • 举报
回复
什么是Ring3?
JJONY 2000-04-13
  • 打赏
  • 举报
回复
哈哈,这问题太简单了:
SHELL_PostMessage(g_hWnd, (SPM_UM_DoNotWaitForCrit<<16 and g_uMouseMSG),
(WORD)state,(DWORD)(wDeltaY<<16 and wDeltaX),NULL,0);
g_hWnd为Ring 3环的窗口句柄,g_uMouseMSG为消息值(如果消息是自定义的话,要在Ring 3的程序中给登记上)。state是WPARAM,为16位,,(DWORD)(wDeltaY<<16 and wDeltaX)为32位的LPARAM,至于NULL,0就看看帮助啦,一般用不上。
这一句是向Ring 3程序发送鼠标数据。

6,847

社区成员

发帖
与我相关
我的任务
社区描述
Windows 2016/2012/2008/2003/2000/NT
社区管理员
  • Windows Server社区
  • qishine
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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