2010-10-13 38 views
1

對於我的生活,我無法弄清楚如何解決我的設備驅動程序中聲明的NTQueryKey值。我尋找設備驅動程序論壇,但沒有找到一個。如何在內核模式下鏈接到NTQueryKey

有人能指點我到正確的地方嗎? OSR對如何鏈接到NTQueryKey等愚蠢的問題反應不是很敏感。

這裏是我的原型:

NTSYSAPI NTSTATUS NTAPI NtQueryKey(HANDLE, KEY_INFORMATION_CLASS, PVOID, ULONG, ULONG *); 

,它編譯罰款,但鏈接不喜歡它。

感謝

+0

你可以發佈一個ZwQueryKey調用失敗的代碼示例嗎? – 2010-10-14 02:27:01

回答

0

在內核模式下,您鏈接到度Zw ....同等功能。 See Here。 NT ....函數從用戶模式調用(例如,Win32子系統將調用NT ...函數)。

+0

我想使用ZwQueryKey,但我得到一個STATUS_INVALID_HANDLE。我想要做的是在PostCreateOpenKeyEx例程中獲取Windows 2003計算機上的密鑰名稱。 – Iunknown 2010-10-14 02:17:59

+0

爲了完整起見,關於Nt和Zw變體之間的區別的完整討論在這裏:http://www.osronline.com/article.cfm?id=257。 – snoone 2010-10-22 14:40:00

2

不應從內核模式調用NtXXXX函數。改用ZwXXXX函數。在你的情況下,你想要ZwQueryKey。它具有與NtQueryKey相同的簽名,但它在x86上執行與內核模式交互所需的操作,它由ntoskrnl.exe而不是ntdll.dll提供。

+0

我遇到的問題是我試圖打開用戶模式鍵。首先,我嘗試使用ZwQueryKey,並得到錯誤Invalid Handle,我想這意味着我需要使用NTQueryKey。 – Iunknown 2010-10-14 02:14:34

+0

@kunknown:你是什麼意思的用戶模式鍵?就其工作原理而言,ZwQueryKey與NtQueryKey的功能完全相同。唯一的區別是NtQueryKey做了一堆系統調用廢話。 – 2010-10-14 02:15:49

+0

在OSR的幫助下,我想我發現了這個問題。我誤解了一個「指向註冊表鍵對象的指針」不是指向句柄的指針。立即嘗試ObOpenObjectByPointer。 – Iunknown 2010-10-14 16:15:32

相關問題