J'utilise l'exemple KbFilter dans le WDK, en essayant d'envoyer un IOCTL dans une fonction appelée par KbFilter_ServiceCallback et donc exécuté à DISPATCH_LEVEL. La fonction doit simplement envoyer un IOCTL et revenir, je n'attends pas qu'un buffer de sortie soit rempli pour qu'il puisse être asynchrone, fire et forget.Envoi d'IOCTL à partir d'IRQL = DISPATCH_LEVEL (KbFilter/KMDF)
J'utilise actuellement les fonctions WDF WdfIoTargetFormatRequestForIoctl et WdfRequestSend essayer d'envoyer à DISPATCH_LEVEL et ne rien obtenir. L'appel à WdfRequestSend réussit mais l'IOCTL ne semble pas être reçu.
En utilisant l'une des WdfIoTargetSendIoctlSynchronously ou le modèle WDM IoBuildDeviceIoControlRequest() et IoCallDriver() exige PASSIVE_LEVEL et la seule façon que je sais d'appeler ces derniers à PASSIVE_LEVEL est de créer un thread séparé qui fonctionne à PASSIVE_LEVEL et transmettre des instructions via un tampon ou une file d'attente, synchronisé avec un spinlock et un sémaphore. Quelqu'un peut-il me dire s'il existe un moyen plus simple de transmettre des IOCTL aux pilotes sous mon filtre, ou si le thread/file d'attente approche le modèle normal lorsque vous devez faire des choses à un IRQL plus élevé? Dans quelles circonstances puis-je utiliser KeRaiseIrql et est-ce que je devrais utiliser? Merci.
Je ne suis pas familier avec WDF. –
Merci, comment créer la requête IOCTL au niveau de l'envoi? IoAllocateIrp et IoCallDriver sont tous deux valides au niveau de la répartition, mais IoBuildDeviceIoControlRequest requiert un niveau passif. –
réellement http://msdn.microsoft.com/en-us/library/ms801530.aspx dit qu'il a besoin au moins de niveau APC, alors que http://www.osronline.com/DDKx/kmarch/k104_8ble.htm dit qu'il a besoin être au niveau passif .. étrange –