2017-01-11 5 views
1

Windows에서 필터 드라이버를 개발 중입니다. 드라이버는 장치 통지를 수신하기 위해 PnP를 인식하며 IOCTL을 통해 동반 된 usermode 서비스와 통신하기위한 제어 장치를 생성합니다.필요에 따라 플러그 앤 플레이 필터 드라이버를 중지하는 방법?

내가 아는 한, 드라이버의 수명은 PnP 관리자가 제어합니다. 드라이버는 장치 오브젝트가 드라이버에 의해 소유되어 있지 않다면 다음 장치 통지를 처리 ​​한 후 언로드됩니다.

내가해야할 일은 다음 장치가 도착/출발 할 때가 아니라 요구에 따라 운전자를 멈추는 것입니다. 지금까지는 그것이 작동하도록되어있는 방법이라고 생각하지 않습니다. 반면에 필 요에 따라 필터 드라이버를 언로드하는 것을 금지하는 논리는 없습니다. 내가 STOP 컨트롤을 보내는 것을 연구했는데 PnP 드라이버 (레거시 드라이버에서만 작동)에서 어떻게 처리 할 수 ​​있는지 보지 못했습니다.

지금 당장은 모든 장치 개체를 닫을 특별한 IOCTL 처리기를 추가 할 생각입니다. 그러나 그 정도면 충분하지 않습니다. 드라이버의 수명은 PnP 관리자가 관리합니다. 그래서 어떻게 든 드라이버에 대한 관리자의 관심을 끌 필요가 있습니다. 어떤 도움을 주셔서 감사합니다!

궁금한 점이 있으시면 드라이버를 제거 할 수 있도록 드라이버를 제거해야합니다.

답변

0

WDM 필터 드라이버는 항상 장치 스택에 장치를 연결합니다. 이 후에 다른 장치가이 스택에 연결될 수 있으므로 장치에 연결됩니다. 이 드라이버를 이미 언로드 할 수 없으면

드라이버가이하기에 DRIVER_OBJECT 참조가이 장치 스택에서 분리 필요가 없습니다 당신의 DEVICE_OBJECTs 모두를 파괴하는 경우에만 언로드 할 수 있습니다. WDM 필터 드라이버에 대한 하나의 올바른 방법은 IRP_MN_REMOVE_DEVICE을 처리 할 때 Removing a Device in a Filter Driver을 읽거나 다른 방법으로 을 FastIoDetachDevice으로 드라이버에 등록 할 수 있습니다. 결과적으로 FastIoDetachDevice은 첨부 된 DeviceObject에 대해 IoDeleteDevice이 호출 될 때 호출됩니다. 또한 IRP_MN_REMOVE_DEVICE 프로세스 동안). 이 순간에 IoDetachDeviceIoDeleteDevice이 필요합니다 -이 드라이버를 언로 드할 수 있고 PnP 관리자가 더 이상 DeviceObjects 또는 드라이버에 대한 다른 참조가 없으면 자동으로이 작업을 수행해야합니다.

언로드 WDM 드라이버에 대한 하나의 옵션 - 전체 스택 device stack - 런타임에 모든 스택을 중지 할 수있는 것은 아닙니다. 일부는 - CM_Request_Device_Eject으로 전화를 걸 수 있습니다 - 은 장치를 제거 할 수있는 경우 안전한 제거를 위해 로컬 장치 인스턴스를 준비합니다. 장치를 물리적으로 꺼낼 수 있으면됩니다.