Função QueryActCtxW (winbase.h)
A função QueryActCtxW consulta o contexto de ativação.
Sintaxe
BOOL QueryActCtxW(
[in] DWORD dwFlags,
[in] HANDLE hActCtx,
[in, optional] PVOID pvSubInstance,
[in] ULONG ulInfoClass,
[out] PVOID pvBuffer,
[in, optional] SIZE_T cbBuffer,
[out, optional] SIZE_T *pcbWrittenOrRequired
);
Parâmetros
[in] dwFlags
Esse parâmetro deve ser definido como um dos bits de sinalizador a seguir.
Sinalizador | Significado |
---|---|
|
QueryActCtxW consulta o contexto de ativação ativo no thread em vez do contexto especificado por hActCtx. Geralmente, esse é o último contexto de ativação passado para ActivateActCtx. Se ActivateActCtx não tiver sido chamado, o contexto de ativação ativo poderá ser o contexto de ativação usado pelo executável do processo atual. Em outros casos, o sistema operacional determina o contexto de ativação ativo. Por exemplo, quando a função de retorno de chamada para um novo thread é chamada, o contexto de ativação ativa pode ser o contexto que estava ativo quando você criou o thread chamando CreateThread. |
|
QueryActCtxW interpreta hActCtx como um tipo de dados HMODULE e consulta um contexto de ativação associado a uma DLL ou EXE.
Quando uma DLL ou EXE é carregada, o carregador verifica se há um manifesto armazenado em um recurso. Se o carregador encontrar um recurso RT_MANIFEST com um identificador de recurso definido como ISOLATIONAWARE_MANIFEST_ RESOURCE_ID, o carregador associará o contexto de ativação resultante à DLL ou EXE. Esse é o contexto de ativação que QueryActCtxW consulta quando o sinalizador QUERY_ACTCTX_FLAG_ACTCTX_IS_HMODULE foi definido. |
|
QueryActCtxW interpreta hActCtx como um endereço dentro de uma DLL ou EXE e consulta um contexto de ativação que foi associado à DLL ou EXE. Pode ser qualquer endereço dentro da DLL ou EXE. Por exemplo, o endereço de qualquer função dentro de uma DLL ou EXE ou o endereço de quaisquer dados estáticos, como uma cadeia de caracteres constante.
Quando uma DLL ou EXE é carregada, o carregador verifica se há um manifesto armazenado em um recurso da mesma forma que QUERY_ACTCTX_FLAG_ACTCTX_IS_HMODULE. |
[in] hActCtx
Manipule para o contexto de ativação que está sendo consultado.
[in, optional] pvSubInstance
Índice do assembly ou da combinação de assembly e arquivo no contexto de ativação. O significado do pvSubInstance depende da opção especificada pelo valor do parâmetro ulInfoClass .
Esse parâmetro pode ser nulo.
Opção ulInfoClass | Significado |
---|---|
|
Ponteiro para um DWORD que especifica o índice do assembly dentro do contexto de ativação. Esse é o contexto de ativação que o QueryActCtxW consulta. |
|
Ponteiro para uma estrutura ACTIVATION_CONTEXT_QUERY_INDEX . Se QueryActCtxW for chamado com essa opção e a função for bem-sucedida, o buffer retornado conterá informações para um arquivo no assembly. Essas informações estão na forma da estrutura ASSEMBLY_FILE_DETAILED_INFORMATION . |
[in] ulInfoClass
Esse parâmetro pode ter apenas os valores mostrados na tabela a seguir.
Opção | Significado |
---|---|
|
Não disponível. |
|
Se QueryActCtxW for chamado com essa opção e a função for bem-sucedida, o buffer retornado conterá informações detalhadas sobre o contexto de ativação. Essas informações estão na forma da estrutura ACTIVATION_CONTEXT_DETAILED_INFORMATION . |
|
Se QueryActCtxW for chamado com essa opção e a função for bem-sucedida, o buffer conterá informações sobre o assembly que tem o índice especificado em pvSubInstance. Essas informações estão na forma da estrutura ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION . |
|
Informações sobre um arquivo em um dos assemblies no Contexto de Ativação. O parâmetro pvSubInstance deve apontar para uma estrutura ACTIVATION_CONTEXT_QUERY_INDEX . Se QueryActCtxW for chamado com essa opção e a função for bem-sucedida, o buffer retornado conterá informações para um arquivo no assembly. Essas informações estão na forma da estrutura ASSEMBLY_FILE_DETAILED_INFORMATION . |
|
Se QueryActCtxW for chamado com essa opção e a função for bem-sucedida, o buffer conterá informações sobre o nível de execução solicitado do contexto de ativação. Essas informações estão na forma da estrutura ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION .
Windows Server 2003 e Windows XP: Esse valor não está disponível. |
|
Se QueryActCtxW for chamado com essa opção e a função for bem-sucedida, o buffer conterá informações sobre o contexto de compatibilidade solicitado. Essas informações estão na forma da estrutura ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION .
Windows Server 2008 e versões anteriores e Windows Vista e anteriores: Esse valor não está disponível. Essa opção está disponível a partir do Windows Server 2008 R2 e do Windows 7. |
[out] pvBuffer
Ponteiro para um buffer que contém as informações retornadas. Esse parâmetro é opcional. Se pvBuffer for nulo, cbBuffer deverá ser zero. Se o tamanho do buffer apontado por pvBuffer for muito pequeno, QueryActCtxW retornará ERROR_INSUFFICIENT_BUFFER e nenhum dado será gravado no buffer. Consulte a seção Comentários para o método que você pode usar para determinar o tamanho necessário do buffer.
[in, optional] cbBuffer
Tamanho do buffer em bytes apontados por pvBuffer. Esse parâmetro é opcional.
[out, optional] pcbWrittenOrRequired
Número de bytes gravados ou obrigatórios. O parâmetro pcbWrittenOrRequired só pode ser NULL quando pvBuffer for NULL. Se pcbWrittenOrRequired não for NULL, ele será preenchido com o número de bytes necessários para armazenar o buffer retornado.
Retornar valor
Se a função for bem-sucedida, ela retornará TRUE. Caso contrário, retornará FALSE.
Essa função define erros que podem ser recuperados chamando GetLastError. Para obter um exemplo, consulte Recuperando o código de Last-Error. Para obter uma lista completa de códigos de erro, consulte Códigos de erro do sistema.
Comentários
O parâmetro cbBuffer especifica o tamanho em bytes do buffer apontado por pvBuffer. Se pvBuffer for NULL, cbBuffer deverá ser 0. O parâmetro pcbWrittenOrRequired só poderá ser NULL se pvBuffer for NULL. Se pcbWrittenOrRequired não for NULL no retorno, ele será preenchido com o número de bytes necessários para armazenar as informações retornadas. Quando os dados de informações retornados são maiores que o buffer fornecido, QueryActCtxW retorna ERROR_INSUFFICIENT_BUFFER e nenhum dado é gravado no buffer apontado por pvBuffer.
O exemplo a seguir mostra o método de chamar primeiro com um buffer pequeno e, em seguida, lembrar se o buffer é muito pequeno.
SIZE_T cbRequired;
PVOID pvData = NULL;
SIZE_T cbAvailable = 0;
if (!QueryActCtxW(..., pvData, cbAvailable, &cbRequired) && (GetLastError()== ERROR_INSUFFICIENT_BUFFER))
{
// Allocate enough space to store the returned buffer, fail if too small
if (NULL == (pvData = HeapAlloc(GetProcessHeap(), 0, cbRequired)))
{
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return FALSE;
}
cbAvailable = cbRequired;
// Try again, this should succeed.
if (QueryActCtxW(..., pvData, cbAvailable, &cbRequired))
{
// Use the returned data in pvData
}
HeapFree(GetProcessHeap(), 0, pvData);
pvData = NULL;
}
Requisitos
Requisito | Valor |
---|---|
Cliente mínimo com suporte | Windows XP [somente aplicativos da área de trabalho] |
Servidor mínimo com suporte | Windows Server 2003 [somente aplicativos da área de trabalho] |
Plataforma de Destino | Windows |
Cabeçalho | winbase.h (inclua Windows.h) |
Biblioteca | Kernel32.lib |
DLL | Kernel32.dll |