Compartilhar via


estrutura ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION (winnt.h)

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

Sintaxe

typedef struct _ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION {
  DWORD         ulFlags;
  DWORD         ulEncodedAssemblyIdentityLength;
  DWORD         ulManifestPathType;
  DWORD         ulManifestPathLength;
  LARGE_INTEGER liManifestLastWriteTime;
  DWORD         ulPolicyPathType;
  DWORD         ulPolicyPathLength;
  LARGE_INTEGER liPolicyLastWriteTime;
  DWORD         ulMetadataSatelliteRosterIndex;
  DWORD         ulManifestVersionMajor;
  DWORD         ulManifestVersionMinor;
  DWORD         ulPolicyVersionMajor;
  DWORD         ulPolicyVersionMinor;
  DWORD         ulAssemblyDirectoryNameLength;
  PCWSTR        lpAssemblyEncodedAssemblyIdentity;
  PCWSTR        lpAssemblyManifestPath;
  PCWSTR        lpAssemblyPolicyPath;
  PCWSTR        lpAssemblyDirectoryName;
  DWORD         ulFileCount;
} ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION, *PACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION;

Membros

ulFlags

Esse valor é sempre 0.

ulEncodedAssemblyIdentityLength

Comprimento da identidade do assembly codificado em bytes.

ulManifestPathType

Esse valor sempre é uma constante.

ulManifestPathLength

Comprimento do caminho do manifesto do assembly em bytes.

liManifestLastWriteTime

A última vez que o manifesto foi gravado. Isso está na forma de uma estrutura de dados FILETIME .

ulPolicyPathType

Esse valor sempre é uma constante.

ulPolicyPathLength

Comprimento do caminho da política do editor em bytes.

liPolicyLastWriteTime

A última vez que a política foi escrita. Isso está na forma de uma estrutura de dados FILETIME .

ulMetadataSatelliteRosterIndex

Índice de lista de metadados satélite.

ulManifestVersionMajor

Versão principal do assembly consultado por QueryActCtxW. Para obter mais informações, consulte Versões do assembly.

ulManifestVersionMinor

Versão secundária do assembly consultado por QueryActCtxW. Para obter mais informações, consulte Versões do assembly.

ulPolicyVersionMajor

Versão principal de qualquer política, se houver.

ulPolicyVersionMinor

Versão secundária de qualquer política, se houver.

ulAssemblyDirectoryNameLength

Comprimento do nome do diretório do assembly em bytes.

lpAssemblyEncodedAssemblyIdentity

Ponteiro para uma cadeia de caracteres terminada em nulo que contém um formato codificado textually da identidade do assembly.

lpAssemblyManifestPath

Ponteiro para uma cadeia de caracteres terminada em nulo que indica o caminho original para o manifesto desse assembly.

lpAssemblyPolicyPath

Ponteiro para uma cadeia de caracteres terminada em nulo que indica o caminho de qualquer assembly de política usado para determinar que essa versão do assembly deve ser carregada. Se esse membro for nulo, nenhuma política foi usada para decidir carregar essa versão.

lpAssemblyDirectoryName

Ponteiro para uma cadeia de caracteres terminada em nulo que indica a pasta da qual esse assembly foi carregado.

ulFileCount

Comentários

Se QueryActCtxW for chamado com a opção AssemblyDetailedInformationInActivationContext e a função for bem-sucedida, as informações no buffer retornado estão na forma da estrutura ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION .

PACTIVATION_CONTEXT_ASSEMBLY_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_ASSEMBLY_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)