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