AuxKlibQueryModuleInformation 함수(aux_klib.h)
AuxKlibQueryModuleInformation 루틴은 운영 체제가 로드한 이미지 모듈에 대한 정보를 검색합니다.
통사론
NTSTATUS AuxKlibQueryModuleInformation(
[in, out] PULONG BufferSize,
[in] ULONG ElementSize,
[out, optional] PVOID QueryInfo
);
매개 변수
[in, out] BufferSize
버퍼 크기를 포함하거나 수신하는 위치에 대한 포인터(바이트)입니다.
[in] ElementSize
QueryInfo를 배열의 각 요소 크기(바이트) 가리킵니다. 이 값은 sizeof(AUX_MODULE_BASIC_INFO) 또는 sizeof(AUX_MODULE_EXTENDED_INFO)이어야 합니다.
[out, optional] QueryInfo
로드된 이미지 모듈에 대한 정보를 수신하는 AUX_MODULE_BASIC_INFO 또는 AUX_MODULE_EXTENDED_INFO 구조의 배열에 대한 포인터입니다. 이 포인터가 NULL
반환 값
AuxKlibQueryModuleInformation 작업이 성공하면 STATUS_SUCCESS 반환합니다.
루틴은다른
발언
운영 체제의 로드된 이미지 모듈에 대한 정보를 얻으려면 드라이버는 다음을 수행해야 합니다.
- NULLQueryInfo 포인터를 사용하여 AuxKlibQueryModuleInformation 호출합니다. AuxKlibQueryModuleInformation 반환되면 BufferSize 매개 변수가 가리키는 위치에 드라이버가 배열에 할당해야 하는 바이트 수가 포함됩니다.
- ExAllocatePoolWithTag같은 메모리 할당 루틴을 호출하여 배열에 대한 버퍼를 할당합니다.
- AuxKlibQueryModuleInformation 다시 호출합니다. 이번에는 QueryInfo 포인터에 할당된 버퍼의 주소가 포함되어야 합니다. AuxKlibQueryModuleInformation 반환되면 버퍼에는 모듈 정보 배열이 포함됩니다.
AuxKlibQueryModuleInformation 호출이 성공하면 루틴은 QueryInfo 배열의 각 요소에 ImageBase 값을 씁니다. 각 ImageBase 값은 로드된 드라이버 이미지의 기반에 대한 포인터입니다. 이 포인터는 드라이버가 로드된 상태로 유지되는 동안에만 유효합니다. 호출자는 호출자가 달리 보장할 수 없는 한 언제든지 드라이버를 언로드할 수 있다고 가정해야 합니다. 예를 들어 드라이버 이미지에 대한 포인터를 가져오는 AuxKlibQueryModuleInformation 호출과 이 포인터를 사용하는 AuxKlibGetImageExportDirectory 호출 간에 드라이버가 언로드될 수 있습니다.
드라이버는 AuxKlibQueryModuleInformation호출하기 전에 AuxKlibInitialize 호출해야 합니다.
예제
다음 코드 예제에서는 이전 주의 섹션에 나열된 단계를 보여 줍니다.
NTSTATUS status;
ULONG modulesSize;
AUX_MODULE_EXTENDED_INFO* modules;
ULONG numberOfModules;
//
// Get the required array size.
//
status = AuxKlibQueryModuleInformation(
&modulesSize,
sizeof(AUX_MODULE_EXTENDED_INFO),
NULL
);
if (!NT_SUCCESS(status) || modulesSize == 0) {
break;
}
//
// Calculate the number of modules.
//
numberOfModules = modulesSize / sizeof(AUX_MODULE_EXTENDED_INFO);
//
// Allocate memory to receive data.
//
modules =
(AUX_MODULE_EXTENDED_INFO*) ExAllocatePoolWithTag(
PagedPool,
modulesSize,
'3LxF'
);
if (modules == NULL) {
status = STATUS_INSUFFICIENT_RESOURCES;
break;
}
RtlZeroMemory(
modules,
modulesSize
);
//
// Obtain the module information.
//
status = AuxKlibQueryModuleInformation(
&modulesSize,
sizeof(AUX_MODULE_EXTENDED_INFO),
modules
);
if (!NT_SUCCESS(status)) {
break;
}
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000부터 지원됩니다. |
대상 플랫폼 | 보편적 |
헤더 | aux_klib.h(Aux_klib.h 포함) |
라이브러리 | Aux_Klib.lib |
IRQL |
PASSIVE_LEVEL |
참고 항목
AuxKlibGetImageExportDirectory
exAllocatePoolWithTag