共用方式為


winnt.h) (ACTIVATION_CONTEXT_DETAILED_INFORMATION 結構

QueryActCtxW 函式會使用ACTIVATION_CONTEXT_DETAILED_INFORMATION結構。

語法

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;

成員

dwFlags

這個值一定是 0。

ulFormatVersion

這個值會指定傳回資訊的格式。 在 Windows XP 和 Windows Server 2003 上,此成員一律為 1。

ulAssemblyCount

啟用內容中的元件數目。

ulRootManifestPathType

指定載入此元件指令清單的路徑類型。

此成員一律是下列其中一個常數:

ulRootManifestPathChars

指令清單路徑中的字元數。

ulRootConfigurationPathType

指定載入此元件之應用程式組態指令清單的路徑類型。

此成員一律是下列其中一個常數:

ulRootConfigurationPathChars

任何應用程式組態檔路徑中的字元數。

ulAppDirPathType

指定載入此應用程式指令清單的路徑類型。

此成員一律是下列其中一個常數:

ulAppDirPathChars

應用程式目錄中的字元數。

lpRootManifestPath

應用程式指令清單的路徑。

lpRootConfigurationPath

組態檔的路徑。

lpAppDirPath

應用程式目錄的路徑。

備註

如果使用 ActivationContextDetailedInformation 選項呼叫 QueryActCtxW ,而且函式成功,傳回緩衝區中的資訊會以 ACTIVATION_CONTEXT_DETAILED_INFORMATION 結構的形式呼叫。 以下是結構範例,可用來保存啟動內容和 來自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;
    }


規格需求

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