Compartir a través de


estructura ACTIVATION_CONTEXT_DETAILED_INFORMATION (winnt.h)

La estructura ACTIVATION_CONTEXT_DETAILED_INFORMATION la usa la función QueryActCtxW .

Sintaxis

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;

Miembros

dwFlags

Este valor siempre es 0.

ulFormatVersion

Este valor especifica el formato de la información devuelta. En Windows XP y Windows Server 2003, este miembro siempre es 1.

ulAssemblyCount

Número de ensamblados en el contexto de activación.

ulRootManifestPathType

Especifica el tipo de ruta de acceso desde la que se cargó el manifiesto de este ensamblado.

Este miembro siempre es una de las siguientes constantes:

ulRootManifestPathChars

Número de caracteres de la ruta de acceso del manifiesto.

ulRootConfigurationPathType

Especifica el tipo de ruta de acceso desde la que se cargó el manifiesto de configuración de la aplicación de este ensamblado.

Este miembro siempre es una de las siguientes constantes:

ulRootConfigurationPathChars

Número de caracteres en cualquier ruta de acceso del archivo de configuración de la aplicación.

ulAppDirPathType

Especifica el tipo de ruta de acceso desde la que se cargó este manifiesto de aplicación.

Este miembro siempre es una de las siguientes constantes:

ulAppDirPathChars

Número de caracteres en el directorio de la aplicación.

lpRootManifestPath

Ruta de acceso del manifiesto de aplicación.

lpRootConfigurationPath

Ruta de acceso del archivo de configuración.

lpAppDirPath

Ruta de acceso del directorio de la aplicación.

Comentarios

Si se llama a QueryActCtxW con la opción ActivationContextDetailedInformation y la función se realiza correctamente, la información del búfer devuelto está en forma de estructura de ACTIVATION_CONTEXT_DETAILED_INFORMATION . A continuación se muestra un ejemplo de una estructura que se usa para contener información detallada sobre el contexto de activación y una llamada desde 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 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)