IoEnumerateDeviceObjectList 함수(ntifs.h)
IoEnumerateDeviceObjectList 루틴은 드라이버의 디바이스 개체 목록을 열거합니다.
통사론
NTSTATUS IoEnumerateDeviceObjectList(
[in] PDRIVER_OBJECT DriverObject,
[out] PDEVICE_OBJECT *DeviceObjectList,
[in] ULONG DeviceObjectListSize,
[out] PULONG ActualNumberDeviceObjects
);
매개 변수
[in] DriverObject
드라이버의 드라이버 개체에 대한 포인터입니다.
[out] DeviceObjectList
디바이스 개체 포인터를 수신하는 호출자 할당 배열에 대한 포인터입니다. 이 배열은 페이지가 없는 풀에서 할당해야 합니다. 이 매개 변수는 NULL일 수 있습니다. 비고를 참조하세요.
[in] DeviceObjectListSize
DeviceObjectList 배열의 크기(바이트)입니다. 이 매개 변수는 0일 수 있습니다. 비고를 참조하세요.
[out] ActualNumberDeviceObjects
드라이버 개체의 디바이스 개체 목록에 있는 실제 디바이스 개체 수입니다. DeviceObjectList 배열이 너무 작으면 배열에 복사되는 디바이스 개체 포인터 수가 actualNumberDeviceObjects 미만입니다.
반환 값
IoEnumerateDeviceObjectList 다음 값 중 하나와 같은 NTSTATUS 코드를 반환합니다.
반환 코드 | 묘사 |
---|---|
STATUS_SUCCESS | IoEnumerateDeviceObjectList에 대한 호출이 성공적으로 완료되지. |
STATUS_BUFFER_TOO_SMALL | DeviceObjectList 배열이 너무 작아서 전체 디바이스 개체 목록을 보관할 수 없습니다. 이 경우 IoEnumerateDeviceObjectList는 가능한 한 많은 디바이스 개체 포인터를 배열에 복사할 있습니다. |
발언
파일 시스템 필터 드라이버는 IoEnumerateDeviceObjectList 호출하여 다음을 열거합니다.
만든 디바이스 개체입니다. 이 작업은 일반적으로 드라이버가 언로드를 준비할 때 수행됩니다. 필터 드라이버는 실행 중인 시스템에서 안전하게 언로드할 수 없습니다. 자세한 내용은 ZwUnloadDriver참조하세요.
기본 파일 시스템에서 만든 디바이스 개체이므로 필터는 연결할 수 있는 볼륨의 수를 알 수 있습니다.
IoEnumerateDeviceObjectList 필터 드라이버에서 만든 모든 디바이스 개체를 반환합니다. 여기에는 CDO(제어 디바이스 개체) 및 VDO(볼륨 디바이스 개체)가 포함됩니다. 두 가지 유형의 디바이스 개체는 규칙에 따라 CDO의 이름이 지정되고 VDO가 아니라는 사실로 구분할 수 있습니다.
후자의 경우 필터 드라이버는 일반적으로 IoEnumerateDeviceObjectList 두 번 호출합니다. 한 번은 목록에 있는 디바이스 개체 수를 가져오기 위해, 한 번은 디바이스 개체 목록 자체를 가져옵니다. 첫 번째 호출에서 호출자는 DeviceObjectList 매개 변수를 NULL로 설정하고 DeviceObjectListSize 0으로 합니다. 두 번째 호출에서 DeviceObjectList 적절한 크기의 포인터 배열에 대한 포인터를 포함해야 하며, DeviceObjectListSize 해당 배열의 크기(바이트)를 포함해야 합니다.
IoEnumerateDeviceObjectListDeviceObjectList가리키는 목록의 모든 디바이스 개체에 대한 참조 수를 증분합니다. 따라서 IoEnumerateDeviceObjectList 대한 모든 성공적인 호출은 목록의 각 디바이스 개체에 대해 ObDereferenceObject 대한 후속 호출과 일치해야 합니다. 이렇게 하지 않으면 시스템이 미해결 참조 횟수 때문에 이러한 디바이스 개체를 해제하거나 삭제할 수 없습니다.
요구 사항
요구 | 값 |
---|---|
지원되는 최소 클라이언트 | Windows 2000 SP4 업데이트 롤업; Windows XP |
대상 플랫폼 | 보편적 |
헤더 | ntifs.h(Ntifs.h 포함) |
라이브러리 | NtosKrnl.lib |
DLL | NtosKrnl.exe |
IRQL | <= DISPATCH_LEVEL |