Partager via


ACTIVATION_CONTEXT_DETAILED_INFORMATION structure (winnt.h)

La structure ACTIVATION_CONTEXT_DETAILED_INFORMATION est utilisée par la fonction QueryActCtxW .

Syntaxe

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;

Membres

dwFlags

Cette valeur est toujours 0.

ulFormatVersion

Cette valeur spécifie le format des informations retournées. Sur Windows Xp et Windows Server 2003, ce membre est toujours 1.

ulAssemblyCount

Nombre d’assemblys dans le contexte d’activation.

ulRootManifestPathType

Spécifie le type de chemin d’accès à partir duquel le manifeste de cet assembly a été chargé.

Ce membre est toujours l’une des constantes suivantes :

ulRootManifestPathChars

Nombre de caractères dans le chemin du manifeste.

ulRootConfigurationPathType

Spécifie le type de chemin d’accès à partir duquel le manifeste de configuration d’application de cet assembly a été chargé.

Ce membre est toujours l’une des constantes suivantes :

ulRootConfigurationPathChars

Nombre de caractères dans n’importe quel chemin d’accès au fichier de configuration d’application.

ulAppDirPathType

Spécifie le type de chemin d’accès à partir duquel ce manifeste d’application a été chargé.

Ce membre est toujours l’une des constantes suivantes :

ulAppDirPathChars

Nombre de caractères dans le répertoire de l’application.

lpRootManifestPath

Chemin du manifeste de l’application.

lpRootConfigurationPath

Chemin du fichier de configuration.

lpAppDirPath

Chemin du répertoire de l’application.

Remarques

Si QueryActCtxW est appelé avec l’option ActivationContextDetailedInformation et que la fonction réussit, les informations dans la mémoire tampon retournée sont sous la forme de la structure ACTIVATION_CONTEXT_DETAILED_INFORMATION . Voici un exemple de structure utilisée pour contenir des informations détaillées sur le contexte d’activation et un appel à partir 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;
    }


Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows XP [applications de bureau uniquement]
Serveur minimal pris en charge Windows Server 2003 [applications de bureau uniquement]
En-tête winnt.h (inclure Windows.h)