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는 0이어야 합니다. pvBuffer가 가리키는 버퍼의 크기가 너무 작으면 QueryActCtxW는 ERROR_INSUFFICIENT_BUFFER 반환하며 버퍼에 데이터가 기록되지 않습니다. 버퍼의 필요한 크기를 결정하는 데 사용할 수 있는 방법은 설명 섹션을 참조하세요.
[in, optional] cbBuffer
pvBuffer가 가리키는 버퍼의 크기(바이트)입니다. 이 매개 변수는 선택적 요소입니다.
[out, optional] pcbWrittenOrRequired
기록되거나 필요한 바이트 수입니다. pcbWrittenOrRequired 매개 변수는 pvBuffer가 NULL인 경우에만 NULL일 수 있습니다. pcbWrittenOrRequired가 NULL이 아닌 경우 반환된 버퍼를 저장하는 데 필요한 바이트 수로 채워집니다.
반환 값
함수가 성공하면 TRUE를 반환합니다. 그렇지 않으면 FALSE를 반환합니다.
이 함수는 GetLastError를 호출하여 검색할 수 있는 오류를 설정합니다. 예제는 Last-Error 코드 검색을 참조하세요. 오류 코드의 전체 목록은 시스템 오류 코드를 참조하세요.
설명
cbBuffer 매개 변수는 pvBuffer가 가리키는 버퍼의 크기(바이트)를 지정합니다. pvBuffer가 NULL인 경우 cbBuffer는 0이어야 합니다. pcbWrittenOrRequired 매개 변수는 pvBuffer가 NULL인 경우에만 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 |
헤더 | winbase.h(Windows.h 포함) |
라이브러리 | Kernel32.lib |
DLL | Kernel32.dll |