2014-01-29 56 views
1

我正在編寫一個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手柄和找到實際設備。

回答

2

使用NtQueryObject()來確定句柄表示的對象的類型和名稱。您可能還需要使用QueryDosDevice()將硬件設備名稱解析爲本地文件系統路徑。看到這篇文章,讓你開始:

HOWTO:枚舉處理

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

一旦你知道的設備類型,你可以 然後使用特定類型的API,如GetVolumeInformationByHandle()GetFileInformationByHandleEx(),等拿到更詳細的信息。