共用方式為


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

此參數應該設定為下列其中一個旗標位。

旗標 意義
QUERY_ACTCTX_FLAG_USE_ACTIVE_ACTCTX
QueryActCtxW 會查詢線程上的啟用內容,而不是 hActCtx 所指定的內容。 這通常是傳遞至 ActivateActCtx 的最後一個啟用內容。 如果尚未呼叫 ActivateActCtx ,作用中啟用內容可以是目前進程的可執行檔所使用的啟用內容。 在其他情況下,操作系統會決定使用中的啟用內容。 例如,呼叫新線程的回呼函式時,作用中啟用內容可能是您藉由呼叫 CreateThread 建立線程時作用中的內容。
QUERY_ACTCTX_FLAG_ACTCTX_IS_HMODULE
QueryActCtxW 會將 hActCtx 解譯為 HMODULE 數據類型,並查詢與 DLL 或 EXE 相關聯的啟用內容。

載入 DLL 或 EXE 時,載入器會檢查儲存在資源中的指令清單。 如果載入器找到資源標識元設定為 ISOLATIONAWARE_MANIFEST_ RESOURCE_ID 的RT_MANIFEST資源,載入器會將產生的啟用內容與 DLL 或 EXE 產生關聯。 這是在設定 QUERY_ACTCTX_FLAG_ACTCTX_IS_HMODULE 旗標時 ,QueryActCtxW 會查詢的啟用內容。

QUERY_ACTCTX_FLAG_ACTCTX_IS_ADDRESS
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 選項 意義
AssemblyDetailedInformationInActivationContext
DWORD 的指標,指定啟用內容內的元件索引。 這是 QueryActCtxW 查詢的啟用內容。
FileInformationInAssemblyOfAssemblyInActivationContext
ACTIVATION_CONTEXT_QUERY_INDEX 結構的指標。 如果使用此選項呼叫 QueryActCtxW ,且函式成功,則傳回的緩衝區會包含元件中檔案的資訊。 這項資訊的格式為 ASSEMBLY_FILE_DETAILED_INFORMATION 結構。

[in] ulInfoClass

此參數只能有下表中顯示的值。

選項 意義
ActivationContextBasicInformation
1
不適用。
ActivationContextDetailedInformation
2
如果使用此選項呼叫 QueryActCtxW ,且函式成功,則傳回的緩衝區會包含啟用內容的詳細資訊。 這項資訊的格式為 ACTIVATION_CONTEXT_DETAILED_INFORMATION 結構。
AssemblyDetailedInformationInActivationContext
3
如果使用此選項呼叫 QueryActCtxW ,且函式成功,則緩衝區會包含 pvSubInstance 中所指定索引的元件相關信息。 這項資訊的格式為 ACTIVATION_CONTEXT_ASSEMBLY_DETAILED_INFORMATION 結構。
FileInformationInAssemblyOfAssemblyInActivationContext
4
啟用內容中其中一個元件中檔案的相關信息。 pvSubInstance 參數必須指向ACTIVATION_CONTEXT_QUERY_INDEX結構。 如果使用此選項呼叫 QueryActCtxW ,且函式成功,則傳回的緩衝區會包含元件中檔案的資訊。 這項資訊的格式為 ASSEMBLY_FILE_DETAILED_INFORMATION 結構。
RunlevelInformationInActivationContext
5
如果使用此選項呼叫 QueryActCtxW ,且函式成功,則緩衝區會包含所要求啟用內容執行層級的相關信息。 這項資訊的格式為 ACTIVATION_CONTEXT_RUN_LEVEL_INFORMATION 結構。

Windows Server 2003 和 Windows XP: 這個值無法使用。

CompatibilityInformationInActivationContext
6
如果使用此選項呼叫 QueryActCtxW ,且函式成功,則緩衝區會包含所要求相容性內容的相關信息。 這項資訊的格式為 ACTIVATION_CONTEXT_COMPATIBILITY_INFORMATION 結構。

Windows Server 2008 和更早版本,以及 Windows Vista 和更早版本: 這個值無法使用。 此選項從 Windows Server 2008 R2 和 Windows 7 開始提供。

[out] pvBuffer

保留傳回信息的緩衝區指標。 這是選擇性參數。 如果 pvBuffernull則 cbBuffer 必須為零。 如果 pvBuffer 所指向的緩衝區大小太小, QueryActCtxW 會傳回ERROR_INSUFFICIENT_BUFFER,而且不會將數據寫入緩衝區。 如需可用來判斷緩衝區所需大小的方法,請參閱一節。

[in, optional] cbBuffer

pvBuffer 所指向位元組的緩衝區大小。 這是選擇性參數。

[out, optional] pcbWrittenOrRequired

寫入或必要的位元組數目。 只有在 pvBufferNULL 時,此參數才能是 null 如果 wwwWrittenOrRequired 為非 NULL,則會填入儲存傳回緩衝區所需的位元組數目。

傳回值

如果函式成功,則會傳回 TRUE。 否則會傳回 FALSE

此函式會設定可藉由呼叫 GetLastError 擷取的錯誤。 如需範例,請參閱 擷取 Last-Error 程序代碼。 如需錯誤碼的完整清單,請參閱 系統錯誤碼

備註

參數 cbBuffer 會指定 pvBuffer 所指向之緩衝區的大小以位元組為單位。 如果 pvBufferNULL則 cbBuffer 必須是 0。 只有在 pvBufferNULL 時,參數才能為 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