www.pudn.com > data-isotransfer.rar > usbdriver.h
#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 #ifndef _WORD_DEFINED #define _WORD_DEFINED typedef unsigned short WORD; #endif typedef struct _GET_STRING_DESCRIPTOR_IN { UCHAR Index; USHORT LanguageId; } GET_STRING_DESCRIPTOR_IN, *PGET_STRING_DESCRIPTOR_IN; typedef struct _ISO_TRANSFER_CONTROL { ULONG PipeNum; ULONG PacketSize; ULONG PacketCount; ULONG FramesPerBuffer; ULONG BufferCount; } ISO_TRANSFER_CONTROL, *PISO_TRANSFER_CONTROL; #ifdef DRIVER typedef struct _RING_BUFFER { PUCHAR inPtr; PUCHAR outPtr; ULONG totalSize; ULONG currentSize; KSPIN_LOCK spinLock; PUCHAR buffer; } RING_BUFFER, *PRING_BUFFER; typedef struct _ISO_STREAM_OBJECT ISO_STREAM_OBJECT, *PISO_STREAM_OBJECT; typedef struct _ISO_TRANSFER_OBJECT { ULONG Frame; PISO_STREAM_OBJECT StreamObject; PURB Urb; PIRP Irp; KEVENT Done; } ISO_TRANSFER_OBJECT, *PISO_TRANSFER_OBJECT; typedef struct _ISO_STREAM_OBJECT { PDEVICE_OBJECT DeviceObject; ULONG PacketSize; ULONG NumPackets; PUSBD_PIPE_INFORMATION PipeInfo; PVOID TransferBuffer; ULONG TransferBufferLength; PVOID IsoDescriptorBuffer; ULONG FramesPerBuffer; ULONG BufferCount; ULONG PendingTransfers; PRING_BUFFER DataRingBuffer; PRING_BUFFER DescriptorRingBuffer; PISO_TRANSFER_OBJECT TransferObject; } ISO_STREAM_OBJECT, *PISO_STREAM_OBJECT; typedef struct tagDEVICE_EXTENSION { PDEVICE_OBJECT PhysicalDeviceObject; PDEVICE_OBJECT LowerDeviceObject; BOOLEAN Stop; USBD_CONFIGURATION_HANDLE ConfigurationHandle; PUSB_DEVICE_DESCRIPTOR DeviceDescriptor; PUSBD_INTERFACE_INFORMATION Interface; ULONG OpenHandles; WCHAR DeviceLinkName[64]; LONG Usages; KEVENT evRemove; 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); NTSTATUS UsbResetPipe(IN PDEVICE_OBJECT DeviceObject,IN ULONG PipeNum); #endif #define Ezusb_IOCTL_INDEX 0x0800 #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_ISO_WRITE CTL_CODE(FILE_DEVICE_UNKNOWN, \ Ezusb_IOCTL_INDEX+3,\ METHOD_IN_DIRECT, \ FILE_ANY_ACCESS) #define IOCTL_EZUSB_ISO_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)