Sto utilizzando l'esempio KbFilter nel WDK, provando a inviare un IOCTL in una funzione chiamata da KbFilter_ServiceCallback e pertanto viene eseguito su DISPATCH_LEVEL. La funzione deve solo inviare un IOCTL e restituire, non sto aspettando che un buffer di output venga riempito in modo che possa essere asincrono, accendere e dimenticare.Invio di IOCTL da IRQL = DISPATCH_LEVEL (KbFilter/KMDF)
Attualmente sto usando il WDF Funzioni di WdfIoTargetFormatRequestForIoctl e WdfRequestSend per cercare di trasmettere a DISPATCH_LEVEL e ottenere nulla. La chiamata a WdfRequestSend è riuscita ma il IOCTL non sembra essere ricevuto.
Utilizzando uno dei WdfIoTargetSendIoctlSynchronously o il modello WDM IoBuildDeviceIoControlRequest() e IoCallDriver() richiede PASSIVE_LEVEL e l'unico modo che conosco per chiamare questi a PASSIVE_LEVEL è quello di creare un thread separato che funziona a PASSIVE_LEVEL e passarlo istruzioni tramite un buffer o una coda, sincronizzati con uno spinlock e un semaforo.
Qualcuno può dirmi se esiste un modo più semplice per passare gli IOCTL ai driver sotto il mio filtro, oppure la filettatura/coda si avvicina al modello normale quando è necessario eseguire operazioni su un IRQL superiore? In quali circostanze posso usare KeRaiseIrql ed è questo che dovrei usare? Grazie.
non ho familiarità con WDF. –
Grazie, come posso creare la richiesta IOCTL a livello di spedizione? IoAllocateIrp e IoCallDriver sono entrambi ok a livello di invio, ma IoBuildDeviceIoControlRequest richiede un livello passivo. –
in realtà http://msdn.microsoft.com/en-us/library/ms801530.aspx dice che ha bisogno almeno del livello APC, mentre http://www.osronline.com/DDKx/kmarch/k104_8ble.htm dice che ha bisogno essere al livello passivo .. strano –