ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION 構造体 (winnt.h)
ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION構造体は、QueryActCtxW 関数によって使用されます。
構文
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
エンコードされたアセンブリ ID の長さ (バイト単位)。
ulManifestPathType
この値は常に定数です。
ulManifestPathLength
アセンブリ マニフェスト パスの長さ (バイト単位)。
liManifestLastWriteTime
マニフェストが最後に書き込まれた時刻。 これは FILETIME データ構造の形式です。
ulPolicyPathType
この値は常に定数です。
ulPolicyPathLength
パブリッシャー ポリシー パスの長さ (バイト単位)。
liPolicyLastWriteTime
ポリシーが最後に作成された時刻。 これは FILETIME データ構造の形式です。
ulMetadataSatelliteRosterIndex
メタデータ サテライト名簿インデックス。
ulManifestVersionMajor
QueryActCtxW によって照会されるアセンブリのメジャー バージョン。 詳細については、「 アセンブリ のバージョン」を参照してください。
ulManifestVersionMinor
QueryActCtxW によって照会されるアセンブリのマイナー バージョン。 詳細については、「 アセンブリ のバージョン」を参照してください。
ulPolicyVersionMajor
ポリシーのメジャー バージョン (存在する場合)。
ulPolicyVersionMinor
ポリシーのマイナー バージョン (存在する場合)。
ulAssemblyDirectoryNameLength
アセンブリ ディレクトリ名の長さ (バイト単位)。
lpAssemblyEncodedAssemblyIdentity
アセンブリの ID のテキスト形式でエンコードされた形式を含む 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 (デスクトップ アプリのみ) |
Header | winnt.h (Windows.h を含む) |