📄 amc2102.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 + -