Die Anwendungsprogrammierschnittstelle von Windows-Betriebssystemen wird durch eine Reihe von Funktionen repräsentiert. Beim Aufruf können verschiedene Objekte (Dateien, Prozesse, Threads, Synchronisationsobjekte usw.) erstellt werden. Um einen ausreichend abstrakten und einheitlichen Zugang zu diesen Objekten zu ermöglichen, erfolgt ihre Identifizierung durch Deskriptoren - "unpersönliche" Zahlenwerte.
Notwendig
- - ein Übersetzer aus einer Programmiersprache, der die Verwendung der Windows-API ermöglicht;
- - möglicherweise Windows-Plattform-SDK.
Anweisungen
Schritt 1
Holen Sie sich Fenstergriffe. Es gibt viele Möglichkeiten, dies zu tun. Die genaue Methode hängt vom Endziel ab.
Verwenden Sie die APIs CreateWindow oder CreateWindowEx, um ein Fenster zu erstellen. Sie geben ein Handle bei Erfolg und NULL bei einem Fehler zurück.
Suchen Sie mithilfe der Funktionen FindWindow bzw. FindWindowEx anhand verschiedener Parameter nach Fenstern der obersten Ebene und untergeordneten Fenstern. Bei erfolgreicher Suche wird das Fensterhandle abgerufen.
Aufzählen von Fenstern mit den Funktionen EnumWindows, EnumChildWindows, EnumThreadWindows. Die Handles der gefundenen Fenster werden als Parameter an die Callback-Funktion übergeben.
Suchen Sie den Griff des Fensters an einer bestimmten Position auf dem Bildschirm. Rufen Sie eine der Funktionen auf: WindowFromPoint, ChildWindowFromPoint oder ChildWindowFromPointEx.
Schritt 2
Holen Sie sich Prozess-Handles. Erstellen Sie einen neuen Prozess, indem Sie die API-Funktionen CreateProcess, CreateProcessAsUser, CreateProcessWithTokenW oder CreateProcessWithLogonW aufrufen. Sie alle geben im Feld hProcess der Struktur PROCESS_INFORMATION ein Handle an den neuen Prozess zurück, auf das ihnen als letzter Parameter der Zeiger übergeben werden soll.
Suchen Sie das Handle des Prozesses anhand seines bekannten Bezeichners. Verwenden Sie den OpenProcess-Aufruf. Die IDs aller laufenden Prozesse können beispielsweise mit den Funktionen CreateToolhelp32Snapshot, Process32First und Process32Next der Tool Help Library abgerufen werden.
Rufen Sie das Pseudo-Handle des aktuellen Prozesses mit der Funktion GetCurrentProcess ab.
Schritt 3
Holen Sie sich Beschreibungen von Threads. Die Funktionen CreateThread und CreateRemoteThread erstellen Threads in ihrem eigenen bzw. im Prozess einer anderen Person und geben ihre Handles zurück. Sie können einen vorhandenen Thread mit seinem Bezeichner öffnen und das entsprechende Handle mit der OpenThread-Funktion abrufen. Das Pseudo-Handle des aktuellen Flusses wird zurückgegeben, wenn GetCurrentThread aufgerufen wird.
Schritt 4
Deskriptoren für Dateien, Verzeichnisse, physische Festplatten, Festplattenvolumes, Konsolen, Kommunikationsressourcen (E/A-Ports), Mail-Slots und Named Pipes können durch Aufrufen einer einzigen Funktion namens CreateFile abgerufen werden.
Schritt 5
Datei-zu-Speicher-Zuordnungsobjektdeskriptoren werden durch Aufrufe von CreateFileMapping und OpenFileMapping zurückgegeben.
Schritt 6
Die Funktionen CreateMutex, CreateSemaphore und CreateEvent erstellen und die Funktionen OpenMutex, OpenSemaphore und OpenEvent öffnen vorhandene Synchronisationsobjekte (Mutexe, Semaphoren und Ereignisse). Sie alle geben Deskriptoren zurück.
Schritt 7
Alle GDI-Objekte (wie Gerätekontexte, Schriftarten, Pinsel, Bleistifte, hardwareabhängige und unabhängige Bitmaps, DIB-Abschnitte usw.) werden durch ihre Deskriptoren manipuliert. Die Funktionen zum Erstellen von GDI-Objekten sind zahlreich und sollten im MSDN-Abschnitt für Informationen dazu konsultiert werden.
Schritt 8
Ein in einem Prozess erhaltener Deskriptor kann in der Regel nicht in einem anderen verwendet werden. In einigen Fällen ist es jedoch möglich, einen doppelten Deskriptor zu erhalten, der dem primären Objekt entspricht. Rufen Sie die DuplicateHandle-API auf, um das Handle zu duplizieren. Dies kann beispielsweise verwendet werden, um unbenannte Synchronisationsobjekte oder Kanäle zwischen mehreren Prozessen zu teilen.