次の方法で共有


ACTIVATION_CONTEXT_DETAILED_INFORMATION構造体 (winnt.h)

ACTIVATION_CONTEXT_DETAILED_INFORMATION構造体は、QueryActCtxW 関数によって使用されます。

構文

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 (デスクトップ アプリのみ)
Header winnt.h (Windows.h を含む)