📄 comspy.h
字号:
/*++
Copyright (c) 1997 Microsoft Corporation
Module Name:
Abstract:
Environment:
kernel mode only
Notes:
Revision History:
--*/
#include <ntddk.h>
#include <devioctl.h>
#include <initguid.h>
#include <wdmguid.h>
#include <ntddser.h>
#include <stdio.h>
#define FILE_DEVICE_COMSPY 0x00001001
// Output buffer will contain MHANDLE value that application
// should use in all subsequent calls to this driver
#define IOCTL_COMSPY_STARTMONITOR \
CTL_CODE(FILE_DEVICE_COMSPY, 0x0801, METHOD_BUFFERED, \
FILE_ANY_ACCESS)
// Input buffer contains MHANDLE value application received
// in a call to IOCTL_START_MONITOR
#define IOCTL_COMSPY_STOPMONITOR \
CTL_CODE(FILE_DEVICE_COMSPY, 0x0802, METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IO_REFERENCE_EVENT \
CTL_CODE(FILE_DEVICE_COMSPY, 0x0803, METHOD_NEITHER, \
FILE_ANY_ACCESS)
#define IO_DEREFERENCE_EVENT \
CTL_CODE(FILE_DEVICE_COMSPY, 0x0804, METHOD_NEITHER, \
FILE_ANY_ACCESS)
#define IO_SET_EVENT \
CTL_CODE(FILE_DEVICE_COMSPY, 0x0805, METHOD_NEITHER, \
FILE_ANY_ACCESS)
#define IO_CLEAR_EVENT \
CTL_CODE(FILE_DEVICE_COMSPY, 0x0806, METHOD_NEITHER, \
FILE_ANY_ACCESS)
#define IO_QUERY_EVENT_STATE \
CTL_CODE(FILE_DEVICE_COMSPY, 0x0807, METHOD_NEITHER, \
FILE_ANY_ACCESS)
#define IO_GET_SHAREMEMORY_ADDR \
CTL_CODE(FILE_DEVICE_COMSPY, 0x0808, METHOD_BUFFERED, \
FILE_ANY_ACCESS)
#define IO_CLEAN_SHAREMEMORY_ADDR \
CTL_CODE(FILE_DEVICE_COMSPY, 0x0809, METHOD_BUFFERED, \
FILE_ANY_ACCESS)
////////////////////
enum
{
REQ_OPEN,
REQ_READ,
REQ_WRITE,
REQ_CLOSE,
REQ_FLUSH,
REQ_SETBAUDRATE,
REQ_SETLINECONTROL,
};
//
typedef struct tagIO_REQ
{
ULONG SizeTotal;
ULONG SizeCopied;
// ULONG SizeRequested;
CHAR type;
LIST_ENTRY entry;
PVOID pData;
}IO_REQ, *PIO_REQ;;
typedef struct _DEVICE_EXTENSION
{
ULONG NodeType; // 标识这个结构
ULONG NodeSize; // 这个结构的大小
KSPIN_LOCK IoRequestsSpinLock; // 同时调用时的保护锁
KEVENT IoInProgressEvent; // 进程间同步处理
LARGE_INTEGER OutstandingIoRequests;
PDEVICE_OBJECT pFilterDeviceObject; // 过滤设备对象(自身)
PDEVICE_OBJECT TargetDeviceObject; // 绑定的设备对象
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;
typedef struct _ZT_DEVICE_EXTENSION
{
PDEVICE_OBJECT fdo;
PMDL MyMdl;
PVOID SystemVirtualAddress;
PVOID UserVirtualAddress;
} ZT_DEVICE_EXTENSION,*PZT_DEVICE_EXTENSION;
// Prototypes
//
NTSTATUS DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
);
VOID
ComSpy_Unload (
IN PDRIVER_OBJECT DriverObject
);
NTSTATUS
ComSpy_Create(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
ComSpy_Close(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
ComSpy_DispatchPassThrough(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
ComSpy_Read (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
ComSpy_Write (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
ComSpy_IoCtl (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
ComSpy_Power(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp) ;
NTSTATUS
ComSpy_PnP(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp) ;
VOID RequestCancelRoutine(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp);
NTSTATUS CompleteRequest (
IN PIRP Irp,
IN NTSTATUS status,
IN ULONG info
);
NTSTATUS
IOCtrl_CreateClose(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp);
NTSTATUS
Add_IoControlDevice( IN PDRIVER_OBJECT DriverObj, IN PUNICODE_STRING RegtryPath);
NTSTATUS IOCtrl_Read(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp);
NTSTATUS IOCtrl_Write(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp);
NTSTATUS IOCtrl_IoCtl(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp);
NTSTATUS IOCtrl_Power(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp);
NTSTATUS IOCtrl_PnP(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp);
//
NTSTATUS DefaultCompletion(IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,IN PVOID Context);
NTSTATUS ReadCompletion(IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,IN PVOID Context);
NTSTATUS WriteCompletion(IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,IN PVOID Context);
NTSTATUS CloseCompletion(IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,IN PVOID Context);
NTSTATUS OpenCompletion(IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,IN PVOID Context);
NTSTATUS IOCompletion(IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp,IN PVOID Context);
VOID FreeGloabalLst(IN PDEVICE_OBJECT DeviceObject);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -