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

Can we get the Device object detail / name from a Device handle

本文关键字:详细信息 对象 句柄 我们 获取      更新时间:2023-10-16

我正在编写一个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 );

我的问题是,我如何弄清楚该设备的目标是哪个设备,即如何反转HDEVICE手柄并找到实际设备。

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

howto:枚举手柄

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

一旦知道设备类型,就可以然后使用特定于类型的API,例如GetVolumeInformationByHandle()GetFileInformationByHandleEx()等来获取更多详细信息。