📄 windrvr.h
字号:
WD_ISAPNP_COMP_ID cLogicalDeviceId; // Logical device ID.
DWORD dwCompatibleDevices; // Number of compatible device IDs.
WD_ISAPNP_COMP_ID CompatibleDevice[WD_ISAPNP_COMPATIBLE_IDS]; // Compatible device IDs.
WD_ISAPNP_ANSI cIdent; // Device identifier.
WD_CARD Card; // Get card parameters for the ISA PnP card.
} WD_ISAPNP_CARD_INFO, WD_ISAPNP_CARD_INFO_V40;
typedef enum
{
ISAPNP_ACCESS_OK = 0,
ISAPNP_ACCESS_ERROR = 1,
ISAPNP_BAD_ID = 2
} ISAPNP_ACCESS_RESULT;
typedef struct
{
WD_ISAPNP_CARD_ID cardId; // VendorID and serial number of card.
DWORD dwOffset; // Offset in ISA PnP configuration space to read/write from.
DWORD fIsRead; // If 1 then read ISA PnP config, 0 write ISA PnP config.
BYTE bData; // Result data of byte read/write.
DWORD dwResult; // ISAPNP_ACCESS_RESULT.
} WD_ISAPNP_CONFIG_DUMP, WD_ISAPNP_CONFIG_DUMP_V40;
// PCMCIA Card Services
// Extreme case - two PCMCIA slots and two multi-function (4 functions) cards
enum
{
WD_PCMCIA_CARDS = 8,
WD_PCMCIA_VERSION_LEN = 4,
WD_PCMCIA_MANUFACTURER_LEN = 48,
WD_PCMCIA_PRODUCTNAME_LEN = 48,
WD_PCMCIA_MAX_SOCKET = 2,
WD_PCMCIA_MAX_FUNCTION = 2
};
typedef struct
{
BYTE uBus; // bus number (first bus is 0)
BYTE uSocket; // socket number (first socket is 0)
BYTE uFunction; // function number (first function is 0)
BYTE uPadding; // 1 byte padding so structure will be 4 bytes aligned
} WD_PCMCIA_SLOT, WD_PCMCIA_SLOT_V622;
typedef struct
{
WORD wManufacturerId; // card manufacturer
WORD wCardId; // card type and model
} WD_PCMCIA_ID;
typedef struct
{
WD_PCMCIA_ID searchId; // device ID to search for
DWORD dwCards; // number of cards found
WD_PCMCIA_ID cardId[WD_PCMCIA_CARDS]; // device IDs of cards found
WD_PCMCIA_SLOT cardSlot[WD_PCMCIA_CARDS]; // pcmcia slot info of cards found
DWORD dwOptions; // reserved for future use, set to 0
} WD_PCMCIA_SCAN_CARDS, WD_PCMCIA_SCAN_CARDS_V622;
typedef struct
{
WD_PCMCIA_SLOT pcmciaSlot; // pcmcia slot
WD_CARD Card; // get card parameters for pcmcia slot
CHAR cVersion[WD_PCMCIA_VERSION_LEN];
CHAR cManufacturer[WD_PCMCIA_MANUFACTURER_LEN];
CHAR cProductName[WD_PCMCIA_PRODUCTNAME_LEN];
WORD wManufacturerId; // card manufacturer
WORD wCardId; // card type and model
WORD wFuncId; // card function code
DWORD dwOptions; // reserved for future use, set to 0
} WD_PCMCIA_CARD_INFO, WD_PCMCIA_CARD_INFO_V622;
typedef struct
{
WD_PCMCIA_SLOT pcmciaSlot;
PVOID pBuffer; // buffer for read/write
DWORD dwOffset; // offset in pcmcia attribute space to read/write from
DWORD dwBytes; // bytes to read/write from/to buffer
// returns the number of bytes read/written
DWORD fIsRead; // if 1 then read pcmcia attrib, 0 write pcmcia attrib
DWORD dwResult; // PCMCIA_ACCESS_RESULT
DWORD dwOptions; // reserved for future use, set to 0
} WD_PCMCIA_CONFIG_DUMP, WD_PCMCIA_CONFIG_DUMP_V622;
typedef enum {
WD_PCMCIA_ACC_SPEED_DEFAULT, // use default access speed
WD_PCMCIA_ACC_SPEED_250NS,
WD_PCMCIA_ACC_SPEED_200NS,
WD_PCMCIA_ACC_SPEED_150NS,
WD_PCMCIA_ACC_SPEED_100NS
} WD_PCMCIA_ACC_SPEED;
typedef enum {
WD_PCMCIA_ACC_WIDTH_DEFAULT, // use default bus width
WD_PCMCIA_ACC_WIDTH_8BIT,
WD_PCMCIA_ACC_WIDTH_16BIT
} WD_PCMCIA_ACC_WIDTH;
typedef enum {
WD_PCMCIA_VPP_DEFAULT, // use default power level of the PCMCIA Vpp pin
WD_PCMCIA_VPP_OFF, // set voltage on the Vpp pin to zero (disable)
WD_PCMCIA_VPP_ON, // set voltage on the Vpp pin to 12V (enable)
WD_PCMCIA_VPP_AS_VCC // set voltage on the Vpp pin equal to Vcc
} WD_PCMCIA_VPP;
typedef struct
{
DWORD dwOptions; // reserved for future use, set to 0
WD_PCMCIA_SLOT pcmciaSlot; // physical location on PCMCIA bus
BYTE uAccessSpeed; // one of WD_PCMCIA_ACC_SPEED_XXX values
BYTE uBusWidth; // one of WD_PCMCIA_ACC_WIDTH_XXX values
BYTE uVppLevel; // one of WD_PCMCIA_VPP_XXX values
BYTE uReserved;
DWORD dwCardBase; // offset in the PCMCIA device's memory where
// the memory mapping begins
} WD_PCMCIA_CONTROL, WD_PCMCIA_CONTROL_V623;
enum { SLEEP_NON_BUSY = 1 };
typedef struct
{
DWORD dwMicroSeconds; // Sleep time in Micro Seconds (1/1,000,000 Second)
DWORD dwOptions; // can be: SLEEP_NON_BUSY (10000 uSec +)
} WD_SLEEP, WD_SLEEP_V40;
typedef enum
{
D_OFF = 0,
D_ERROR = 1,
D_WARN = 2,
D_INFO = 3,
D_TRACE = 4
} DEBUG_LEVEL;
typedef enum
{
S_ALL = (int)0xffffffff,
S_IO = 0x00000008,
S_MEM = 0x00000010,
S_INT = 0x00000020,
S_PCI = 0x00000040,
S_DMA = 0x00000080,
S_MISC = 0x00000100,
S_LICENSE = 0x00000200,
S_ISAPNP = 0x00000400,
S_PCMCIA = 0x00000800,
S_PNP = 0x00001000,
S_CARD_REG = 0x00002000,
S_KER_DRV = 0x00004000,
S_USB = 0x00008000,
S_KER_PLUG = 0x00010000,
S_EVENT = 0x00020000
} DEBUG_SECTION;
typedef enum
{
DEBUG_STATUS = 1,
DEBUG_SET_FILTER = 2,
DEBUG_SET_BUFFER = 3,
DEBUG_CLEAR_BUFFER = 4,
DEBUG_DUMP_SEC_ON = 5,
DEBUG_DUMP_SEC_OFF = 6,
KERNEL_DEBUGGER_ON = 7,
KERNEL_DEBUGGER_OFF = 8
} DEBUG_COMMAND;
typedef struct
{
DWORD dwCmd; // DEBUG_COMMAND: DEBUG_STATUS, DEBUG_SET_FILTER, DEBUG_SET_BUFFER, DEBUG_CLEAR_BUFFER
// used for DEBUG_SET_FILTER
DWORD dwLevel; // DEBUG_LEVEL: D_ERROR, D_WARN..., or D_OFF to turn debugging off
DWORD dwSection; // DEBUG_SECTION: for all sections in driver: S_ALL
// for partial sections: S_IO, S_MEM...
DWORD dwLevelMessageBox; // DEBUG_LEVEL to print in a message box
// used for DEBUG_SET_BUFFER
DWORD dwBufferSize; // size of buffer in kernel
} WD_DEBUG, WD_DEBUG_V40;
typedef struct
{
PCHAR pcBuffer; // buffer to receive debug messages
DWORD dwSize; // size of buffer in bytes
} WD_DEBUG_DUMP, WD_DEBUG_DUMP_V40;
typedef struct
{
CHAR pcBuffer[256];
DWORD dwLevel;
DWORD dwSection;
} WD_DEBUG_ADD, WD_DEBUG_ADD_V503;
typedef struct
{
DWORD hKernelPlugIn;
PCHAR pcDriverName;
PCHAR pcDriverPath; // Should be NULL (exists for backwards compatibility).
// The driver will be searched in the operating
// system's drivers/modules directory.
PVOID pOpenData;
} WD_KERNEL_PLUGIN, WD_KERNEL_PLUGIN_V40;
typedef enum
{
EVENT_STATUS_OK = 0
} EVENT_STATUS;
typedef enum {
PIPE_TYPE_CONTROL = 0,
PIPE_TYPE_ISOCHRONOUS = 1,
PIPE_TYPE_BULK = 2,
PIPE_TYPE_INTERRUPT = 3
} USB_PIPE_TYPE;
#define WD_USB_MAX_PIPE_NUMBER 32
#define WD_USB_MAX_ENDPOINTS WD_USB_MAX_PIPE_NUMBER
#define WD_USB_MAX_INTERFACES 30
#define WD_USB_MAX_DEVICE_NUMBER 30
typedef struct
{
DWORD dwVendorId;
DWORD dwProductId;
} WD_USB_ID;
// For backwards compatibility:
#ifndef LINUX
typedef enum {
USB_DIR_IN = 1,
USB_DIR_OUT = 2,
USB_DIR_IN_OUT = 3
} USB_DIR;
#endif
typedef enum {
WDU_DIR_IN = 1,
WDU_DIR_OUT = 2,
WDU_DIR_IN_OUT = 3
} WDU_DIR;
typedef struct
{
DWORD dwNumber; // Pipe 0 is the default pipe
DWORD dwMaximumPacketSize;
DWORD type; // USB_PIPE_TYPE
DWORD direction; // WDU_DIR
// Isochronous, Bulk, Interrupt are either USB_DIR_IN or USB_DIR_OUT
// Control are USB_DIR_IN_OUT
DWORD dwInterval; // interval in ms relevant to Interrupt pipes
} WD_USB_PIPE_INFO, WD_USB_PIPE_INFO_V43, WDU_PIPE_INFO;
typedef struct
{
DWORD dwNumInterfaces;
DWORD dwValue;
DWORD dwAttributes;
DWORD MaxPower;
} WD_USB_CONFIG_DESC;
typedef struct
{
DWORD dwNumber;
DWORD dwAlternateSetting;
DWORD dwNumEndpoints;
DWORD dwClass;
DWORD dwSubClass;
DWORD dwProtocol;
DWORD dwIndex;
} WD_USB_INTERFACE_DESC, WD_USB_INTERFACE_DESC_V43;
typedef struct
{
DWORD dwEndpointAddress;
DWORD dwAttributes;
DWORD dwMaxPacketSize;
DWORD dwInterval;
} WD_USB_ENDPOINT_DESC, WD_USB_ENDPOINT_DESC_V43;
typedef struct
{
WD_USB_INTERFACE_DESC Interface;
WD_USB_ENDPOINT_DESC Endpoints[WD_USB_MAX_ENDPOINTS];
} WD_USB_INTERFACE;
typedef struct
{
DWORD uniqueId;
DWORD dwConfigurationIndex;
WD_USB_CONFIG_DESC configuration;
DWORD dwInterfaceAlternatives;
WD_USB_INTERFACE Interface[WD_USB_MAX_INTERFACES];
DWORD dwStatus; // Configuration status code - see WD_ERROR_CODES enum definition.
// WD_USBD_STATUS_SUCCESS for a successful configuration.
} WD_USB_CONFIGURATION, WD_USB_CONFIGURATION_V52;
typedef struct
{
DWORD fBusPowered;
DWORD dwPorts; // Number of ports on this hub.
DWORD dwCharacteristics; // Hub Characteristics.
DWORD dwPowerOnToPowerGood; // Port power on till power good in 2ms.
DWORD dwHubControlCurrent; // Max current in mA.
} WD_USB_HUB_GENERAL_INFO, WD_USB_HUB_GENERAL_INFO_V43;
#define WD_SINGLE_INTERFACE 0xFFFFFFFF
typedef struct
{
WD_USB_ID deviceId;
DWORD dwHubNum; // Unused
DWORD dwPortNum; // Unused
DWORD fHub; // Unused
DWORD fFullSpeed; // Unused
DWORD dwConfigurationsNum;
DWORD deviceAddress; // Unused
WD_USB_HUB_GENERAL_INFO hubInfo; // Unused
DWORD deviceClass;
DWORD deviceSubClass;
DWORD dwInterfaceNum; // For a single device WinDriver sets this
// value to WD_SINGLE_INTERFACE
} WD_USB_DEVICE_GENERAL_INFO;
typedef struct
{
DWORD dwPipes;
WD_USB_PIPE_INFO Pipe[WD_USB_MAX_PIPE_NUMBER];
} WD_USB_DEVICE_INFO, WD_USB_DEVICE_INFO_V43;
// IOCTL Structures
typedef struct
{
WD_USB_ID searchId; // If dwVendorId==0 - scan all vendor IDs.
// If dwProductId==0 - scan all product IDs.
DWORD dwDevices;
DWORD uniqueId[WD_USB_MAX_DEVICE_NUMBER]; // a unique id to identify the device
WD_USB_DEVICE_GENERAL_INFO deviceGeneralInfo[WD_USB_MAX_DEVICE_NUMBER];
DWORD dwStatus; // Scan status code - see WD_ERROR_CODES enum definition.
// WD_USBD_STATUS_SUCCESS for a successful scan.
} WD_USB_SCAN_DEVICES, WD_USB_SCAN_DEVICES_V52;
// USB TRANSFER options
enum {
USB_ISOCH_FULL_PACKETS_ONLY = 0x20,
//Windows only, ignored on other OS:
USB_ABORT_PIPE = 0x40,
USB_ISOCH_NOASAP = 0x80,
// The following flags are no longer used beginning with v6.0:
USB_TRANSFER_HALT = 0x1,
USB_SHORT_TRANSFER = 0x2,
USB_FULL_TRANSFER = 0x4,
USB_ISOCH_ASAP = 0x8,
USB_ISOCH_RESET = 0x10
};
// new USB API definitions
typedef PVOID WDU_REGISTER_DEVICES_HANDLE;
#define WDU_ENDPOINT_TYPE_MASK 0x03
#define WDU_ENDPOINT_DIRECTION_MASK 0x80
#define WDU_ENDPOINT_ADDRESS_MASK 0x0f
// test direction bit in the bEndpointAddress field of
// an endpoint descriptor.
#define WDU_ENDPOINT_DIRECTION_OUT(addr) (!((addr) & WDU_ENDPOINT_DIRECTION_MASK))
#define WDU_ENDPOINT_DIRECTION_IN(addr) ((addr) & WDU_ENDPOINT_DIRECTION_MASK)
#define WDU_GET_MAX_PACKET_SIZE(x) ((WORD) (((x) & 0x7ff) * (1 + (((x) & 0x1800) >> 11))))
typedef struct
{
UCHAR bLength;
UCHAR bDescriptorType;
UCHAR bInterfaceNumber;
UCHAR bAlternateSetting;
UCHAR bNumEndpoints;
UCHAR bInterfaceClass;
UCHAR bInterfaceSubClass;
UCHAR bInterfaceProtocol;
UCHAR iInterface;
} WDU_INTERFACE_DESCRIPTOR;
typedef struct
{
UCHAR bLength;
UCHAR bDescriptorType;
UCHAR bEndpointAddress;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -