// SerialFilter.h - 串口 IRP 拦截 // 职责:作为上层过滤驱动 attach 到串口设备栈 // 拦截 IRP_MJ_READ / IRP_MJ_WRITE / IRP_MJ_DEVICE_CONTROL // 将捕获的数据推入对应端口的环形缓冲 #pragma once #include #include #include "DeviceContext.h" namespace commkit_driver { class SerialFilter { public: // 创建过滤设备并 attach 到串口设备栈 // parent_serial_pdo:下层串口的 PDO // 返回 STATUS_SUCCESS + 设置 *filter_device static NTSTATUS CreateAndAttach(WDFDRIVER driver, PDEVICE_OBJECT serial_pdo, ULONG com_number, WDFDEVICE* out_filter_device); // 拦截 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) static NTSTATUS DispatchRead(WDFDEVICE dev, PIRP irp); static NTSTATUS DispatchWrite(WDFDEVICE dev, PIRP irp); static NTSTATUS DispatchDeviceControl(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