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 时,参数“pvcWrittenOrRequired”只能为 NULL。 如果 httpWrittenOrRequired 为非 NULL,则用存储返回的缓冲区所需的字节数填充它。
返回值
如果函数成功,则返回 TRUE。 否则,它将返回 FALSE。
此函数设置可通过调用 GetLastError 检索的错误。 有关示例,请参阅 检索 Last-Error 代码。 有关错误代码的完整列表,请参阅 系统错误代码。
注解
参数 cbBuffer 指定 pvBuffer 指向的缓冲区的大小(以字节为单位)。 如果 pvBuffer 为 NULL,则 cbBuffer 必须为 0。 仅当 pvBuffer 为 NULL 时,参数“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 |