Функция GetThreadWaitChain (wct.h)
Извлекает цепочку ожидания для указанного потока.
Синтаксис
BOOL GetThreadWaitChain(
[in] HWCT WctHandle,
[in, optional] DWORD_PTR Context,
[in] DWORD Flags,
[in] DWORD ThreadId,
[in, out] LPDWORD NodeCount,
[out] PWAITCHAIN_NODE_INFO NodeInfoArray,
[out] LPBOOL IsCycle
);
Параметры
[in] WctHandle
Дескриптор сеанса WCT, созданного функцией OpenThreadWaitChainSession .
[in, optional] Context
Указатель на определяемую приложением контекстную структуру, передаваемую в функцию обратного вызова для асинхронного сеанса.
[in] Flags
Параметры получения цепочки ожидания. Этот параметр может иметь одно из следующих значений.
[in] ThreadId
Идентификатор потока.
[in, out] NodeCount
На входных данных число от 1 до WCT_MAX_NODE_COUNT, указывающее количество узлов в цепочке ожидания. При возврате — количество извлеченных узлов. Если массив не может содержать все узлы цепочки ожидания, функция завершается сбоем, GetLastError возвращает ERROR_MORE_DATA, и этот параметр получает количество элементов массива, необходимое для размещения всех узлов.
Для асинхронных сеансов проверка значение, передаваемое функции обратного вызова. Не освобождайте переменную, пока не будет возвращена функция обратного вызова.
[out] NodeInfoArray
Массив WAITCHAIN_NODE_INFO структур, получающих цепочку ожидания.
Для асинхронных сеансов проверка значение, передаваемое функции обратного вызова. Не освобождайте массив, пока не будет возвращена функция обратного вызова.
[out] IsCycle
Если функция обнаруживает взаимоблокировку, эта переменная имеет значение TRUE; В противном случае устанавливается значение FALSE.
Для асинхронных сеансов проверка значение, передаваемое функции обратного вызова. Не освобождайте переменную, пока не будет возвращена функция обратного вызова.
Возвращаемое значение
Если функция выполняется успешно, возвращается ненулевое значение.
Если функция выполняется неудачно, возвращается нулевое значение. Чтобы получить расширенные сведения об ошибке, вызовите Метод GetLastError.
Код возврата | Описание |
---|---|
|
У вызывающего объекта не было достаточных привилегий для открытия целевого потока. |
|
Один из входных параметров недопустим. |
|
Сеанс WCT был открыт в асинхронном режиме. Результаты будут возвращены с помощью функции обратного вызова WaitChainCallback . |
|
Буфер NodeInfoArray недостаточно велик, чтобы содержать все узлы в цепочке ожидания. Параметр NodeCount содержит количество узлов в цепочке. Возвращаемая цепочка ожидания по-прежнему действительна. |
|
Операционная система не предоставляет эту службу. |
|
Не удалось найти указанный поток. |
|
Количество узлов превышает WCT_MAX_NODE_COUNT. Возвращаемая цепочка ожидания по-прежнему действительна. |
Комментарии
Если сеанс является асинхронным, функция возвращает значение FALSE , а GetLastError — ERROR_IO_PENDING. Чтобы получить результаты, см. функцию обратного вызова WaitChainCallback .
Если указанный поток не заблокирован или заблокирован для неподдерживаемого элемента синхронизации, функция возвращает один элемент в NodeInfoArray.
Вызывающий объект должен иметь привилегию SE_DEBUG_NAME. Если вызывающий объект имеет недостаточные привилегии, функция завершается ошибкой, если доступ к первому потоку невозможен. В противном случае для последнего узла в массиве для элемента ObjectStatus будет задано значение WctStatusNoAcces.
Если какое-либо подмножество узлов в массиве формирует цикл, функция устанавливает для параметра IsCycleзначение TRUE.
Сведения о цепочке ожидания являются динамическими; она была правильной при вызове функции, но может быть устаревшей к моменту ее проверки вызывающим.
Примеры
Пример см. в разделе Использование WCT.
Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows Vista [только классические приложения] |
Минимальная версия сервера | Windows Server 2008 [только классические приложения] |
Целевая платформа | Windows |
Header | wct.h |
Библиотека | Advapi32.lib |
DLL | Advapi32.dll |