장치 인터페이스 사용하기

장치 인터페이스는 커널 모드 구성 요소와 사용자 모드 애플리케이션 모두에서 사용할 수 있습니다. 사용자 모드 코드는 CfgMgr32 함수 (예: CM_Get_Device_Interface_List) 또는 SetupDiXxx 함수( SetupDi 디바이스 인터페이스 함수 참조)를 사용하여 등록된 활성화된 디바이스 인터페이스에 대해 알아볼 수 있습니다. 그런 다음 사용자 모드 애플리케이션은 CreateFile 과 같은 I/O API를 사용하여 I/O를 디바이스에 보내기 위해 디바이스에 대한 핸들을 가져올 수 있습니다. 디바이스 인터페이스의 활성화 및 비활성화와 해당 작업에 대응하는 방법에 대한 알림을 받으려면 디바이스 인터페이스 도착 및 디바이스 제거 알림 등록을 참조하세요.

커널 모드 구성 요소가 특정 디바이스 또는 파일 개체를 사용하려면 먼저 다음을 수행해야 합니다.

  1. 필요한 디바이스 인터페이스 클래스가 등록되고 사용하도록 설정되었는지 여부를 확인합니다.

    드라이버는 PnP 관리자에 등록하여 디바이스 인터페이스 인스턴스가 사용 또는 사용 안 함으로 설정될 때 알림을 받을 수 있습니다. 등록하기 위해 구성 요소는 IoRegisterPlugPlayNotification을 호출합니다. 이 루틴은 지정된 디바이스 클래스에 대해 디바이스 인터페이스 인스턴스가 활성화되거나 비활성화될 때마다 호출되는 드라이버 제공 콜백의 주소를 저장합니다. 콜백 루틴은 인터페이스 인스턴스의 기호 링크를 나타내는 유니코드 문자열이 포함된 DEVICE_INTERFACE_CHANGE_NOTIFICATION 구조를 수신합니다. 자세한 내용은 PnP 디바이스 인터페이스 변경 알림 사용을 참조하세요.

    드라이버 또는 다른 커널 모드 구성 요소는 IoGetDeviceInterfaces를 호출하여 특정 디바이스 인터페이스 클래스에 대해 등록되고 활성화된 모든 디바이스 인터페이스 인스턴스 목록을 가져올 수도 있습니다. 반환된 목록에는 디바이스 인터페이스 인스턴스를 식별하는 유니코드 기호 링크 문자열에 대한 포인터가 포함되어 있습니다.

  2. 인터페이스 인스턴스에 해당하는 디바이스 또는 파일 개체에 대한 포인터를 가져옵니다.

    특정 디바이스 개체에 접근하려면 드라이버는 IoGetDeviceObjectPointer를 호출하고, ObjectName 매개변수에 필요한 인터페이스의 유니코드 문자열을 전달해야 합니다. 파일 개체에 액세스하려면 드라이버가 InitializeObjectAttributes를 호출하고 ObjectName 매개 변수에 유니코드 문자열을 전달한 다음 ZwCreateFile 호출에서 성공적으로 초기화된 특성 구조를 전달해야 합니다.