共用方式為


ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION 結構 (winnt.h)

QueryActCtxW 函式會使用ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION結構。

語法

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;

成員

ulFlags

這個值一定是 0。

ulEncodedAssemblyIdentityLength

編碼元件識別的長度,以位元組為單位。

ulManifestPathType

這個值一律為常數。

ulManifestPathLength

以位元組為單位的元件指令清單路徑長度。

liManifestLastWriteTime

上次寫入指令清單的時間。 這是 FILETIME 數據結構的形式。

ulPolicyPathType

這個值一律為常數。

ulPolicyPathLength

以位元組為單位的發行者原則路徑長度。

liPolicyLastWriteTime

上次寫入原則的時間。 這是 FILETIME 數據結構的形式。

ulMetadataSatelliteRosterIndex

元數據附屬名冊索引。

ulManifestVersionMajor

QueryActCtxW 查詢之元件的主要版本。 如需詳細資訊,請參閱 元件版本

ulManifestVersionMinor

QueryActCtxW 查詢的元件次要版本。 如需詳細資訊,請參閱 元件版本

ulPolicyVersionMajor

如果有,則為任何原則的主要版本。

ulPolicyVersionMinor

如果有,則為任何原則的次要版本。

ulAssemblyDirectoryNameLength

元件目錄名稱的長度,以位元組為單位。

lpAssemblyEncodedAssemblyIdentity

Null 終止字串的指標,其中包含元件識別的文字編碼格式。

lpAssemblyManifestPath

Null 終止字串的指標,表示這個元件指令清單的原始路徑。

lpAssemblyPolicyPath

Null 終止字串的指標,指出任何原則元件用來判斷應該載入此版本的元件的路徑。 如果此成員為 Null,則不會使用任何原則來決定載入此版本。

lpAssemblyDirectoryName

Null 終止字串的指標,指出載入這個元件的資料夾。

ulFileCount

備註

如果使用 AssemblyDetailedInformationInActivationContext 選項呼叫 QueryActCtxW ,而且函式成功,傳回緩衝區中的資訊會以 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;
    }

規格需求

需求
最低支援的用戶端 Windows XP [僅限傳統型應用程式]
最低支援的伺服器 Windows Server 2003 [僅限桌面應用程式]
標頭 winnt.h (包含 Windows.h)