| 12345678910111213141516171819202122232425262728293031323334353637383940 |
- // SerialFilter.h - 串口 IRP 拦截
- // 职责:作为上层过滤驱动 attach 到串口设备栈
- // 拦截 IRP_MJ_READ / IRP_MJ_WRITE / IRP_MJ_DEVICE_CONTROL
- // 将捕获的数据推入对应端口的环形缓冲
- #pragma once
- #include <ntddk.h>
- #include <wdf.h>
- #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);
- // IRP 派遣例程:透传到下层 + 注册完成例程
- static NTSTATUS DispatchRead(PDEVICE_OBJECT dev, PIRP irp);
- static NTSTATUS DispatchWrite(PDEVICE_OBJECT dev, PIRP irp);
- static NTSTATUS DispatchDeviceControl(PDEVICE_OBJECT 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
|