⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 comspy.h

📁 串口过滤驱动
💻 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 + -