Share via


ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION-Struktur (winnt.h)

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

Syntax

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;

Member

ulFlags

Dieser Wert ist immer 0.

ulEncodedAssemblyIdentityLength

Länge der codierten Assemblyidentität in Bytes.

ulManifestPathType

Dieser Wert ist immer eine Konstante.

ulManifestPathLength

Länge des Assemblymanifestpfads in Bytes.

liManifestLastWriteTime

Das letzte Mal, wenn das Manifest geschrieben wurde. Dies erfolgt in Form einer FILETIME-Datenstruktur .

ulPolicyPathType

Dieser Wert ist immer eine Konstante.

ulPolicyPathLength

Länge des Herausgeberrichtlinienpfads in Bytes.

liPolicyLastWriteTime

Das letzte Mal, wenn die Richtlinie geschrieben wurde. Dies erfolgt in Form einer FILETIME-Datenstruktur .

ulMetadataSatelliteRosterIndex

Metadaten-Satellitenplanindex.

ulManifestVersionMajor

Hauptversion der Assembly, die von QueryActCtxW abgefragt wird. Weitere Informationen finden Sie unter Assemblyversionen.

ulManifestVersionMinor

Nebenversion der assembly, die von QueryActCtxW abgefragt wird. Weitere Informationen finden Sie unter Assemblyversionen.

ulPolicyVersionMajor

Hauptversion einer Richtlinie, sofern vorhanden.

ulPolicyVersionMinor

Nebenversion einer Richtlinie, sofern vorhanden.

ulAssemblyDirectoryNameLength

Länge des Assemblyverzeichnisnamens in Bytes.

lpAssemblyEncodedAssemblyIdentity

Zeiger auf eine NULL-Zeichenfolge, die ein textcodiertes Format der Identität der Assembly enthält.

lpAssemblyManifestPath

Zeiger auf eine NULL-beendete Zeichenfolge, die den ursprünglichen Pfad zum Manifest dieser Assembly angibt.

lpAssemblyPolicyPath

Zeiger auf eine null-beendete Zeichenfolge, die den Pfad der Richtlinienassembly angibt, die verwendet wurde, um zu bestimmen, dass diese Version der Assembly geladen werden soll. Wenn dieser Member NULL ist, wurde keine Richtlinie verwendet, um diese Version zu laden.

lpAssemblyDirectoryName

Zeiger auf eine NULL-Zeichenfolge, die den Ordner angibt, aus dem diese Assembly geladen wurde.

ulFileCount

Hinweise

Wenn QueryActCtxW mit der Option AssemblyDetailedInformationInActivationContext aufgerufen wird und die Funktion erfolgreich ausgeführt wird, sind die Informationen im zurückgegebenen Puffer in Form der ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION-Struktur .

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

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)