GetWsChangesEx-Funktion (psapi.h)
Ruft erweiterte Informationen zu den Seiten ab, die dem Arbeitssatz des angegebenen Prozesses seit dem letzten Aufruf dieser Funktion oder der InitializeProcessForWsWatch-Funktion hinzugefügt wurden.
Syntax
BOOL GetWsChangesEx(
[in] HANDLE hProcess,
[out] PPSAPI_WS_WATCH_INFORMATION_EX lpWatchInfoEx,
[in, out] PDWORD cb
);
Parameter
[in] hProcess
Ein Handle für den Prozess. Das Handle muss über das zugriffsrecht PROCESS_QUERY_INFORMATION verfügen. Weitere Informationen finden Sie unter Prozesssicherheit und Zugriffsrechte.
[out] lpWatchInfoEx
Ein Zeiger auf einen vom Benutzer zugewiesenen Puffer, der ein Array von empfängt.
PSAPI_WS_WATCH_INFORMATION_EX Strukturen. Das Array wird mit einer Struktur beendet, deren FaultingPc-Member NULL ist.
[in, out] cb
Die Größe des lpWatchInfoEx-Puffers in Bytes.
Rückgabewert
Wenn die Funktion erfolgreich ist, ist der Rückgabewert ungleich Null.
Wenn die Funktion fehlerhaft ist, ist der Rückgabewert null. Um erweiterte Fehlerinformationen zu erhalten, rufen Sie die GetLastError-Funktion auf.
Die GetLastError-Funktion gibt ERROR_INSUFFICIENT_BUFFER zurück, wenn der puffer lpWatchInfoEx nicht groß genug ist, um alle Änderungsdatensätze des Arbeitssatzes zu enthalten. Der Puffer wird leer zurückgegeben. Stellen Sie einen größeren Speicherblock für den Puffer neu zu, und rufen Sie erneut auf.
Hinweise
Das Betriebssystem verwendet einen Puffer pro Prozess, um Änderungsdatensätze für Arbeitssätze zu verwalten. Wenn mehr als eine Anwendung (oder mehrere Threads in derselben Anwendung) diese Funktion mit demselben Prozesshandle aufrufen, verfügt keine Anwendung über eine vollständige Berücksichtigung der Arbeitssatzänderungen, da jeder Aufruf den Puffer leert.
Das Betriebssystem zeichnet keine neuen Änderungsdatensätze auf, während es die Abfrage verarbeitet (und den Puffer leert). Diese Funktion legt den Fehlercode auf NO_MORE_ENTRIES fest, wenn eine gleichzeitige Abfrage empfangen wird, während eine andere Abfrage verarbeitet wird.
Wenn der Puffer voll ist, werden dem Puffer keine neuen Datensätze hinzugefügt, bis diese Funktion oder die InitializeProcessForWsWatch-Funktion aufgerufen wird. Sie sollten GetWsChangesEx mit ausreichender Häufigkeit aufrufen, um mögliche Datenverluste zu verhindern. Wenn Datensätze verloren gehen, wird das Array mit einer Struktur beendet, deren FaultingPc-Member NULL ist und deren FaultingVa-Member auf die Anzahl der verlorenen Datensätze festgelegt ist.
Ab Windows 7 und Windows Server 2008 R2 erstellt Psapi.h Versionsnummern für die PSAPI-Funktionen. Die PSAPI-Versionsnummer wirkt sich auf den Namen aus, der zum Aufrufen der Funktion und der Bibliothek verwendet wird, die ein Programm laden muss.
Wenn PSAPI_VERSION 2 oder höher ist, wird diese Funktion in Psapi.h als K32GetWsChangesEx definiert und in Kernel32.lib und Kernel32.dll exportiert. Wenn PSAPI_VERSION 1 ist, wird diese Funktion in Psapi.h als GetWsChangesEx definiert und in Psapi.lib exportiert und Psapi.dll als Wrapper, der K32GetWsChangesEx aufruft.
Programme, die unter früheren Versionen von Windows sowie Windows 7 und höheren Versionen ausgeführt werden müssen, sollten diese Funktion immer als GetWsChangesEx aufrufen. Um die korrekte Auflösung von Symbolen sicherzustellen, fügen Sie Dem TARGETLIBS-Makro Psapi.lib hinzu, und kompilieren Sie das Programm mit -DPSAPI_VERSION=1. Laden Sie Psapi.dll, um die dynamische Laufzeitverknüpfung zu verwenden.
Anforderungen
Anforderung | Wert |
---|---|
Unterstützte Mindestversion (Client) | Windows Vista [nur Desktop-Apps] |
Unterstützte Mindestversion (Server) | Windows Server 2008 [nur Desktop-Apps] |
Zielplattform | Windows |
Kopfzeile | psapi.h |
Bibliothek | Kernel32.lib unter Windows 7 und Windows Server 2008 R2; Psapi.lib (wenn PSAPI_VERSION=1) unter Windows 7 und Windows Server 2008 R2; Psapi.lib unter Windows Server 2008, Windows Vista, Windows Server 2003 und Windows XP |
DLL | Kernel32.dll unter Windows 7 und Windows Server 2008 R2; Psapi.dll (wenn PSAPI_VERSION=1) unter Windows 7 und Windows Server 2008 R2; Psapi.dll unter Windows Server 2008, Windows Vista, Windows Server 2003 und Windows XP |