2017-02-01 8 views
0

を通過させるには?次のように私は、コールバックEvtDeviceIoWriteでEventWriteのためのキューを登録し、私のフィルタドライバドライバでバッファを前処理し、さらに完了するためにスタック内の次のドライバにリクエストを送信する方法

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** 
} 

私はちょうどthisような何かをしたいが、要求のために。

申し訳ありません私はカーネル開発の初心者です。誰かがこれを達成するための正しい方法を教えてくれれば幸いです。すべての訴訟は評価されます。

+0

と呼ばれるように、または私はちょうどそれがcompletly間違っている、私に –

答えて

0

Windows-driver-samples存在する例の巨大なカウントForwarding I/O Requests。最初例えばfilter.cのように単純にコードを取る - ここで、これはFilterForwardRequestまたはFilterForwardRequestWithCompletionRoutineによって行わ - 一般的に

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

をアドバイスをしてくださいください、私はこれをそのようにしようとしたが、残念ながらそれてきました動作しません。それをテストするために、私はその接続を設定し、データを送信しました。 'echo 'a - > virual machnie com2 <->ホストポート-com3 com4 < - Termite(serial termial)'、ドライバなしではデータパケットが正しく送信されます。このドライバをあなたの提案と共にインストールしました。 –

+0

データがcom2に送信されたときにWdfRequestSendコマンドが呼び出されたことを確認しました。 –

+0

WdfRequestSendがfalseを返してWdfRequestStatusをチェックし、ステータスが同じです(printf "%x "、status)1f82d524、その数がマイクロソフトの文書化であれば、すべてが素晴らしいでしょう。 –

関連する問題