Функция GetWsChanges (psapi.h)
Извлекает сведения о страницах, добавленных в рабочий набор указанного процесса с момента последнего вызова этой функции или функции InitializeProcessForWsWatch .
Чтобы получить расширенные сведения, используйте функцию GetWsChangesEx .
Синтаксис
BOOL GetWsChanges(
[in] HANDLE hProcess,
[out] PPSAPI_WS_WATCH_INFORMATION lpWatchInfo,
[in] DWORD cb
);
Параметры
[in] hProcess
Дескриптор процесса. Дескриптор должен иметь право доступа PROCESS_QUERY_INFORMATION . Дополнительные сведения см. в разделе Обработка прав на безопасность и доступ.
[out] lpWatchInfo
Указатель на буфер, выделенный пользователем, который получает массив PSAPI_WS_WATCH_INFORMATION структур. Массив завершается структурой, член FaultingPc которой имеет значение NULL.
[in] cb
Размер буфера lpWatchInfo в байтах.
Возвращаемое значение
Если функция выполняется успешно, возвращается ненулевое значение.
Если функция выполняется неудачно, возвращается нулевое значение. Дополнительные сведения об ошибке можно получить, вызвав GetLastError.
GetLastError возвращает ERROR_INSUFFICIENT_BUFFER , если буфер lpWatchInfo недостаточно велик, чтобы содержать все записи изменений рабочего набора; буфер возвращается пустым. Перераспределять больший блок памяти для буфера и вызывать еще раз.
Комментарии
Операционная система использует один буфер для каждого процесса для хранения записей изменений рабочего набора. Если несколько приложений (или несколько потоков в одном приложении) вызывают эту функцию с одним дескриптором процесса, ни одно приложение не будет иметь полного учета изменений рабочего набора, так как каждый вызов очищает буфер.
Операционная система не записывает новые записи изменений во время обработки запроса (и очистки буфера). Функция задает код ошибки NO_MORE_ENTRIES , если при обработке другого запроса получен параллельный запрос.
Если буфер заполнится, новые записи не добавляются в буфер, пока не будет вызвана эта функция или функция InitializeProcessForWsWatch . Этот метод следует вызывать с достаточной частотой, чтобы предотвратить возможную потерю данных. Если записи теряются, массив завершается структурой, член FaultingPc которой имеет значение NULL и члену FaultingVa присваивается количество записей, которые были потеряны.
Windows Server 2003 и Windows XP: Если записи теряются, массив завершается структурой, член FaultingPc которой имеет значение NULL и член FaultingVa которого равен 1.
Начиная с Windows 7 и Windows Server 2008 R2, Psapi.h устанавливает номера версий для функций PSAPI. Номер версии PSAPI влияет на имя, используемое для вызова функции, и библиотеку, которую должна загрузить программа.
Если PSAPI_VERSION имеет значение 2 или больше, эта функция определяется как K32GetWsChanges в Psapi.h и экспортируется в Kernel32.lib и Kernel32.dll. Если PSAPI_VERSION равно 1, эта функция определяется как GetWsChanges в Psapi.h и экспортируется в Psapi.lib и Psapi.dll в качестве оболочки, вызывающей K32GetWsChanges.
Программы, которые должны выполняться в более ранних версиях Windows, а также Windows 7 и более поздних версиях, всегда должны вызывать эту функцию как GetWsChanges. Чтобы обеспечить правильное разрешение символов, добавьте Psapi.lib в макрос TARGETLIBS и скомпилируйте программу с параметром -DPSAPI_VERSION=1. Чтобы использовать динамическое связывание во время выполнения, загрузите Psapi.dll.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows XP [только классические приложения] |
Минимальная версия сервера | Windows Server 2003 [только классические приложения] |
Целевая платформа | Windows |
Header | psapi.h |
Библиотека | Kernel32.lib в Windows 7 и Windows Server 2008 R2; Psapi.lib (если PSAPI_VERSION=1) в Windows 7 и Windows Server 2008 R2; Psapi.lib в Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP |
DLL | Kernel32.dll в Windows 7 и Windows Server 2008 R2; Psapi.dll (если PSAPI_VERSION=1) в Windows 7 и Windows Server 2008 R2; Psapi.dll в Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP |