Поделиться через


Функция 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

Параметры получения цепочки ожидания. Этот параметр может иметь одно из следующих значений.

Значение Значение
WCT_OUT_OF_PROC_COM_FLAG
Перечисляет все потоки com-сервера MTA вне среды, чтобы найти правильный идентификатор потока.
WCT_OUT_OF_PROC_CS_FLAG
Извлекает сведения о критически важных разделах из других процессов.
WCT_OUT_OF_PROC_FLAG
Следует за цепочкой ожидания в другие процессы. В противном случае функция сообщает о первом потоке в другом процессе, но не получает дополнительную информацию.

[in] ThreadId

Идентификатор потока.

[in, out] NodeCount

На входных данных число от 1 до WCT_MAX_NODE_COUNT, указывающее количество узлов в цепочке ожидания. При возврате — количество извлеченных узлов. Если массив не может содержать все узлы цепочки ожидания, функция завершается сбоем, GetLastError возвращает ERROR_MORE_DATA, и этот параметр получает количество элементов массива, необходимое для размещения всех узлов.

Для асинхронных сеансов проверка значение, передаваемое функции обратного вызова. Не освобождайте переменную, пока не будет возвращена функция обратного вызова.

[out] NodeInfoArray

Массив WAITCHAIN_NODE_INFO структур, получающих цепочку ожидания.

Для асинхронных сеансов проверка значение, передаваемое функции обратного вызова. Не освобождайте массив, пока не будет возвращена функция обратного вызова.

[out] IsCycle

Если функция обнаруживает взаимоблокировку, эта переменная имеет значение TRUE; В противном случае устанавливается значение FALSE.

Для асинхронных сеансов проверка значение, передаваемое функции обратного вызова. Не освобождайте переменную, пока не будет возвращена функция обратного вызова.

Возвращаемое значение

Если функция выполняется успешно, возвращается ненулевое значение.

Если функция выполняется неудачно, возвращается нулевое значение. Чтобы получить расширенные сведения об ошибке, вызовите Метод GetLastError.

Код возврата Описание
ERROR_ACCESS_DENIED
У вызывающего объекта не было достаточных привилегий для открытия целевого потока.
ERROR_INVALID_PARAMETER
Один из входных параметров недопустим.
ERROR_IO_PENDING
Сеанс WCT был открыт в асинхронном режиме. Результаты будут возвращены с помощью функции обратного вызова WaitChainCallback .
ERROR_MORE_DATA
Буфер NodeInfoArray недостаточно велик, чтобы содержать все узлы в цепочке ожидания. Параметр NodeCount содержит количество узлов в цепочке. Возвращаемая цепочка ожидания по-прежнему действительна.
ERROR_NOT_SUPPORTED
Операционная система не предоставляет эту службу.
ERROR_OBJECT_NOT_FOUND
Не удалось найти указанный поток.
ERROR_TOO_MANY_THREADS
Количество узлов превышает 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

См. также раздел

OpenThreadWaitChainSession

WAITCHAIN_NODE_INFO

Обход цепочки ожидания

WaitChainCallback