Compartilhar via


estrutura ACTIVATION_CONTEXT_DETAILED_INFORMATION (winnt.h)

A estrutura ACTIVATION_CONTEXT_DETAILED_INFORMATION é usada pela função QueryActCtxW .

Sintaxe

typedef struct _ACTIVATION_CONTEXT_DETAILED_INFORMATION {
  DWORD  dwFlags;
  DWORD  ulFormatVersion;
  DWORD  ulAssemblyCount;
  DWORD  ulRootManifestPathType;
  DWORD  ulRootManifestPathChars;
  DWORD  ulRootConfigurationPathType;
  DWORD  ulRootConfigurationPathChars;
  DWORD  ulAppDirPathType;
  DWORD  ulAppDirPathChars;
  PCWSTR lpRootManifestPath;
  PCWSTR lpRootConfigurationPath;
  PCWSTR lpAppDirPath;
} ACTIVATION_CONTEXT_DETAILED_INFORMATION, *PACTIVATION_CONTEXT_DETAILED_INFORMATION;

Membros

dwFlags

Esse valor é sempre 0.

ulFormatVersion

Esse valor especifica o formato das informações retornadas. No Windows XP e no Windows Server 2003, esse membro é sempre 1.

ulAssemblyCount

Número de assemblies no contexto de ativação.

ulRootManifestPathType

Especifica o tipo de caminho do qual o manifesto do assembly foi carregado.

Esse membro é sempre uma das seguintes constantes:

ulRootManifestPathChars

Número de caracteres no caminho do manifesto.

ulRootConfigurationPathType

Especifica o tipo de caminho do qual o manifesto de configuração de aplicativo desse assembly foi carregado.

Esse membro é sempre uma das seguintes constantes:

ulRootConfigurationPathChars

Número de caracteres em qualquer caminho de arquivo de configuração de aplicativo.

ulAppDirPathType

Especifica o tipo de caminho do qual esse manifesto do aplicativo foi carregado.

Esse membro é sempre uma das seguintes constantes:

ulAppDirPathChars

Número de caracteres no diretório do aplicativo.

lpRootManifestPath

Caminho do manifesto do aplicativo.

lpRootConfigurationPath

Caminho do arquivo de configuração.

lpAppDirPath

Caminho do diretório do aplicativo.

Comentários

Se QueryActCtxW for chamado com a opção ActivationContextDetailedInformation e a função for bem-sucedida, as informações no buffer retornado serão na forma da estrutura ACTIVATION_CONTEXT_DETAILED_INFORMATION . Veja a seguir um exemplo de uma estrutura usada para armazenar informações detalhadas sobre o contexto de ativação e uma chamada de QueryActCtxW.

PACTIVATION_CONTEXT_DETAILED_INFORMATION pAssemblyInfo = NULL;
ACTIVATION_CONTEXT_QUERY_INDEX QueryIndex;
BOOL fSuccess = FALSE;
SIZE_T cbRequired;
HANDLE hActCtx = INVALID_HANDLE_VALUE;
BYTE bTemporaryBuffer[512];
PVOID pvDataBuffer = (PVOID)bTemporaryBuffer;
SIZE_T cbAvailable = sizeof(bTemporaryBuffer);

// Request the first file in the root assembly
QueryIndex.ulAssemblyIndex = 1;
QueryIndex.ulFileIndexInAssembly = 0;

if (GetCurrentActCtx(&hActCtx)) {

    // Attempt to use our stack-based buffer first - if that's not large
    // enough, allocate from the heap and try again.
    fSuccess = QueryActCtxW(
        0, 
        hActCtx, 
        (PVOID)&QueryIndex, 
        AssemblyDetailedInformationInActivationContext,
        pvDataBuffer,
        cbAvailable,
        &cbRequired);

    // Failed, because the buffer was too small.
    if (!fSuccess && (GetLastError() == ERROR_INSUFFICIENT_BUFFER)) {

        // Allocate what we need from the heap - fail if there isn't enough
        // memory to do so.        
        pvDataBuffer = HeapAlloc(GetProcessHeap(), 0, cbRequired);
        if (pvDataBuffer == NULL) {
            fSuccess = FALSE;
            goto DoneQuerying;
        }
        cbAvailable = cbRequired;

        // If this fails again, exit out.
        fSuccess = QueryActCtxW(
            0, 
            hActCtx,
            (PVOID)&QueryIndex,
            AssemblyDetailedInformationInActivationContext,
            pvDataBuffer,
            cbAvailable,
            &cbRequired);

    }

    if (fSuccess) {
        // Now that we've found the assembly info, cast our target buffer back to
        // the assembly info pointer.  Use pAssemblyInfo->lpFileName
        pAssemblyInfo = (PACTIVATION_CONTEXT_DETAILED_INFORMATION)pvDataBuffer;
    }
}

DoneQuerying:
    if (hActCtx != INVALID_HANDLE_VALUE)
        ReleaseActCtx(hActCtx);

    if (pvDataBuffer && (pvDataBuffer != bTemporaryBuffer)) {
        HeapFree(GetProcessHeap(), 0, pvDataBuffer);
        pvDataBuffer = 0;
    }


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]
Cabeçalho winnt.h (inclua Windows.h)