Comment Obtenir Un Descripteur

Table des matières:

Comment Obtenir Un Descripteur
Comment Obtenir Un Descripteur

Vidéo: Comment Obtenir Un Descripteur

Vidéo: Comment Obtenir Un Descripteur
Vidéo: PubMed - Recherche avancée avec descripteurs MeSH 2024, Novembre
Anonim

L'interface de programmation d'applications des systèmes d'exploitation Windows est représentée par un ensemble de fonctions. Lors de leur appel, différents objets (fichiers, processus, threads, objets de synchronisation, etc.) peuvent être créés. Pour fournir un accès suffisamment abstrait et unifié à ces objets, leur identification est effectuée à l'aide de descripteurs - valeurs numériques "impersonnelles".

Comment obtenir un descripteur
Comment obtenir un descripteur

Nécessaire

  • - un traducteur d'un langage de programmation qui permet l'utilisation de l'API Windows;
  • - éventuellement Windows Platform SDK.

Instructions

Étape 1

Obtenez des poignées de fenêtre. Il existe de nombreuses façons de le faire. La méthode exacte dépend de l'objectif final.

Utilisez les API CreateWindow ou CreateWindowEx pour créer une fenêtre. Ils renvoient un handle en cas de succès et NULL en cas d'échec.

Recherchez les fenêtres de niveau supérieur et les fenêtres enfants par divers paramètres à l'aide des fonctions FindWindow et FindWindowEx, respectivement. En cas de recherche réussie, le handle de fenêtre sera obtenu.

Énumérez les fenêtres avec les fonctions EnumWindows, EnumChildWindows, EnumThreadWindows. Les handles des fenêtres trouvées seront passés en paramètre à la fonction de rappel.

Trouvez la poignée de la fenêtre située à une position spécifique sur l'écran. Appelez l'une des fonctions: WindowFromPoint, ChildWindowFromPoint ou ChildWindowFromPointEx.

Étape 2

Obtenez des descripteurs de processus. Créez un nouveau processus en appelant les fonctions API CreateProcess, CreateProcessAsUser, CreateProcessWithTokenW ou CreateProcessWithLogonW. Ils renvoient tous un handle vers le nouveau processus dans le champ hProcess de la structure PROCESS_INFORMATION, dont le pointeur doit leur être passé en dernier paramètre.

Trouvez le handle du processus par son identifiant connu. Utilisez l'appel OpenProcess. Les ID de tous les processus en cours d'exécution peuvent être obtenus, par exemple, à l'aide des fonctions CreateToolhelp32Snapshot, Process32First et Process32Next de la bibliothèque Tool Help.

Récupérez le pseudo handle du processus en cours à l'aide de la fonction GetCurrentProcess.

Étape 3

Obtenez des descripteurs de threads. Les fonctions CreateThread et CreateRemoteThread créent respectivement des threads dans leur propre processus et dans celui de quelqu'un d'autre, en retournant leurs descripteurs. Vous pouvez ouvrir un thread existant à l'aide de son identifiant et obtenir le handle correspondant à l'aide de la fonction OpenThread. Le pseudo-handle du flux actuel est renvoyé lorsque GetCurrentThread est appelé.

Étape 4

Les descripteurs de fichiers, de répertoires, de disques physiques, de volumes de disques, de consoles, de ressources de communication (ports d'E/S), de slots de messagerie et de canaux nommés peuvent être obtenus en appelant une seule fonction, CreateFile.

Étape 5

Les descripteurs d'objet de mappage fichier-mémoire sont renvoyés par des appels à CreateFileMapping et OpenFileMapping.

Étape 6

Les fonctions CreateMutex, CreateSemaphore et CreateEvent créent, et les fonctions OpenMutex, OpenSemaphore et OpenEvent ouvrent des objets de synchronisation existants (mutex, sémaphores et événements). Ils renvoient tous des descripteurs.

Étape 7

Tous les objets GDI (tels que les contextes de périphérique, les polices, les pinceaux, les crayons, les bitmaps dépendants et indépendants du matériel, les sections DIB, etc.) sont manipulés via leurs descripteurs. Les fonctions de création d'objets GDI sont nombreuses et doivent être consultées sur la section MSDN pour des informations les concernant.

Étape 8

Un descripteur obtenu dans un processus, en règle générale, ne peut pas être utilisé dans un autre. Cependant, dans certains cas, il est possible d'obtenir un descripteur dupliqué correspondant à l'objet primaire. Appelez l'API DuplicateHandle pour dupliquer le handle. Cela peut être utilisé, par exemple, pour partager des objets ou des canaux de synchronisation sans nom entre plusieurs processus.

Conseillé: