用于 DeviceIOControl 的 SetWindowsHookEx,要使用啥 hookid?

Posted

技术标签:

【中文标题】用于 DeviceIOControl 的 SetWindowsHookEx,要使用啥 hookid?【英文标题】:SetWindowsHookEx for DeviceIOControl, what hookid to be used?用于 DeviceIOControl 的 SetWindowsHookEx,要使用什么 hookid? 【发布时间】:2012-09-05 09:40:16 【问题描述】:
HHOOK WINAPI SetWindowsHookEx(
  _In_  int idHook,
  _In_  HOOKPROC lpfn,
  _In_  HINSTANCE hMod,
  _In_  DWORD dwThreadId
);

在 MSDN 列出的可用 idHook 值中,有:

WH_CALLWNDPROC WH_CALLWNDPROCRET WH_CBT WH_DEBUG WH_FOREGROUNDIDLE WH_GETMESSAGE WH_JOURNALPLAYBACK WH_JOURNALRECORD WH_KEYBOARD WH_KEYBOARD_LL WH_MOUSE WH_MOUSE_LL WH_MSGFILTER WH_SHELL WH_SYSMSGFILTER

那么,钩子 DeviceIOControl 函数(用于控制台应用程序)应该使用什么 idHook?或者我可以使用其他的钩子方法吗?

【问题讨论】:

【参考方案1】:

DeviceIOControl 用于与驱动程序交互,在用户模式下,windows 提供的任何钩子都不允许钩子驱动程序交互,相反,您最好使用 windows DDK/WDK/Windows SDK 编写过滤器(取决于什么 windows您的目标版本)。

【讨论】:

嗯,我从几个人那里听说这是可能的。例如:forum.madshi.net/viewtopic.php?p=14942 @Reddy:那是一种不同类型的挂钩,它不仅具有侵入性,而且不受 windows 官方支持(我会导致 AV 问题等),但如果你想要那种东西,那么链接就是你的答案...

以上是关于用于 DeviceIOControl 的 SetWindowsHookEx,要使用啥 hookid?的主要内容,如果未能解决你的问题,请参考以下文章

Winpcap 和 DeviceIoControl - Win7 上的错误代码 1

使用 DeviceIoControl 都有哪些好的策略?

带有输入无符号字符缓冲区 C++ 的 DeviceIoControl

释放 DeviceIoControl 分配的内存

Pinvoke DeviceIoControl 参数

如何异步调用 DeviceIOControl 代码?