SerialFilter.h 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738
  1. // SerialFilter.h - 串口 IRP 拦截
  2. // 职责:作为上层过滤驱动 attach 到串口设备栈
  3. // 拦截 IRP_MJ_CREATE / CLOSE / READ / WRITE
  4. // 将捕获的数据推入对应端口的环形缓冲
  5. #pragma once
  6. #include <ntddk.h>
  7. #include <wdf.h>
  8. #include "DeviceContext.h"
  9. namespace commkit_driver {
  10. // 全局原子序列号(所有事件类型共享,保证 Sequence 字段全局唯一递增)
  11. extern LONG g_sequence_counter;
  12. class SerialFilter {
  13. public:
  14. // 拦截 IRP_MJ_READ 完成:捕获数据并推入环形缓冲
  15. static NTSTATUS OnReadComplete(PDEVICE_OBJECT dev, PIRP irp, PVOID ctx);
  16. // 拦截 IRP_MJ_WRITE 完成:捕获数据并推入环形缓冲
  17. static NTSTATUS OnWriteComplete(PDEVICE_OBJECT dev, PIRP irp, PVOID ctx);
  18. // WDM IRP 预处理回调(KMDF 签名:WDFDEVICE, PIRP)
  19. // CREATE/CLOSE: 捕获/释放 FileObject + OP_OPEN/OP_CLOSE 事件
  20. // READ/WRITE: 数据捕获(设置完成例程)
  21. static NTSTATUS DispatchCreate(WDFDEVICE dev, PIRP irp);
  22. static NTSTATUS DispatchClose(WDFDEVICE dev, PIRP irp);
  23. static NTSTATUS DispatchRead(WDFDEVICE dev, PIRP irp);
  24. static NTSTATUS DispatchWrite(WDFDEVICE dev, PIRP irp);
  25. private:
  26. // 从 IRP 中提取数据并推入环形缓冲
  27. // event_type:COMMKIT_OP_READ 或 COMMKIT_OP_WRITE
  28. static void CaptureIrpData(PDEVICE_CONTEXT ctx, PIRP irp, ULONG event_type);
  29. };
  30. } // namespace commkit_driver