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 を含む) |