Функция 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
Для этого параметра следует задать один из следующих битов флага.
Flag | Значение |
---|---|
|
QueryActCtxW запрашивает активный контекст активации в потоке, а не контекст, указанный в hActCtx. Обычно это последний контекст активации, передаваемый в ActivateActCtx. Если метод ActivateActCtx не был вызван, активным контекстом активации может быть контекст активации, используемый исполняемым файлом текущего процесса. В других случаях операционная система определяет активный контекст активации. Например, при вызове функции обратного вызова для нового потока активный контекст активации может быть контекстом, который был активен при создании потока путем вызова Метода CreateThread. |
|
QueryActCtxW интерпретирует hActCtx как тип данных HMODULE и запрашивает контекст активации, связанный с библиотекой DLL или EXE.
При загрузке библиотеки DLL или EXE загрузчик проверяет наличие манифеста, хранящегося в ресурсе. Если загрузчик находит ресурс RT_MANIFEST с идентификатором ресурса, для которого задано значение ISOLATIONAWARE_MANIFEST_ RESOURCE_ID, загрузчик связывает полученный контекст активации с библиотекой DLL или EXE. Это контекст активации, который QueryActCtxW запрашивает при установке флага QUERY_ACTCTX_FLAG_ACTCTX_IS_HMODULE. |
|
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
Число записанных или обязательных байтов. Параметр pcbWrittenOrRequired может иметь значение NULL , только если pvBuffer имеет значение NULL. Если pcbWrittenOrRequired имеет значение, отличное от NULL, он заполняется количеством байтов, необходимым для хранения возвращаемого буфера.
Возвращаемое значение
Если функция выполняется успешно, возвращается значение TRUE. В противном случае возвращается значение FALSE.
Эта функция задает ошибки, которые можно получить, вызвав Метод GetLastError. Пример см. в разделе Извлечение кода Last-Error. Полный список кодов ошибок см. в разделе Системные коды ошибок.
Комментарии
Параметр cbBuffer задает размер буфера в байтах, на который указывает pvBuffer. Если pvBuffer имеет значение NULL, то cbBuffer должен иметь значение 0. Параметр pcbWrittenOrRequired может иметь значение NULL , только если pvBuffer имеет значение NULL. Если при возврате pcbWrittenOrRequired имеет значение, отличное от 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 |
Header | winbase.h (включая Windows.h) |
Библиотека | Kernel32.lib |
DLL | Kernel32.dll |