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) |