다음을 통해 공유


디바이스 인터페이스 사용

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

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

  1. 필요한 디바이스 인터페이스 클래스를 등록하고 사용할 수 있는지 여부를 확인합니다.

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

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

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

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