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

📄 wdmusb.h

📁 一个通用的usb驱动程序列程
💻 H
字号:
#pragma once
#ifdef __cplusplus
extern "C"
{
#endif
#include <wdm.h>
#include <usbdi.h>
#include <usbdlib.h>
#ifdef __cplusplus
}
#endif

#include "GUIDs.h"

#define WDMUSB_NAME_MAX         64
#define WDMUSB_MAX_PIPES        10
#define WDMUSB_MAX_IPR          2
#define WDMUSB_MAX_INTERFACE    2
//-----------------------------------------
#define WDMUSB_MAX_TRANSFER_SIZE 64
#define WDMUSB_BOARD_TRANSFER_SIZE 16000
//------------------------------------------

typedef struct _WDMUSB_PIPE
{
	BOOLEAN Opened;
	UCHAR Pad[3];
	PUSBD_PIPE_INFORMATION PipeInfo;
	WCHAR Name[WDMUSB_NAME_MAX];
	LARGE_INTEGER ByteXfered;
	LARGE_INTEGER ElapsedTime;
	LARGE_INTEGER TimerStart;
	LARGE_INTEGER ElapsedCycles;
	LARGE_INTEGER CyclesStart;
	BOOLEAN       bPerfTimerEnabled;  

}WDMUSB_PIPE,*PWDMUSB_PIPE;


typedef struct _WDMUSB_DEVICE_EXTENSION
{
	PDEVICE_OBJECT fdo;
	PDEVICE_OBJECT pdo;
	PDEVICE_OBJECT NextStackDevice;
	UNICODE_STRING ifSymLinkName;

	DEVICE_POWER_STATE PowerState;
	PULONG PowerIdleCounter;

	bool GotResources;
	bool Paused;
	bool IODisabled;

	LONG OpenHandleCount;

	LONG UsageCount;
	bool Stopping;
	KEVENT StoppingEvent;

	//-------------- USB---------------------
	PUSB_DEVICE_DESCRIPTOR DeviceDescriptor;
	USBD_CONFIGURATION_HANDLE Configurationhandle;	
	PUSBD_INTERFACE_INFORMATION Interface;
	WDMUSB_PIPE PipeList[WDMUSB_MAX_PIPES];
	//---------------END---------------------
	LONG dbgnum;

}WDMUSB_DEVICE_EXTENSION,*PWDMUSB_DEVICE_EXTENSION;

typedef struct _WDMUSB_RW_CONTEXT
{
	PURB      urb;
    PMDL      Mdl;
	ULONG     length;
	ULONG     numxfer;
    ULONG_PTR va;
   
}WDMUSB_RW_CONTEXT,*PWDMUSB_RW_CONTEXT;

VOID     WdmUsbUnload(IN PDRIVER_OBJECT DriverObject);
NTSTATUS WdmUsbAddDevice(IN PDRIVER_OBJECT DriverObject,IN PDEVICE_OBJECT pdo);

NTSTATUS WdmUsbPnp(IN PDEVICE_OBJECT fdo,IN PIRP Irp);
NTSTATUS WdmUsbPower(IN PDEVICE_OBJECT fdo,IN PIRP Irp);
NTSTATUS WdmUsbCreate(IN PDEVICE_OBJECT fdo,IN PIRP Irp);
NTSTATUS WdmUsbClose(IN PDEVICE_OBJECT fdo,IN PIRP Irp);
NTSTATUS WdmUsbWrite(IN PDEVICE_OBJECT fdo,IN PIRP Irp);
NTSTATUS WdmUsbRead(IN PDEVICE_OBJECT fdo,IN PIRP Irp);
NTSTATUS WdmUsbDeviceIoControl(IN PDEVICE_OBJECT fdo,IN PIRP Irp);
NTSTATUS WdmUsbSystemIoControl(IN PDEVICE_OBJECT fdo,IN PIRP Irp);

bool LockDevice(IN PWDMUSB_DEVICE_EXTENSION dx);
void UnlockDevice(IN PWDMUSB_DEVICE_EXTENSION dx);
NTSTATUS StartDevice(IN PWDMUSB_DEVICE_EXTENSION dx,
				     IN PCM_RESOURCE_LIST AllocatedResourcesTranslated);
VOID StopDevice(IN PWDMUSB_DEVICE_EXTENSION dx);
NTSTATUS SendDeviceSetPower(IN PWDMUSB_DEVICE_EXTENSION dx, 
							IN DEVICE_POWER_STATE NewDevicePowerState);
void SetPowerState(IN PWDMUSB_DEVICE_EXTENSION dx, 
				   IN DEVICE_POWER_STATE NewDevicePowerState);
NTSTATUS PowerUpDevice(IN PDEVICE_OBJECT fdo);

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

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

//------------------------USB------------------------------------------------
NTSTATUS UsbResetPipe(IN PWDMUSB_DEVICE_EXTENSION dx,IN PWDMUSB_PIPE Pipe);
NTSTATUS UsbConfigureDevice(IN PWDMUSB_DEVICE_EXTENSION dx);
NTSTATUS UsbReconfigureDevice(IN PWDMUSB_DEVICE_EXTENSION dx);

NTSTATUS UsbResetDevice(IN PWDMUSB_DEVICE_EXTENSION dx);
NTSTATUS UsbGetDeviceDescriptor(IN PWDMUSB_DEVICE_EXTENSION dx,
								OUT PUSB_DEVICE_DESCRIPTOR& deviceDescriptor,
								OUT ULONG& Size);
NTSTATUS UsbGetConfigurationDescriptors(IN PWDMUSB_DEVICE_EXTENSION dx,
									    OUT PUSB_CONFIGURATION_DESCRIPTOR& descriptors,
									    IN UCHAR ConfigIndex,
									    OUT ULONG& DescriptorsSize);
NTSTATUS UsbSelectConfiguration(IN PWDMUSB_DEVICE_EXTENSION dx);
NTSTATUS UsbDeselectConfiguration(IN PWDMUSB_DEVICE_EXTENSION dx);
NTSTATUS UsbBuildPipeList(IN PWDMUSB_DEVICE_EXTENSION dx);
NTSTATUS UsbReadWriteRegister(IN PWDMUSB_DEVICE_EXTENSION dx,
					          IN PIRP Irp,
					          IN BOOLEAN bWrite,
							  OUT ULONG& TranslatedSize);
#define FreeIfAllocated(x) if((x)!=NULL){ExFreePool(x);(x)=NULL;}
NTSTATUS UsbReadWrite(IN PDEVICE_OBJECT fdo,PIRP Irp,BOOLEAN read);
                         

⌨️ 快捷键说明

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