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