디바이스 중지 요청 처리

디바이스의 드라이버에 디바이스 중지를 요청하기 전에 PnP 관리자가 드라이버에게 디바이스를 중지하는 것이 좋은지 묻는 두 가지 상황이 있습니다.

드라이버가 이러한 상황을 처리할 수 있는 방법에는 여러 가지가 있습니다.

  • 디바이스가 특수 파일을 지원하기 때문에 드라이버가 WdfDeviceSetSpecialFileSupport 를 호출한 경우 및 디바이스에서 특수 파일이 열려 있는 경우 프레임워크는 디바이스를 중지할 수 없습니다.

  • 비교적 짧은 시간 동안 모든 중단을 일시적으로 방지하기 위해 드라이버는 WdfDeviceSetStaticStopRemove를 호출할 수 있습니다.

  • 각 중지 시도를 개별적으로 평가하고 처리하기 위해 드라이버는 EvtDeviceQueryStopEvtDeviceQueryRemove 콜백 함수를 제공할 수 있습니다.

디바이스가 특수 파일을 지원하지 않고 디바이스를 중지하거나 제거하는 것이 드라이버 또는 디바이스에 문제가 되지 않는 경우 드라이버는 EvtDeviceQueryStopEvtDeviceQueryRemove 콜백 함수를 제공하지 않으며 WdfDeviceSetStaticStopRemove를 호출하지 않습니다. 이 경우 PnP 관리자는 드라이버가 허용하는지 먼저 확인하지 않고 항상 디바이스를 중지합니다.

리소스 재배포

경우에 따라 PnP 관리자는 시스템의 하드웨어 리소스를 재배포해야 합니다. 일반적으로 이 재배포는 버스 드라이버가 새 디바이스가 연결되어 있다고 보고하고 새 디바이스에 이미 할당된 리소스가 필요하기 때문에 발생합니다. 리소스를 다시 할당하기 전에 디바이스를 중지해야 합니다.

드라이버가 때때로 PnP 관리자가 사용 중인 디바이스를 중지하지 못하도록 해야 하는 경우 드라이버는 EvtDeviceQueryStop 콜백 함수를 제공할 수 있습니다. 드라이버의 EvtDeviceQueryStop 콜백 함수가 오류 상태 값을 반환하는 경우 PnP 관리자는 디바이스를 중지하지 않습니다.

드라이버가 디바이스를 중지하는 것이 안전하다고 판단되면 콜백 함수는 STATUS_SUCCESS 반환합니다. 디바이스의 다른 드라이버 중 어느 것도 중단을 방지하지 않는 경우 PnP 관리자는 디바이스를 일시적으로 중지합니다.

PnP 관리자가 리소스를 재배포하기 위해 디바이스를 중지할 때 프레임워크가 드라이버의 이벤트 콜백 함수를 호출하는 순서에 대한 자세한 내용은 PnP Manager 시스템 리소스 재배포를 참조하세요.

사용자가 디바이스를 제거하거나 사용하지 않도록 설정

사용자는 일부 디바이스를 제거하거나 사용하지 않도록 설정할 수 있습니다. 예:

  • 드라이버가 디바이스 WDF_DEVICE_PNP_CAPABILITIES 구조의이동식 멤버(SurpriseRemovalOK 멤버가 아님)를 설정한 경우 사용자는 하드웨어 프로그램 분리 또는 분리를 실행한 다음 디바이스를 분리하거나 분리할 수 있습니다.

  • 드라이버가 디바이스 WDF_DEVICE_STATE 구조의NotDisable 멤버를 설정하지 않은 경우 사용자는 장치 관리자 사용하여 디바이스를 사용하지 않도록 설정할 수 있습니다.

이러한 경우 PnP 관리자는 사용자가 디바이스를 제거하기 전에 디바이스를 중지하려고 시도합니다.

드라이버가 사용 중인 디바이스의 제거를 방지해야 하는 경우 드라이버는 EvtDeviceQueryRemove 콜백 함수를 제공할 수 있습니다. 드라이버의 EvtDeviceQueryRemove 콜백 함수가 오류 상태 값을 반환하는 경우 PnP 관리자는 디바이스를 중지하지 않습니다.

드라이버가 사용자가 디바이스를 제거하는 것이 안전하다고 판단하면 콜백 함수는 STATUS_SUCCESS 반환합니다. 디바이스의 다른 드라이버가 제거를 방지하지 않으면 PnP 관리자가 디바이스를 중지합니다.

제거를 위해 디바이스를 중지할 때 프레임워크가 드라이버의 이벤트 콜백 함수를 호출하는 순서에 대한 자세한 내용은 사용자가 디바이스 플러그를 뽑기를 참조하세요.