📄 genport.h
字号:
/*++
Copyright (c) 1990-2000 Microsoft Corporation, All Rights Reserved
Module Name:
genport.h
Abstract: Include file for Generic Port I/O Example Driver
Author: Robert R. Howell January 6, 1993
Environment:
Kernel mode
Revision History:
Eliyas Yakub Dec 29, 1998
Converted to Windows 2000
--*/
#include <ntddk.h>
#include "gpioctl.h" // Get IOCTL interface definitions
#if !defined(__GENPORT_H__)
#define __GENPORT_H__
// NT device name
#define GPD_DEVICE_NAME L"\\Device\\PCI954"
// File system device name. When you execute a CreateFile call to open the
// device, use "\\.\GpdDev", or, given C's conversion of \\ to \, use
// "\\\\.\\GpdDev"
#define DOS_DEVICE_NAME L"\\DosDevices\\PCI954Dev"
#define PORTIO_TAG 'TROP'
//定义DeviceID和VenderID
#define PCI_954_VID 0x0011
#define PCI_954_DID 0x8357
// driver local data structure specific to each device object
typedef struct _LOCAL_DEVICE_INFO {
PUNICODE_STRING RegistryPath;
PVOID PortBase; // base port address
ULONG PortCount; // Count of I/O addresses used.
ULONG PortMemoryType; // HalTranslateBusAddress MemoryType
PDEVICE_OBJECT DeviceObject; // The Gpd device object.
PDEVICE_OBJECT NextLowerDriver; // The top of the stack
BOOLEAN Started;
BOOLEAN Removed;
BOOLEAN PortWasMapped; // If TRUE, we have to unmap on unload
BOOLEAN Filler[1]; //bug fix
IO_REMOVE_LOCK RemoveLock;
//以下是我增加的,与中断相关的
PKINTERRUPT InterruptObject;
BOOLEAN FoundInterrupt;
KIRQL InterruptLevel;
ULONG InterruptVector;
KAFFINITY InterruptAffinity;
KINTERRUPT_MODE InterruptMode;
ULONG TestIsr;
//增加结束
//与PCI相关的信息
ULONG BusNumber;
PCI_SLOT_NUMBER SlotNumber;
//结束 与PCI相关的信息
//与收发相关的变量
PVOID ComBase[COM_NUM]; // base port address
COM_SET_MODE ComState[COM_NUM]; // 串口状态
BOOLEAN Inited[COM_NUM]; //is SetBaudrade
KSEMAPHORE BufSemaphore[2][COM_NUM];
PVOID BufBase[2][COM_NUM];
PVOID DataNumBase[2][COM_NUM];
PVOID PtrBuf[2][COM_NUM];
//结束 与收发相关的变量
} LOCAL_DEVICE_INFO, *PLOCAL_DEVICE_INFO;
//
// Some static string tables we use as part of debugging
//
static PSTR CmResourceTypeStrings[] =
{
"CmResourceTypeNull",
"CmResourceTypePort",
"CmResourceTypeInterrupt",
"CmResourceTypeMemory",
"CmResourceTypeDma",
"CmResourceTypeDeviceSpecific",
"CmResourceTypeMaximum"
};
static PSTR CmShareDispositionStrings[] =
{
"CmResourceShareUndetermined",
"CmResourceShareDeviceExclusive",
"CmResourceShareDriverExclusive",
"CmResourceShareShared"
};
#if DBG
#define DebugPrint(_x_) \
DbgPrint ("PortIo:"); \
DbgPrint _x_;
#define TRAP() DbgBreakPoint()
#else
#define DebugPrint(_x_)
#define TRAP()
#endif
/********************* function prototypes ***********************************/
//
NTSTATUS
DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
);
NTSTATUS
GpdDispatch(
IN PDEVICE_OBJECT pDO,
IN PIRP pIrp
);
NTSTATUS
GpdIoctlReadPort(
IN PLOCAL_DEVICE_INFO pLDI,
IN PIRP pIrp,
IN PIO_STACK_LOCATION IrpStack,
IN ULONG IoctlCode
);
NTSTATUS
GpdIoctlWritePort(
IN PLOCAL_DEVICE_INFO pLDI,
IN PIRP pIrp,
IN PIO_STACK_LOCATION IrpStack,
IN ULONG IoctlCode
);
VOID
GpdUnload(
IN PDRIVER_OBJECT DriverObject
);
NTSTATUS
GpdAddDevice(
IN PDRIVER_OBJECT DriverObject,
IN PDEVICE_OBJECT PhysicalDeviceObject
);
NTSTATUS
GpdDispatchPnp (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
GpdStartDevice (
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
GpdDispatchPower(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
NTSTATUS
GpdDispatchSystemControl(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP Irp
);
PCHAR
PnPMinorFunctionString (
UCHAR MinorFunction
);
BOOLEAN
GpdInterruptService(
IN PKINTERRUPT Interrupt,
IN PVOID Extension
);
NTSTATUS
SerialReadData(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP pIrp,
IN PIO_STACK_LOCATION IrpStack,
IN USHORT ComIndex
);
NTSTATUS
SerialWriteData(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP pIrp,
IN PIO_STACK_LOCATION IrpStack,
IN USHORT ComIndex
);
NTSTATUS
SerialSetBaud(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP pIrp,
IN PIO_STACK_LOCATION IrpStack
);
NTSTATUS
SerialReset(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP pIrp,
IN PIO_STACK_LOCATION IrpStack
);
USHORT
GetDataNum(
IN PDEVICE_OBJECT DeviceObject,
IN USHORT ComIndex,
IN USHORT Direct
);
NTSTATUS
WriteSwitch(
IN PDEVICE_OBJECT DeviceObject,
IN PIRP pIrp,
IN PIO_STACK_LOCATION IrpStack
);
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -