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

📄 cy09449.h

📁 一个主设备驱动程序绝对可用
💻 H
字号:
// cy09449.h - include file for WDM cy09449
#include <string.h>
#include <devioctl.h>
#include "DDKOverload.h"	// Must be included before ntddk.h
#include "GUIDs.h"

// Portable type defs
typedef BOOLEAN	BOOL;
typedef	UCHAR	BYTE;
typedef ULONG	DWORD;
typedef USHORT	WORD; 
typedef PULONG	PDWORD;
typedef PUSHORT PWORD;   


typedef struct _DEVICE_EXTENSION 
{
	PDEVICE_OBJECT fdo;  // Various uses
	PDEVICE_OBJECT pdo;
	PDEVICE_OBJECT	NextStackDevice;
	UNICODE_STRING	ifSymLinkName;
	bool initted;                 // Flag used to determine error during init
		
	bool GotResources;	// Not stopped
	bool Paused;		// Stop or remove pending
	bool IODisabled;	// Paused or stopped

	LONG OpenHandleCount;	// 打开句柄的数量

	LONG UsageCount;		// Pending I/O Count
	bool Stopping;			// In process of stopping
	KEVENT StoppingEvent;	// Set when all pending I/O complete

	// Resource allocations
	bool		MemNeedsMapping;
	ULONG		GotMemoryCount;
	//cy09449dual-ram控制空间
	bool		GotBaseMemory;
	bool		Mappedbaseadddr;
	bool        Umappbaseaddr;    // 释放了baseaddress?
	PHYSICAL_ADDRESS PbaseAddress;//物理地址
	PUCHAR		LbaseAddress;	//线性地址
	ULONG		PbaseLength;	//长度
	PVOID		linearBaseAddr;  // user mode BAR pointers

	//中断资源
	bool ConnectedToInterrupt;
	bool GotInterrupt;
	ULONG Vector;
	KIRQL Irql;
	KINTERRUPT_MODE Mode;
	KAFFINITY Affinity;
	PKINTERRUPT InterruptObject;
	BOOLEAN Irqshare;			// shared interrupt ?
	DWORD InterruptSet;         //enable or forbiden ?
	DWORD InterruptS;			// get the interrupt status
	DWORD InterruptStatus;      // the copy of the interrupt status
	
	LIST_ENTRY workqueue;         // IRP processing queue for evemts
	PIRP pUnhandledInterruptIrp;  // Unhandled interrupt IRP for signaling
	UNICODE_STRING uniWin32NameString;

	PVOID    systemAddr;
	PVOID    linearAddr;
	DWORD    physAddr;   // Actual physical address of the DMA buffer.
	ULONG    bufferSize;// The size of the DMA buffer.
} DEVICE_EXTENSION, *PDEVICE_EXTENSION;

// Portable error return translations
#define ERROR_INVALID_PARAMETER ((ULONG)STATUS_INVALID_PARAMETER)
#define ERROR_NOT_READY         ((ULONG)STATUS_DEVICE_NOT_READY)
#define ERROR_IO_DEVICE         ((ULONG)STATUS_IO_DEVICE_ERROR)
#define ERROR_ACCESS_DENIED     ((ULONG)STATUS_ALREADY_COMMITTED)
#define DEVIOCTL_NOERROR        ((ULONG)STATUS_SUCCESS)
#define NO_ERROR		        ((ULONG)STATUS_SUCCESS)
#define FreeIfAllocated(x) if( (x)!=NULL) { ExFreePool(x); (x) = NULL; }
//////////////////////////////////////////////////////////////////////

// Portable paramater passing
typedef struct DIOCParams	{
	DWORD	unused1;
	DWORD	unused2;
	DWORD	unused3;
	DWORD	DIOC_IOCTLCODE;
	DWORD	DIOC_INBUF;
	DWORD	DIOC_CBINBUF;
	DWORD	DIOC_OUTBUF;
	DWORD	DIOC_CBOUTBUF;
	PDWORD	DIOC_BYTESRET;
	DWORD	unused4;
	DWORD	unused5;
	DWORD	unused6;
} DIOCPARAMETERS, *PIOCTLPARAMS;

extern VOID
DEPRINTF(
		 IN char *fmt,
		 IN ULONG p1,
		 IN ULONG p2,
		 IN ULONG p3
		 );
extern VOID
DPRINTF(
		 IN char *fmt,
		 IN ULONG p1,
		 IN ULONG p2,
		 IN ULONG p3
		 );

// Global external declarations
extern ULONG m_Boards;             // Number of boards found

/////////////////////////////////////////////////////////////////////

NTSTATUS
cy09449Dispatch(IN PDEVICE_OBJECT DeviceObject,IN PIRP Irp);
NTSTATUS 
cy09449Close(IN PDEVICE_OBJECT fdo,IN PIRP Irp);
NTSTATUS 
cy09449Open(IN PDEVICE_OBJECT fdo,IN PIRP Irp);
NTSTATUS 
cy09449Pnp( IN PDEVICE_OBJECT fdo,
		    IN PIRP Irp);
NTSTATUS 
cy09449Power(IN PDEVICE_OBJECT fdo,
			 IN PIRP Irp);
NTSTATUS
cy09449AddDevice(
	IN PDRIVER_OBJECT DriverObject,
	IN PDEVICE_OBJECT pdo
	);
void cy09449Unload(IN PDRIVER_OBJECT DriverObject);
VOID cy09449StartIo( IN PDEVICE_OBJECT fdo, IN PIRP Irp);
NTSTATUS cy09449Read(	IN PDEVICE_OBJECT fdo,
					IN PIRP Irp);

////////////////////////////////////////////////////////////////////


void StopDevice( IN PDEVICE_EXTENSION dx);
NTSTATUS StartDevice( IN PDEVICE_EXTENSION dx, 
			 IN PCM_RESOURCE_LIST AllocatedResourcesTranslated);
bool LockDevice( IN PDEVICE_EXTENSION dx);
void UnlockDevice( IN PDEVICE_EXTENSION dx);
NTSTATUS cy09449Cleanup( IN PDEVICE_OBJECT fdo, IN PIRP Irp);
VOID cy09449DpcForIsr(IN PKDPC Dpc, IN PDEVICE_OBJECT fdo, 
					IN PIRP Irp, IN PDEVICE_EXTENSION dx);
NTSTATUS CompleteIrp(IN PIRP Irp, 
					 IN NTSTATUS status, 
					 IN ULONG info=0);
VOID cy09449CancelIrp( IN PDEVICE_OBJECT fdo, IN PIRP Irp);
PVOID MapPhysIOMToLinear(IN ULONG devBar,
						 IN ULONG size,
						 IN INTERFACE_TYPE itype,
						 IN ULONG bno);
BOOLEAN InterruptHandler(IN PKINTERRUPT Interrupt, 
						 IN PDEVICE_EXTENSION dx);
BOOLEAN SetInterruptSynch(IN PDEVICE_EXTENSION dx);

⌨️ 快捷键说明

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