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

📄 amc2102.h

📁 这是一个人精简的1394设备驱动程序
💻 H
字号:
#ifdef __cplusplus
extern "C"
{
#endif

#include "wdm.h"
#include "ntddk.h"

#ifdef __cplusplus
}
#endif

#include "DebugPrint.h"
#include "1394.h"

// {3EFBDF37-EBDE-41fa-8742-D60A6B6B48E4}
DEFINE_GUID(V1394_GUID, 
0x3efbdf37, 0xebde, 0x41fa, 0x87, 0x42, 0xd6, 0xa, 0x6b, 0x6b, 0x48, 0xe4);
// {5866E780-D4F8-425a-A891-11ABD988DEC3}


#define IOCTL_ASYNC_READ CTL_CODE(	\
			FILE_DEVICE_UNKNOWN,	\
			0x800,					\
			METHOD_BUFFERED,		\
			FILE_ANY_ACCESS)

#define IOCTL_ASYNC_WRITE CTL_CODE(	\
			FILE_DEVICE_UNKNOWN,	\
			0x805,					\
			METHOD_BUFFERED,		\
			FILE_ANY_ACCESS)

#define IOCTL_WAIT_INT CTL_CODE(	\
			FILE_DEVICE_UNKNOWN,	\
			0x810,					\
			METHOD_BUFFERED,		\
			FILE_ANY_ACCESS)

#define IOCTL_END_INT CTL_CODE(	\
			FILE_DEVICE_UNKNOWN,	\
			0x815,					\
			METHOD_BUFFERED,		\
			FILE_ANY_ACCESS)

#define IOCTL_BLOCK_READ CTL_CODE(	\
			FILE_DEVICE_UNKNOWN,	\
			0x820,					\
			METHOD_BUFFERED,		\
			FILE_ANY_ACCESS)

#define IOCTL_BLOCK_WRITE CTL_CODE(	\
			FILE_DEVICE_UNKNOWN,	\
			0x825,					\
			METHOD_BUFFERED,		\
			FILE_ANY_ACCESS)

#define IOCTL_GET_REQUEST CTL_CODE(	\
			FILE_DEVICE_UNKNOWN,	\
			0x830,					\
			METHOD_BUFFERED,		\
			FILE_ANY_ACCESS)

#define IOCTL_CREATE_EVENT CTL_CODE(\
			FILE_DEVICE_UNKNOWN,	\
			0x835,					\
			METHOD_BUFFERED,		\
			FILE_ANY_ACCESS)
			


typedef struct _V1394_DEVICE_EXTENSION
{
	PDEVICE_OBJECT  fdo;//功能设备对象指针
	PDEVICE_OBJECT  NextStackDevice;//在设备栈中紧接着功能设备对象的设备对象指针
	UNICODE_STRING  ifSymLinkName;//符号链接名字符串
	PMDL pMdl;//内存描述列表指针
	ULONG Generation;//总线重启次数
	ADDRESS_RANGE AddrRange;//1394驱动程序分配的地址范围
	HANDLE hAddress;//1394驱动程序分配的地址句柄
	int   nProcess;// 调用1394驱动程序的进程个数
	PCHAR interrupt ;//中断地址
	UCHAR fAlloc;//中断地址分配判别符号
	USHORT NodeID;// 每个1394设备的节点ID号
	HANDLE hEvent ;//内核事件句柄
	PKEVENT pEvent;//内核事件指针
	UNICODE_STRING EventName;//事件名字符串
	PIO_WORKITEM WorkItem;//工作项指针
	IO_STATUS_BLOCK         ioStatus;//状态块结构
	KEVENT                  Event;// 内核事件对象
	

}V1394_DEVICE_EXTENSION, *PV1394_DEVICE_EXTENSION;

typedef struct _V1394_IO_STRUCTURE
{
	ADDRESS_OFFSET address;
	ULONG data;
}V1394_IO_STRUCTURE, *PV1394_IO_STRUCTURE;

typedef struct _V1394_IO_BLOCK
{
	ADDRESS_OFFSET address;
	ULONG length;
	ULONG accessMode;
	ULONG blockSize;
	ULONG data[1];
}V1394_IO_BLOCK, *PV1394_IO_BLOCK;

VOID v1394Unload(IN PDRIVER_OBJECT DriverObject);

NTSTATUS v1394AddDevice(IN PDRIVER_OBJECT DriverObject,
						IN PDEVICE_OBJECT pdo);

NTSTATUS v1394Pnp(IN PDEVICE_OBJECT fdo,
				  IN PIRP Irp);

NTSTATUS v1394Power(IN PDEVICE_OBJECT fdo,
					IN PIRP Irp);

NTSTATUS v1394Create(IN PDEVICE_OBJECT fdo,
					 IN PIRP Irp);

NTSTATUS v1394Close(IN PDEVICE_OBJECT fdo,
					 IN PIRP Irp);

NTSTATUS v1394Write(IN PDEVICE_OBJECT fdo,
					 IN PIRP Irp);

NTSTATUS v1394Read(IN PDEVICE_OBJECT fdo,
					 IN PIRP Irp);

NTSTATUS v1394DeviceControl(IN PDEVICE_OBJECT fdo,
					 IN PIRP Irp);

NTSTATUS v1394SystemControl(IN PDEVICE_OBJECT fdo,
					 IN PIRP Irp);

NTSTATUS v1394GetGenCount(IN PDEVICE_OBJECT fdo,
				  IN PIRP Irp,
				  IN OUT PULONG Count);

NTSTATUS ForwardedIrpCompletionRoutine(IN PDEVICE_OBJECT fdo,
									   IN PIRP Irp,
									   IN PKEVENT ev);

NTSTATUS ForwardIrpAndWait(IN PDEVICE_OBJECT fdo,
						   IN PIRP Irp,
						   IN PIRB pIrb);

NTSTATUS CompleteIrp(PIRP Irp,NTSTATUS,ULONG info);

VOID v1394StartIo(	IN PDEVICE_OBJECT fdo,
				  IN PIRP Irp);//hehu 排队程序

VOID NotificationRoutine(IN PNOTIFICATION_INFO NotificationInfo);
VOID UsermodeForwardIrpandWait(	   IN PDEVICE_OBJECT fdo,								   
								   IN PVOID pIrb);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -