queryActCtxW 函式 (winbase.h)
QueryActCtxW 函式會查詢啟用內容。
語法
BOOL QueryActCtxW(
[in] DWORD dwFlags,
[in] HANDLE hActCtx,
[in, optional] PVOID pvSubInstance,
[in] ULONG ulInfoClass,
[out] PVOID pvBuffer,
[in, optional] SIZE_T cbBuffer,
[out, optional] SIZE_T *pcbWrittenOrRequired
);
參數
[in] dwFlags
此參數應該設定為下列其中一個旗標位。
旗標 | 意義 |
---|---|
|
QueryActCtxW 會查詢線程上的啟用內容,而不是 hActCtx 所指定的內容。 這通常是傳遞至 ActivateActCtx 的最後一個啟用內容。 如果尚未呼叫 ActivateActCtx ,作用中啟用內容可以是目前進程的可執行檔所使用的啟用內容。 在其他情況下,操作系統會決定使用中的啟用內容。 例如,呼叫新線程的回呼函式時,作用中啟用內容可能是您藉由呼叫 CreateThread 建立線程時作用中的內容。 |
|
QueryActCtxW 會將 hActCtx 解譯為 HMODULE 數據類型,並查詢與 DLL 或 EXE 相關聯的啟用內容。
載入 DLL 或 EXE 時,載入器會檢查儲存在資源中的指令清單。 如果載入器找到資源標識元設定為 ISOLATIONAWARE_MANIFEST_ RESOURCE_ID 的RT_MANIFEST資源,載入器會將產生的啟用內容與 DLL 或 EXE 產生關聯。 這是在設定 QUERY_ACTCTX_FLAG_ACTCTX_IS_HMODULE 旗標時 ,QueryActCtxW 會查詢的啟用內容。 |
|
QueryActCtxW 會將 hActCtx 解譯為 DLL 或 EXE 內的位址,並查詢與 DLL 或 EXE 相關聯的啟用內容。 這可以是 DLL 或 EXE 內的任何位址。 例如,DLL 或 EXE 內任何函式的位址,或任何靜態數據的位址,例如常數位符串。
載入 DLL 或 EXE 時,載入器會以與QUERY_ACTCTX_FLAG_ACTCTX_IS_HMODULE相同的方式檢查儲存在資源的指令清單。 |
[in] hActCtx
正在查詢的啟用內容句柄。
[in, optional] pvSubInstance
啟用內容中元件或元件和檔案組合的索引。 pvSubInstance 的意義取決於 ulInfoClass 參數值所指定的選項。
這個參數可以是 null。
ulInfoClass 選項 | 意義 |
---|---|
|
DWORD 的指標,指定啟用內容內的元件索引。 這是 QueryActCtxW 查詢的啟用內容。 |
|
ACTIVATION_CONTEXT_QUERY_INDEX 結構的指標。 如果使用此選項呼叫 QueryActCtxW ,且函式成功,則傳回的緩衝區會包含元件中檔案的資訊。 這項資訊的格式為 ASSEMBLY_FILE_DETAILED_INFORMATION 結構。 |
[in] ulInfoClass
此參數只能有下表中顯示的值。
選項 | 意義 |
---|---|
|
不適用。 |
|
如果使用此選項呼叫 QueryActCtxW ,且函式成功,則傳回的緩衝區會包含啟用內容的詳細資訊。 這項資訊的格式為 ACTIVATION_CONTEXT_DETAILED_INFORMATION 結構。 |
|
如果使用此選項呼叫 QueryActCtxW ,且函式成功,則緩衝區會包含 pvSubInstance 中所指定索引的元件相關信息。 這項資訊的格式為 ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION 結構。 |
|
啟用內容中其中一個元件中檔案的相關信息。 pvSubInstance 參數必須指向ACTIVATION_CONTEXT_QUERY_INDEX結構。 如果使用此選項呼叫 QueryActCtxW ,且函式成功,則傳回的緩衝區會包含元件中檔案的資訊。 這項資訊的格式為 ASSEMBLY_FILE_DETAILED_INFORMATION 結構。 |
|
如果使用此選項呼叫 QueryActCtxW ,且函式成功,則緩衝區會包含所要求啟用內容執行層級的相關信息。 這項資訊的格式為 ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION 結構。
Windows Server 2003 和 Windows XP: 這個值無法使用。 |
|
如果使用此選項呼叫 QueryActCtxW ,且函式成功,則緩衝區會包含所要求相容性內容的相關信息。 這項資訊的格式為 ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION 結構。
Windows Server 2008 和更早版本,以及 Windows Vista 和更早版本: 這個值無法使用。 此選項從 Windows Server 2008 R2 和 Windows 7 開始提供。 |
[out] pvBuffer
保留傳回信息的緩衝區指標。 這是選擇性參數。 如果 pvBuffer 為 null, 則 cbBuffer 必須為零。 如果 pvBuffer 所指向的緩衝區大小太小, QueryActCtxW 會傳回ERROR_INSUFFICIENT_BUFFER,而且不會將數據寫入緩衝區。 如需可用來判斷緩衝區所需大小的方法,請參閱一節。
[in, optional] cbBuffer
pvBuffer 所指向位元組的緩衝區大小。 這是選擇性參數。
[out, optional] pcbWrittenOrRequired
寫入或必要的位元組數目。 只有在 pvBuffer 為 NULL 時,此參數才能是 null。 如果 wwwWrittenOrRequired 為非 NULL,則會填入儲存傳回緩衝區所需的位元組數目。
傳回值
如果函式成功,則會傳回 TRUE。 否則會傳回 FALSE。
此函式會設定可藉由呼叫 GetLastError 擷取的錯誤。 如需範例,請參閱 擷取 Last-Error 程序代碼。 如需錯誤碼的完整清單,請參閱 系統錯誤碼。
備註
參數 cbBuffer 會指定 pvBuffer 所指向之緩衝區的大小以位元組為單位。 如果 pvBuffer 是 NULL, 則 cbBuffer 必須是 0。 只有在 pvBuffer 為 NULL 時,參數才能為 null。如果 pvWrittenOrRequired 參數為 NULL。 如果 傳回時為 非 NULL ,則會填入儲存傳回資訊所需的位元組數目。 當傳回的信息數據大於提供的緩衝區時, QueryActCtxW 會傳回ERROR_INSUFFICIENT_BUFFER,而且不會將數據寫入 pvBuffer 所指向的緩衝區。
下列範例顯示先使用小型緩衝區呼叫 的方法,然後在緩衝區太小時重新叫用 。
SIZE_T cbRequired;
PVOID pvData = NULL;
SIZE_T cbAvailable = 0;
if (!QueryActCtxW(..., pvData, cbAvailable, &cbRequired) && (GetLastError()== ERROR_INSUFFICIENT_BUFFER))
{
// Allocate enough space to store the returned buffer, fail if too small
if (NULL == (pvData = HeapAlloc(GetProcessHeap(), 0, cbRequired)))
{
SetLastError(ERROR_NOT_ENOUGH_MEMORY);
return FALSE;
}
cbAvailable = cbRequired;
// Try again, this should succeed.
if (QueryActCtxW(..., pvData, cbAvailable, &cbRequired))
{
// Use the returned data in pvData
}
HeapFree(GetProcessHeap(), 0, pvData);
pvData = NULL;
}
規格需求
需求 | 值 |
---|---|
最低支援的用戶端 | Windows XP [僅限傳統型應用程式] |
最低支援的伺服器 | Windows Server 2003 [僅限傳統型應用程式] |
目標平台 | Windows |
標頭 | winbase.h (包含 Windows.h) |
程式庫 | Kernel32.lib |
DLL | Kernel32.dll |