2017-02-01 2 views
0

comment envoyer la demande au prochain pilote dans la pile pour l'achever?Comment pré-traiter le tampon et passer par

Dans mon pilote de pilote de filtre je me inscrire une file d'attente pour EventWrite avec EvtDeviceIoWrite de rappel comme suit:

VOID 
EvtDeviceIoWrite(
    IN WDFQUEUE Queue, 
    IN WDFREQUEST Request, 
    IN size_t Length 
) 
{ 
    WDFMEMORY memory; 
    NTSTATUS status; 
    PUCHAR characters; 
    UCHAR currentChar; 
    UNREFERENCED_PARAMETER(Queue); 

    status = WdfRequestRetrieveInputMemory(Request, &memory); 
    if (!NT_SUCCESS(status)) { 
     KdPrint(("RetreiveInputMemo: failed 0x%x\n", status)); 
     return; 
    } 
    characters = (PUCHAR)WdfMemoryGetBuffer(memory, NULL); 
    while (Length != 0) { 
     Length--; 
     currentChar = *(characters++); 
     // Here I would like to edit the buffer 
     // copy it to output buffer WdfMemoryCopyFromBuffer 
    } 
    **// what should be here for send** 
} 

Je veux juste faire quelque chose comme this, mais pour la demande. Désolé, je suis débutant dans le développement du noyau, et ce sera formidable si quelqu'un pouvait me diriger vers la bonne voie pour y parvenir. Toute suggestion sera appréciée.

+0

Ou je fais juste completly mal, s'il vous plaît me conseiller –

Répondre

0

en Windows-driver-samples existe énorme compte d'exemples comment faire Forwarding I/O Requests. Prenons par exemple d'abord simplement le code comme dans filter.c - ici ce fait par FilterForwardRequest ou FilterForwardRequestWithCompletionRoutine - donc en général appelé

WdfRequestSend(Request, WdfDeviceGetIoTarget(WdfIoQueueGetDevice(Queue)),WDF_NO_SEND_OPTIONS); 
+0

J'ai essayé de cette façon, mais malheureusement, ce ne marche pas. Pour le tester, j'ai configuré cette connexion et envoyé des données: 'echo 'a' -> virual machnie com2 <-> port hôte -com3 com4 <- Termite (serial termial)', et sans le pilote les paquets de données sont envoyés correctement. Comme j'ai installé ce pilote avec votre proposition tous les paquets sont reçus sur com4 –

+0

J'ai vérifié aussi que la commande WdfRequestSend est appelée quand les données sont envoyées à com2 –

+0

WdfRequestSend renvoie false, donc j'ai vérifié WdfRequestStatus, et le statut est égal (printf "% x ", le statut) 1f82d524, tout serait bien si ce nombre avait été dans la documentation microsoft .... –