다음을 통해 공유


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

추가 정보

ExAllocatePool2

ExAllocatePool3

IoGetAttachedDevice

IoGetAttachedDeviceReference

IoGetLowerDeviceObject

ObDereferenceObject

ZwUnloadDriver