📄 windrvr.h
字号:
DWORD dwBusNum; // Bus number.
DWORD dwSlotFunc; // Slot number on Bus.
} WD_BUS, WD_BUS_V30;
enum
{
WD_BUS_USB = 0xfffffffe,
WD_BUS_ISA = 1,
WD_BUS_EISA = 2,
WD_BUS_PCI = 5,
WD_BUS_PCMCIA = 8,
};
typedef enum
{
ITEM_NONE=0,
ITEM_INTERRUPT=1,
ITEM_MEMORY=2,
ITEM_IO=3,
ITEM_BUS=5,
} ITEM_TYPE;
typedef struct
{
DWORD item; // ITEM_TYPE
DWORD fNotSharable;
DWORD dwContext; // Reserved for internal use
DWORD dwPad1; // Reserved for internal use
union
{
struct
{ // ITEM_MEMORY
DWORD dwPhysicalAddr; // Physical address on card.
DWORD dwBytes; // Address range.
KPTR dwTransAddr; // Returns the address to pass on to transfer commands.
DWORD dwUserDirectAddr; // Returns the address for direct user read/write.
DWORD dwCpuPhysicalAddr; // Returns the CPU physical address of card.
DWORD dwBar; // Base Address Register number of PCI card.
} Mem;
struct
{ // ITEM_IO
KPTR dwAddr; // Beginning of io address.
DWORD dwBytes; // IO range.
DWORD dwBar; // Base Address Register number of PCI card.
} IO;
struct
{ // ITEM_INTERRUPT
DWORD dwInterrupt; // Number of interrupt to install.
DWORD dwOptions; // Interrupt options. For level sensitive
// interrupts - set to: INTERRUPT_LEVEL_SENSITIVE.
DWORD hInterrupt; // Returns the handle of the interrupt installed.
} Int;
WD_BUS Bus; // ITEM_BUS
struct
{
DWORD dw1, dw2, dw3, dw4, dw5, dw6;
} Val;
} I;
} WD_ITEMS, WD_ITEMS_V30;
enum { WD_CARD_ITEMS = 20 };
typedef struct
{
DWORD dwItems;
WD_ITEMS Item[WD_CARD_ITEMS];
} WD_CARD, WD_CARD_V30;
enum { CARD_VX_NO_MMU_INIT = 0x4000000 };
typedef struct
{
WD_CARD Card; // Card to register.
DWORD fCheckLockOnly; // Only check if card is lockable, return hCard=1 if OK.
DWORD hCard; // Handle of card.
DWORD dwOptions; // Should be zero.
CHAR cName[32]; // Name of card.
CHAR cDescription[100]; // Description.
} WD_CARD_REGISTER, WD_CARD_REGISTER_V40;
enum { WD_PCI_CARDS = 100 };
typedef struct
{
DWORD dwBus;
DWORD dwSlot;
DWORD dwFunction;
} WD_PCI_SLOT;
typedef struct
{
DWORD dwVendorId;
DWORD dwDeviceId;
} WD_PCI_ID;
typedef struct
{
WD_PCI_ID searchId; // If dwVendorId==0 - scan all vendor IDs.
// If dwDeviceId==0 - scan all device IDs.
DWORD dwCards; // Number of cards found.
WD_PCI_ID cardId[WD_PCI_CARDS]; // VendorID & DeviceID of cards found.
WD_PCI_SLOT cardSlot[WD_PCI_CARDS]; // Pci slot info of cards found.
} WD_PCI_SCAN_CARDS, WD_PCI_SCAN_CARDS_V30;
typedef struct
{
WD_PCI_SLOT pciSlot; // Pci slot.
WD_CARD Card; // Get card parameters for pci slot.
} WD_PCI_CARD_INFO, WD_PCI_CARD_INFO_V30;
typedef enum
{
PCI_ACCESS_OK = 0,
PCI_ACCESS_ERROR = 1,
PCI_BAD_BUS = 2,
PCI_BAD_SLOT = 3,
} PCI_ACCESS_RESULT;
typedef enum
{
PCMCIA_ACCESS_OK = 0,
PCMCIA_BAD_SOCKET = 1,
PCMCIA_BAD_OFFSET = 2,
PCMCIA_ACCESS_ERROR =3,
} PCMCIA_ACCESS_RESULT;
typedef struct
{
WD_PCI_SLOT pciSlot; // Pci bus, slot and function number.
PVOID pBuffer; // Buffer for read/write.
DWORD dwOffset; // Offset in pci configuration space to read/write from.
DWORD dwBytes; // Bytes to read/write from/to buffer.
// Returns the number of bytes read/wrote.
DWORD fIsRead; // If 1 then read pci config, 0 write pci config.
DWORD dwResult; // PCI_ACCESS_RESULT
} WD_PCI_CONFIG_DUMP, WD_PCI_CONFIG_DUMP_V30;
enum { WD_ISAPNP_CARDS = 16 };
enum { WD_ISAPNP_COMPATIBLE_IDS = 10 };
enum { WD_ISAPNP_COMP_ID_LENGTH = 7 }; // ISA compressed ID is 7 chars long.
enum { WD_ISAPNP_ANSI_LENGTH = 32 }; // ISA ANSI ID is limited to 32 chars long.
typedef CHAR WD_ISAPNP_COMP_ID[WD_ISAPNP_COMP_ID_LENGTH+1];
typedef CHAR WD_ISAPNP_ANSI[WD_ISAPNP_ANSI_LENGTH+1+3]; // Add 3 bytes for DWORD alignment.
typedef struct
{
WD_ISAPNP_COMP_ID cVendor; // Vendor ID.
DWORD dwSerial; // Serial number of card.
} WD_ISAPNP_CARD_ID;
typedef struct
{
WD_ISAPNP_CARD_ID cardId; // VendorID & serial number of cards found.
DWORD dwLogicalDevices; // Logical devices on the card.
BYTE bPnPVersionMajor; // ISA PnP version Major.
BYTE bPnPVersionMinor; // ISA PnP version Minor.
BYTE bVendorVersionMajor; // Vendor version Major.
BYTE bVendorVersionMinor; // Vendor version Minor.
WD_ISAPNP_ANSI cIdent; // Device identifier.
} WD_ISAPNP_CARD, WD_ISAPNP_CARD_V40;
typedef struct
{
WD_ISAPNP_CARD_ID searchId; // If searchId.cVendor[0]==0 - scan all vendor IDs.
// If searchId.dwSerial==0 - scan all serial numbers.
DWORD dwCards; // Number of cards found.
WD_ISAPNP_CARD Card[WD_ISAPNP_CARDS]; // Cards found.
} WD_ISAPNP_SCAN_CARDS, WD_ISAPNP_SCAN_CARDS_V40;
typedef struct
{
WD_ISAPNP_CARD_ID cardId; // VendorID and serial number of card.
DWORD dwLogicalDevice; // Logical device in card.
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 uSocket; // Specifies the socket number (first socket is 0)
BYTE uFunction; // Specifies the function number (first function is 0)
BYTE uPadding0; // 2 bytes padding so structure will be 4 bytes aligned
BYTE uPadding1;
} WD_PCMCIA_SLOT, WD_PCMCIA_SLOT_V41;
typedef struct
{
DWORD dwManufacturerId; // card manufacturer
DWORD dwCardId; // 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
} WD_PCMCIA_SCAN_CARDS, WD_PCMCIA_SCAN_CARDS_V41;
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];
DWORD dwManufacturerId; // card manufacturer
DWORD dwCardId; // card type and model
DWORD dwFuncId; // card function code
} WD_PCMCIA_CARD_INFO, WD_PCMCIA_CARD_INFO_V41;
typedef struct
{
WD_PCMCIA_SLOT pcmciaSlot;
PVOID pBuffer; // buffer for read/write
DWORD dwOffset; // offset in pcmcia configuration space to
// read/write from
DWORD dwBytes; // bytes to read/write from/to buffer
// returns the number of bytes read/wrote
DWORD fIsRead; // if 1 then read pci config, 0 write pci config
DWORD dwResult; // PCMCIA_ACCESS_RESULT
} WD_PCMCIA_CONFIG_DUMP, WD_PCMCIA_CONFIG_DUMP_V41;
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 = 0xffffffff,
S_IO = 0x8,
S_MEM = 0x10,
S_INT = 0x20,
S_PCI = 0x40,
S_DMA = 0x80,
S_MISC = 0x100,
S_LICENSE = 0x200,
S_ISAPNP = 0x400,
S_PCMCIA = 0x800,
S_KER_PLUG = 0x10000,
S_CARD_REG = 0x2000,
S_KER_DRV = 0x4000,
S_USB = 0x8000,
S_EVENT = 0x20000,
} 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; // if NULL the driver will be searched in the windows system 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;
#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;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -