Estoy utilizando el ejemplo de KbFilter en el WDK, tratando de enviar un IOCTL en una función que es llamada por KbFilter_ServiceCallback y por lo tanto se ejecuta en DISPATCH_LEVEL. La función solo tiene que enviar un IOCTL y regresar, no estoy esperando que se llene un buffer de salida para que pueda ser asincrónico, disparar y olvidar.Enviando IOCTL de IRQL = DISPATCH_LEVEL (KbFilter/KMDF)
Actualmente estoy usando el WDF funciones WdfIoTargetFormatRequestForIoctl y WdfRequestSend para tratar de enviar al DISPATCH_LEVEL y no conseguir nada. La llamada a WdfRequestSend está teniendo éxito, pero el IOCTL no parece ser recibido.
El uso de cualquiera de WdfIoTargetSendIoctlSynchronously o el patrón WDM IoBuildDeviceIoControlRequest() y IoCallDriver() requiere PASSIVE_LEVEL y la única manera que conozco para llamar a estos en PASSIVE_LEVEL es crear un hilo separado que funciona a PASSIVE_LEVEL y pasarlo instrucciones a través de un búfer o una cola, sincronizado con un spinlock y un semáforo.
¿Alguien me puede decir si hay una manera más fácil de pasar IOCTLs a los controladores debajo de mi filtro, o el hilo/cola se aproxima al patrón normal cuando necesitas hacer cosas con un IRQL más alto? ¿Bajo qué circunstancias puedo usar KeRaiseIrql y esto es lo que debo usar? Gracias.
No estoy familiarizado con WDF. –
Gracias, ¿cómo creo la solicitud IOCTL en el nivel de envío? IoAllocateIrp e IoCallDriver están bien en el nivel de envío, pero IoBuildDeviceIoControlRequest requiere nivel pasivo. –
realmente http://msdn.microsoft.com/en-us/library/ms801530.aspx dice que necesita al menos nivel APC, mientras que http://www.osronline.com/DDKx/kmarch/k104_8ble.htm dice que necesita estar en el nivel pasivo ... extraño –