Compartir a través de


estructura ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION (winnt.h)

La estructura ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION la usa la función QueryActCtxW .

Sintaxis

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;

Miembros

ulFlags

Este valor siempre es 0.

ulEncodedAssemblyIdentityLength

Longitud de la identidad de ensamblado codificada en bytes.

ulManifestPathType

Este valor siempre es una constante.

ulManifestPathLength

Longitud de la ruta de acceso del manifiesto del ensamblado en bytes.

liManifestLastWriteTime

La última vez que se escribió el manifiesto. Se trata de una estructura de datos FILETIME .

ulPolicyPathType

Este valor siempre es una constante.

ulPolicyPathLength

Longitud de la ruta de acceso de la directiva del publicador en bytes.

liPolicyLastWriteTime

La última vez que se escribió la directiva. Se trata de una estructura de datos FILETIME .

ulMetadataSatelliteRosterIndex

Índice de lista satélite de metadatos.

ulManifestVersionMajor

Versión principal del ensamblado consultado por QueryActCtxW. Para obtener más información, vea Versiones de ensamblado.

ulManifestVersionMinor

Versión secundaria del ensamblado consultado por QueryActCtxW. Para obtener más información, vea Versiones de ensamblado.

ulPolicyVersionMajor

Versión principal de cualquier directiva, si existe.

ulPolicyVersionMinor

Versión secundaria de cualquier directiva, si existe.

ulAssemblyDirectoryNameLength

Longitud del nombre del directorio del ensamblado en bytes.

lpAssemblyEncodedAssemblyIdentity

Puntero a una cadena terminada en null que contiene un formato codificado textualmente de la identidad del ensamblado.

lpAssemblyManifestPath

Puntero a una cadena terminada en null que indica la ruta de acceso original al manifiesto de este ensamblado.

lpAssemblyPolicyPath

Puntero a una cadena terminada en null que indica la ruta de acceso de cualquier ensamblado de directiva que se usó para determinar que se debe cargar esta versión del ensamblado. Si este miembro es null, no se usó ninguna directiva para decidir cargar esta versión.

lpAssemblyDirectoryName

Puntero a una cadena terminada en null que indica la carpeta desde la que se cargó este ensamblado.

ulFileCount

Comentarios

Si se llama a QueryActCtxW con la opción AssemblyDetailedInformationInActivationContext y la función se realiza correctamente, la información del búfer devuelto está en forma de la estructura 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 Value
Cliente mínimo compatible Windows XP [solo aplicaciones de escritorio]
Servidor mínimo compatible Windows Server 2003 [solo aplicaciones de escritorio]
Encabezado winnt.h (incluya Windows.h)