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
QueryActCtxWhActCtx 解释为 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
QueryActCtxWhActCtx 解释为 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 时,参数“pvcWrittenOrRequired”只能为 NULL。 如果 httpWrittenOrRequired 为非 NULL,则用存储返回的缓冲区所需的字节数填充它。

返回值

如果函数成功,则返回 TRUE。 否则,它将返回 FALSE

此函数设置可通过调用 GetLastError 检索的错误。 有关示例,请参阅 检索 Last-Error 代码。 有关错误代码的完整列表,请参阅 系统错误代码

注解

参数 cbBuffer 指定 pvBuffer 指向的缓冲区的大小(以字节为单位)。 如果 pvBufferNULL,则 cbBuffer 必须为 0。 仅当 pvBufferNULL 时,参数“pvcWrittenOrRequired”只能为 NULL。 如果 返回时,dwrittenOrRequired 为非 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)
Library Kernel32.lib
DLL Kernel32.dll