WDK에서 KbFilter 예제를 사용 중입니다. KbFilter_ServiceCallback에서 호출되는 함수에서 IOCTL을 보내려고하므로 DISPATCH_LEVEL에서 실행됩니다. 이 함수는 단지 IOCTL을 보내고 반환해야합니다. 출력 버퍼가 채워지는 것을 기다리지 않아서 비동기, 화재 및 잊어 버릴 수 있습니다. 나는 현재 WDF를 사용하고IRQL = DISPATCH_LEVEL (KbFilter/KMDF)에서 IOCTL 보내기
시도하고 DISPATCH_LEVEL에서 아무것도 점점하지 보낼 WdfIoTargetFormatRequestForIoctl 및 WdfRequestSend을 작동합니다. WdfRequestSend에 대한 호출이 성공하지만 IOCTL이 수신 된 것으로 나타나지 않습니다. WdfIoTargetSendIoctlSynchronously 또는 WDM 패턴 IoBuildDeviceIoControlRequest() 및 위해 IoCallDriver()는 PASSIVE_LEVEL하고있는 유일한 방법이 필요 내가 PASSIVE_LEVEL에서 실행되는 별도의 스레드를 생성하고 그것을 지시 사항을 전달하는 PASSIVE_LEVEL에서이입니다 전화를 알고 중 하나를 사용
버퍼 또는 대기열을 통해 스핀 록 및 세마포어와 동기화됩니다.
더 높은 IRQL에서 일을해야 할 때 내 필터 아래 드라이버에 IOCTL을 전달하는 더 쉬운 방법이 있는지 또는 스레드/대기열 접근 방식이 정상적인 패턴인지 사용자가 알 수 있습니까? 어떤 상황에서 사용할 수 있습니까 KeRaiseIrql 그리고 내가 뭘 사용해야합니까? 감사.
내가 WDF에 익숙하지 않다 : 여기
는 코드입니다. –감사합니다. 디스패치 수준에서 IOCTL 요청을 어떻게 만듭니 까? IoAllocateIrp와 IoCallDriver는 모두 디스패치 수준에서는 정상이지만 IoBuildDeviceIoControlRequest는 수동 수준이 필요합니다. –
실제로는 http://msdn.microsoft.com/en-us/library/ms801530.aspx에 의하면 적어도 APC 레벨이 필요하지만 http://www.osronline.com/DDKx/kmarch/k104_8ble.htm은 필요하다고 말하고 있습니다. 이상한 –