Share via


ACTIVATION_CONTEXT_DETAILED_INFORMATION-Struktur (winnt.h)

Die ACTIVATION_CONTEXT_DETAILED_INFORMATION-Struktur wird von der QueryActCtxW-Funktion verwendet.

Syntax

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;

Member

dwFlags

Dieser Wert ist immer 0.

ulFormatVersion

Dieser Wert gibt das Format der zurückgegebenen Informationen an. Unter Windows XP und Windows Server 2003 ist dieser Member immer 1.

ulAssemblyCount

Anzahl der Assemblys im Aktivierungskontext.

ulRootManifestPathType

Gibt die Art des Pfads an, aus dem das Manifest dieser Assembly geladen wurde.

Dieser Member ist immer eine der folgenden Konstanten:

ulRootManifestPathChars

Anzahl der Zeichen im Manifestpfad.

ulRootConfigurationPathType

Gibt die Art des Pfads an, aus dem das Anwendungskonfigurationsmanifest dieser Assembly geladen wurde.

Dieser Member ist immer eine der folgenden Konstanten:

ulRootConfigurationPathChars

Anzahl der Zeichen in einem beliebigen Anwendungskonfigurationsdateipfad.

ulAppDirPathType

Gibt die Art des Pfads an, aus dem dieses Anwendungsmanifest geladen wurde.

Dieser Member ist immer eine der folgenden Konstanten:

ulAppDirPathChars

Anzahl der Zeichen im Anwendungsverzeichnis.

lpRootManifestPath

Pfad des Anwendungsmanifests.

lpRootConfigurationPath

Pfad der Konfigurationsdatei.

lpAppDirPath

Pfad des Anwendungsverzeichnisses.

Hinweise

Wenn QueryActCtxW mit der Option ActivationContextDetailedInformation aufgerufen wird und die Funktion erfolgreich ist, werden die Informationen im zurückgegebenen Puffer in Form der ACTIVATION_CONTEXT_DETAILED_INFORMATION-Struktur angezeigt. Im Folgenden finden Sie ein Beispiel für eine Struktur, die verwendet wird, um detaillierte Informationen zum Aktivierungskontext und einen Aufruf von QueryActCtxW zu enthalten.

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;
    }


Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows XP [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows Server 2003 [nur Desktop-Apps]
Kopfzeile winnt.h (Einschließen von Windows.h)