我们可以从Device句柄中获取Device对象的详细信息/名称吗?

时间:2014-01-29 05:21:09

标签: c++ winapi native

我正在编写一个DeviceIoControl API钩子应用程序,它将跟踪目标应用程序所做的所有DeviceIoControl()调用。以下是DeviceIoControl的签名,以便于参考:

BOOL WINAPI DeviceIoControl( In HANDLE hDevice, In DWORD dwIoControlCode, _In_opt_ LPVOID lpInBuffer, In DWORD nInBufferSize, _Out_opt_ LPVOID lpOutBuffer, In DWORD nOutBufferSize, _Out_opt_ LPDWORD lpBytesReturned, _Inout_opt_ LPOVERLAPPED lpOverlapped );

我的问题是,我如何弄清楚这个Ioctl被定位到哪个设备,即如何反转hDevice HANDLE并找到实际的设备。

1 个答案:

答案 0 :(得分:2)

使用NtQueryObject()确定句柄所代表的对象的类型和名称。您可能还需要使用QueryDosDevice()将硬件设备名称解析为本地文件系统路径。请参阅此文章以帮助您入门:

HOWTO:枚举句柄

http://forum.sysinternals.com/howto-enumerate-handles_topic18892.html

了解设备类型后,即可 然后使用特定于类型的API,如GetVolumeInformationByHandle()GetFileInformationByHandleEx()等,以获取更详细的信息。