www.pudn.com > data-bulktransfer.rar > usbdriver.h
//#ifdef DRIVER和ENDIF的部分是开发设备驱动程序所专用的,他们不能在Win32应用程序中使用,所以加上了该屏蔽。 //也就是说,该头文件也可在Win32应用程序中直接使用,而且也的确使用了。当然,也可以在Win32应用程序中把不 //需要的部分直接去除。 #ifndef USBDRIVER_H #define USBDRIVER_H #endif #ifdef DRIVER #include "wdm.h" #include "usbdi.h" #include "usbdlib.h" #include#endif #ifndef _BYTE_DEFINED #define _BYTE_DEFINED typedef unsigned char BYTE; #endif // !_BYTE_DEFINED #ifndef _WORD_DEFINED #define _WORD_DEFINED typedef unsigned short WORD; #endif // !_WORD_DEFINED typedef struct _VENDOR_REQUEST_IN { BYTE bRequest; WORD wValue; WORD wIndex; WORD wLength; BYTE direction; BYTE bData; } VENDOR_REQUEST_IN, *PVENDOR_REQUEST_IN; typedef struct _GET_STRING_DESCRIPTOR_IN { UCHAR Index; USHORT LanguageId; } GET_STRING_DESCRIPTOR_IN, *PGET_STRING_DESCRIPTOR_IN; typedef struct _BULK_TRANSFER_CONTROL { ULONG pipeNum; } BULK_TRANSFER_CONTROL, *PBULK_TRANSFER_CONTROL; #ifdef DRIVER // Device extension structure typedef struct tagDEVICE_EXTENSION { PDEVICE_OBJECT PhysicalDeviceObject; // physical device object PDEVICE_OBJECT LowerDeviceObject; // next lower driver in same stack BOOLEAN Stop; // Indicates that we have recieved a STOP message // configuration handle for the configuration the // device is currently in USBD_CONFIGURATION_HANDLE ConfigurationHandle; // pointer to the USB device descriptor for this device PUSB_DEVICE_DESCRIPTOR DeviceDescriptor; // we support up to one interface PUSBD_INTERFACE_INFORMATION Interface; // the number of device handles currently open to the device object. // Gets incremented by Create and decremented by Close //打开的设备句柄。与用户应用程序相对应的。即createfile和closehandle。 ULONG OpenHandles; // Name buffer for our named Functional device object link //设备连接名,注意它的长度为64。不要太小了,如32,不好。 WCHAR DeviceLinkName[64]; // use counter for the device. Gets incremented when the driver receives // a request and gets decremented when a request s completed. //记录有多少个I/O请求正在处理中。 LONG Usages; // this event gets set when it is ok to remove the device KEVENT evRemove; // TRUE if we're trying to remove this device BOOLEAN Removing; } DEVICE_EXTENSION, *PDEVICE_EXTENSION; NTSTATUS TestAddDevice(IN PDRIVER_OBJECT DriverObject, IN PDEVICE_OBJECT PhysicalDeviceObject); VOID TestDrvUnload(IN PDRIVER_OBJECT DriverObject); NTSTATUS TestPnpIrp(IN PDEVICE_OBJECT fdo, IN PIRP Irp); NTSTATUS TestPowerIrp(IN PDEVICE_OBJECT fdo,IN PIRP Irp); NTSTATUS TestCreate(IN PDEVICE_OBJECT fdo, IN PIRP Irp); NTSTATUS TestClose(IN PDEVICE_OBJECT fdo, IN PIRP Irp); NTSTATUS TestIOCTL(IN PDEVICE_OBJECT fdo,IN PIRP Irp); BOOLEAN LockDevice(IN PDEVICE_OBJECT fdo); void UnlockDevice(PDEVICE_OBJECT fdo); NTSTATUS CompleteRequest(IN PIRP Irp,IN NTSTATUS status,IN ULONG info); NTSTATUS UsbCallUSBDI(IN PDEVICE_OBJECT fdo,IN PURB Urb); #endif //DRIVER section #define Ezusb_IOCTL_INDEX 0x0800 //FILE_DEVICE_UNKNOWN在adddevice时标志的。 #define IOCTL_Ezusb_GET_DEVICE_DESCRIPTOR CTL_CODE(FILE_DEVICE_UNKNOWN, \ Ezusb_IOCTL_INDEX+0,\ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define IOCTL_Ezusb_GET_CONFIGURATION_DESCRIPTOR CTL_CODE(FILE_DEVICE_UNKNOWN, \ Ezusb_IOCTL_INDEX+1,\ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define IOCTL_Ezusb_GET_STRING_DESCRIPTOR CTL_CODE(FILE_DEVICE_UNKNOWN, \ Ezusb_IOCTL_INDEX+2,\ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define IOCTL_EZUSB_BULK_WRITE CTL_CODE(FILE_DEVICE_UNKNOWN, \ Ezusb_IOCTL_INDEX+3,\ METHOD_IN_DIRECT, \ FILE_ANY_ACCESS) #define IOCTL_EZUSB_BULK_READ CTL_CODE(FILE_DEVICE_UNKNOWN, \ Ezusb_IOCTL_INDEX+4,\ METHOD_OUT_DIRECT, \ FILE_ANY_ACCESS) #define IOCTL_EZUSB_GET_CURRENT_FRAME_NUMBER CTL_CODE(FILE_DEVICE_UNKNOWN, \ Ezusb_IOCTL_INDEX+5,\ METHOD_BUFFERED, \ FILE_ANY_ACCESS) #define IOCTL_Ezusb_RESETPIPE CTL_CODE(FILE_DEVICE_UNKNOWN, \ Ezusb_IOCTL_INDEX+6,\ METHOD_IN_DIRECT, \ FILE_ANY_ACCESS) #define IOCTL_Ezusb_ABORTPIPE CTL_CODE(FILE_DEVICE_UNKNOWN, \ Ezusb_IOCTL_INDEX+7,\ METHOD_IN_DIRECT, \ FILE_ANY_ACCESS)