2010-10-13 6 views
1

Pour la vie de moi, je ne peux pas comprendre comment résoudre la valeur NTQueryKey déclarée dans mon pilote de périphérique. J'ai cherché un forum de pilote de périphérique, mais je n'en ai pas trouvé.Comment lier à NTQueryKey en mode noyau

Quelqu'un peut-il me diriger au bon endroit? OSR n'est pas très réactif avec des questions stupides comme comment lier à NTQueryKey.

Voici mon prototype:

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

et il compile très bien, mais l'éditeur de liens ne l'aime pas.

Merci

+0

Pourriez-vous publier un exemple de code qui échoue lorsque ZwQueryKey est appelée? –

Répondre

0

En mode noyau lien vers vous ZW .... des fonctions équivalentes. See Here. Les fonctions NT .... sont appelées en mode utilisateur (par exemple, le sous-système Win32 appelle les fonctions NT ...).

+0

J'essaie d'utiliser ZwQueryKey mais j'obtiens un STATUS_INVALID_HANDLE. Tout ce que j'essaie de faire est d'obtenir le nom de la clé sur une machine Windows 2003 dans une routine PostCreateOpenKeyEx. – Iunknown

+0

Pour être complet, une discussion complète des différences entre les variantes Nt et Zw est ici: http://www.osronline.com/article.cfm?id=257. – snoone

2

Les fonctions NtXXXX ne doivent pas être appelées depuis le mode noyau. Utilisez plutôt les fonctions ZwXXXX. Dans votre cas, vous voulez ZwQueryKey. Il a la même signature que NtQueryKey, mais il effectue des actions sur le x86 requis pour parler avec le mode noyau, et il est fourni par ntoskrnl.exe plutôt que par ntdll.dll.

+0

Le problème que j'ai, c'est que j'essaie d'ouvrir une clé de mode utilisateur. D'abord j'essaye ZwQueryKey et j'obtiens l'erreur Invalid Handle, que j'ai supposé signifié que j'ai besoin d'employer NTQueryKey. – Iunknown

+0

@kunknown: Que voulez-vous dire par clé de mode utilisateur? ZwQueryKey est exactement la même fonction que NtQueryKey en ce qui concerne son fonctionnement. La seule différence est que NtQueryKey fait un tas de conneries syscall. –

+0

Avec un peu d'aide d'OSR, je pense avoir trouvé le problème. J'ai mal compris le "un pointeur sur l'objet clé de registre" n'est pas un pointeur vers un handle. Essayer ObOpenObjectByPointer maintenant. – Iunknown

Questions connexes