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