J'ai une variable de type HANDLE. la première variable est un processus HANDLE (avec le nom hProcess) qui n'a pas droit d'accès PROCESS_QUERY_INFORMATION. deuxième variable est un processus HANDLE (avec le nom hwndProcess) aussi que j'ai ouvert via la fonction OpenProcess et avoir droit d'accès PROCESS_QUERY_INFORMATION. Je suis sûr que les deux processus est un. mais quand je compare comme ci-dessous return false; if (hProcess == hwndProcess) {faire quelque chose} comment dois-je faire?Comment comparer Deux variables de type HANDLE
Répondre
Il n'y a pas de manière explicite de vérifier si deux poignées se réfèrent au même processus. Le seul moyen serait d'interroger les informations de processus et de vérifier que, par ex. en utilisant GetProcessId
sur chaque handle pour vérifier les ID de processus.
Si vous ne disposez pas des droits d'accès nécessaires pour appeler les fonctions de requête souhaitées, vous pouvez essayer d'appeler le DuplicateHandle
pour obtenir un nouveau handle avec plus de droits d'accès. Cependant, si cela échoue, vous n'avez aucun moyen de dire si les poignées sont au même processus ou non.
hProcess ne doit pas contenir le ProcessHandle du Processus qui sera fermé. Il peut et sera la plupart du temps être NULL. Je fais quelque chose de similaire pour obtenir les PID des processus terminés.
if((hProcess == NULL) || (hProcess == GetCurrentProcess())){
pid = GetCurrentProcessId();
} else {
pid = ProcessHandleToId(hProcess); }
Êtes-vous sûr, c'est un problème de droits d'accès et votre fonction n'échoue pas, car le handle est NULL?
- 1. Comment puis-je comparer deux variables/colonnes de type NTEXT
- 2. Comment comparer deux requêtes?
- 3. Comment comparer deux dates
- 4. Comment comparer à deux objet sans connaître leur type réel
- 5. Comparer les valeurs de deux nombres génériques
- 6. Comment comparer 2 objets de type générique
- 7. comment comparer deux champs de texte riche
- 8. Comment comparer deux référentiels git?
- 9. comment comparer les deux date
- 10. Comment comparer deux schémas XML
- 11. comment comparer deux tableaux d'objets
- 12. Comment comparer deux listes struct?
- 13. Comment comparer deux instances AssemblyName?
- 14. Comment comparer deux fois en PHP
- 15. Comment comparer deux bases de données?
- 16. override type choisir ou comparer deux flotteurs dans php
- 17. iphone - comparer deux fois
- 18. Comparer deux valeurs
- 19. comparer deux feuilles Excel
- 20. Comparer deux objets Doctrine_Record
- 21. Comparer deux NSDates
- 22. Comparer deux fichiers audio
- 23. Comparer deux fois
- 24. problème de comparer deux tableaux
- 25. Comparer deux collections
- 26. Comparer deux données
- 27. regex comparer deux nombres
- 28. Type Oracle comparer
- 29. Comment comparer deux horodatages en C?
- 30. SQL Server: comment comparer deux tables
La syntaxe de DuplicateHandle est ci-dessous. BOOL WINAPI DuplicateHandle ( __in POIGNEE hSourceProcessHandle, __in POIGNEE hSourceHandle, __in POIGNEE hTargetProcessHandle, __out LPHANDLE lpTargetHandle, __in DWORD dwDesiredAccess, __in BOOL bInheritHandle, __in DWORD dwOptions); dwOptions peut obtenir l'une des deux valeurs suivantes (DUPLICATE_CLOSE_SOURCE ou DUPLICATE_SAME_ACCESS) ou une combinaison de celles-ci. Maintenant, je peux joindre ces valeurs à l'aide de la balise PROCESS_QUERY_INFORMATION. – Phoenix
Définissez dwOptions sur 0 et définissez dwDesiredAccess sur les droits d'accès requis (par exemple, PROCESS_QUERY_INFORMATION et tout ce dont vous avez besoin). –