Compartilhar via


Função GetThreadWaitChain (wct.h)

Recupera a cadeia de espera para o thread especificado.

Sintaxe

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
);

Parâmetros

[in] WctHandle

Um identificador para a sessão WCT criada pela função OpenThreadWaitChainSession .

[in, optional] Context

Um ponteiro para uma estrutura de contexto definida pelo aplicativo a ser passada para a função de retorno de chamada para uma sessão assíncrona.

[in] Flags

As opções de recuperação da cadeia de espera. Esse parâmetro pode ser um dos valores a seguir.

Valor Significado
WCT_OUT_OF_PROC_COM_FLAG
Enumera todos os threads de um servidor COM MTA fora do processo para localizar o identificador de thread correto.
WCT_OUT_OF_PROC_CS_FLAG
Recupera informações de seção crítica de outros processos.
WCT_OUT_OF_PROC_FLAG
Segue a cadeia de espera em outros processos. Caso contrário, a função relatará o primeiro thread em um processo diferente, mas não recuperará informações adicionais.

[in] ThreadId

O identificador do thread.

[in, out] NodeCount

Na entrada, um número de 1 a WCT_MAX_NODE_COUNT que especifica o número de nós na cadeia de espera. No retorno, o número de nós recuperados. Se a matriz não puder conter todos os nós da cadeia de espera, a função falhará, GetLastError retornará ERROR_MORE_DATA e esse parâmetro receberá o número de elementos de matriz necessários para conter todos os nós.

Para sessões assíncronas, marcar o valor passado para a função de retorno de chamada. Não libere a variável até que a função de retorno de chamada tenha retornado.

[out] NodeInfoArray

Uma matriz de estruturas WAITCHAIN_NODE_INFO que recebe a cadeia de espera.

Para sessões assíncronas, marcar o valor passado para a função de retorno de chamada. Não libere a matriz até que a função de retorno de chamada tenha retornado.

[out] IsCycle

Se a função detectar um deadlock, essa variável será definida como TRUE; caso contrário, ele será definido como FALSE.

Para sessões assíncronas, marcar o valor passado para a função de retorno de chamada. Não libere a variável até que a função de retorno de chamada tenha retornado.

Valor retornado

Se a função for bem-sucedida, o valor retornado será diferente de zero.

Se a função falhar, o valor retornado será zero. Para recuperar informações de erro estendidas, chame GetLastError.

Código de retorno Descrição
ERROR_ACCESS_DENIED
O chamador não tinha privilégio suficiente para abrir um thread de destino.
ERROR_INVALID_PARAMETER
Um dos parâmetros de entrada é inválido.
ERROR_IO_PENDING
A sessão WCT foi aberta no modo assíncrono. Os resultados serão retornados por meio da função de retorno de chamada WaitChainCallback .
ERROR_MORE_DATA
O buffer NodeInfoArray não é grande o suficiente para conter todos os nós na cadeia de espera. O parâmetro NodeCount contém o número de nós na cadeia. A cadeia de espera retornada ainda é válida.
ERROR_NOT_SUPPORTED
O sistema operacional não está fornecendo esse serviço.
ERROR_OBJECT_NOT_FOUND
Não foi possível localizar o thread especificado.
ERROR_TOO_MANY_THREADS
O número de nós excede WCT_MAX_NODE_COUNT. A cadeia de espera retornada ainda é válida.

Comentários

Se a sessão for assíncrona, a função retornará FALSE e GetLastError retornará ERROR_IO_PENDING. Para obter os resultados, consulte a função de retorno de chamada WaitChainCallback .

Se o thread especificado não estiver bloqueado ou estiver bloqueado em um elemento de sincronização sem suporte, a função retornará um único item em NodeInfoArray.

O chamador deve ter o privilégio SE_DEBUG_NAME. Se o chamador tiver privilégios insuficientes, a função falhará se o primeiro thread não puder ser acessado. Caso contrário, o último nó na matriz terá seu membro ObjectStatus definido como WctStatusNoAcces.

Se qualquer subconjunto de nós na matriz formar um ciclo, a função definirá o parâmetro IsCycle como TRUE.

As informações da cadeia de espera são dinâmicas; estava correto quando a função foi chamada, mas pode estar desatualizada no momento em que é revisada pelo chamador.

Exemplos

Para obter um exemplo, consulte Usando o WCT.

Requisitos

Requisito Valor
Cliente mínimo com suporte Windows Vista [somente aplicativos da área de trabalho]
Servidor mínimo com suporte Windows Server 2008 [somente aplicativos da área de trabalho]
Plataforma de Destino Windows
Cabeçalho wct.h
Biblioteca Advapi32.lib
DLL Advapi32.dll

Confira também

OpenThreadWaitChainSession

WAITCHAIN_NODE_INFO

Wait Chain Traversal

WaitChainCallback