📄 windrvr.h
字号:
DWORD handle;
DWORD dwAction; // WD_EVENT_ACTION
DWORD dwStatus; // EVENT_STATUS
DWORD dwEventId;
WD_BUS_TYPE dwCardType; //WD_BUS_PCI, WD_BUS_USB, WD_BUS_PCMCIA
DWORD hKernelPlugIn;
DWORD dwOptions; // WD_EVENT_OPTION
union
{
struct
{
WD_PCI_ID cardId;
WD_PCI_SLOT pciSlot;
} Pci;
struct
{
WD_USB_ID deviceId;
DWORD dwUniqueID;
} Usb;
struct
{
WD_PCMCIA_ID deviceId;
WD_PCMCIA_SLOT slot;
} Pcmcia;
} u;
DWORD dwEventVer;
DWORD dwNumMatchTables;
WDU_MATCH_TABLE matchTables[1];
} WD_EVENT, WD_EVENT_V622;
typedef struct
{
DWORD applications_num;
DWORD devices_num;
} WD_USAGE;
enum { WD_USB_HARD_RESET = 1 };
typedef struct
{
DWORD hDevice;
DWORD dwOptions; // USB_RESET options:
// WD_USB_HARD_RESET - will reset the device
// even if it is not disabled.
// After using this option it is advised to
// un-register the device (WD_UsbDeviceUnregister())
// and register it again - to make sure that the
// device has all its resources.
DWORD dwStatus; // Reset status code - see WD_ERROR_CODES enum definition.
// WD_USBD_STATUS_SUCCESS for a successful reset.
} WD_USB_RESET_DEVICE, WD_USB_RESET_DEVICE_V52;
typedef struct
{
WORD wVendorId;
WORD wDeviceId;
WORD wSubVendorId;
WORD wSubDeviceId;
DWORD dwOptions; // WD_MATCH_EXCLUDE
} WD_HS_MATCH_TABLE;
typedef struct {
DWORD handle;
DWORD dwOptions; // WD_CPCI_PNP_SUPPORT in case we want to use OS PnP support
DWORD dwNumMatchTables;
WD_HS_MATCH_TABLE matchTables[1];
} WD_HS_WATCH, WD_HS_WATCH_V622;
#define WD_KERNEL_DRIVER_PLUGIN_HANDLE 0xffff0000
#ifndef BZERO
#define BZERO(buf) memset(&(buf), 0, sizeof(buf))
#endif
#ifndef INVALID_HANDLE_VALUE
#define INVALID_HANDLE_VALUE ((HANDLE)(-1))
#endif
#ifndef CTL_CODE
#define CTL_CODE(DeviceType, Function, Method, Access) ( \
((DeviceType)<<16) | ((Access)<<14) | ((Function)<<2) | (Method) \
)
#define METHOD_BUFFERED 0
#define METHOD_IN_DIRECT 1
#define METHOD_OUT_DIRECT 2
#define METHOD_NEITHER 3
#define FILE_ANY_ACCESS 0
#define FILE_READ_ACCESS 1 // file & pipe
#define FILE_WRITE_ACCESS 2 // file & pipe
#endif
#if defined(UNIX)
#define WD_CTL_CODE(wFuncNum) wFuncNum
#else
// Device type
#define WD_TYPE 38200
#define WD_CTL_CODE(wFuncNum) ((DWORD) CTL_CODE( WD_TYPE, wFuncNum, METHOD_NEITHER, FILE_ANY_ACCESS))
#endif
// WinDriver function IOCTL calls. For details on the WinDriver functions,
// see the WinDriver manual or included help files.
#define IOCTL_WD_DMA_LOCK WD_CTL_CODE(0x901)
#define IOCTL_WD_DMA_UNLOCK WD_CTL_CODE(0x902)
#define IOCTL_WD_TRANSFER WD_CTL_CODE(0x98c)
#define IOCTL_WD_MULTI_TRANSFER WD_CTL_CODE(0x98d)
#define IOCTL_WD_PCI_SCAN_CARDS WD_CTL_CODE(0x90e)
#define IOCTL_WD_PCI_GET_CARD_INFO WD_CTL_CODE(0x90f)
#define IOCTL_WD_VERSION WD_CTL_CODE(0x910)
#define IOCTL_WD_PCI_CONFIG_DUMP WD_CTL_CODE(0x91a)
#define IOCTL_WD_KERNEL_PLUGIN_OPEN WD_CTL_CODE(0x91b)
#define IOCTL_WD_KERNEL_PLUGIN_CLOSE WD_CTL_CODE(0x91c)
#define IOCTL_WD_KERNEL_PLUGIN_CALL WD_CTL_CODE(0x91d)
#define IOCTL_WD_INT_ENABLE WD_CTL_CODE(0x98e)
#define IOCTL_WD_INT_DISABLE WD_CTL_CODE(0x91f)
#define IOCTL_WD_INT_COUNT WD_CTL_CODE(0x920)
#define IOCTL_WD_ISAPNP_SCAN_CARDS WD_CTL_CODE(0x924)
#define IOCTL_WD_ISAPNP_CONFIG_DUMP WD_CTL_CODE(0x926)
#define IOCTL_WD_SLEEP WD_CTL_CODE(0x927)
#define IOCTL_WD_DEBUG WD_CTL_CODE(0x928)
#define IOCTL_WD_DEBUG_DUMP WD_CTL_CODE(0x929)
#define IOCTL_WD_CARD_UNREGISTER WD_CTL_CODE(0x92b)
#define IOCTL_WD_ISAPNP_GET_CARD_INFO WD_CTL_CODE(0x92d)
#define IOCTL_WD_PCMCIA_SCAN_CARDS WD_CTL_CODE(0x996)
#define IOCTL_WD_PCMCIA_GET_CARD_INFO WD_CTL_CODE(0x997)
#define IOCTL_WD_PCMCIA_CONFIG_DUMP WD_CTL_CODE(0x998)
#define IOCTL_WD_CARD_REGISTER WD_CTL_CODE(0x992)
#define IOCTL_WD_INT_WAIT WD_CTL_CODE(0x94b)
#define IOCTL_WD_LICENSE WD_CTL_CODE(0x952)
#define IOCTL_WD_USB_RESET_PIPE WD_CTL_CODE(0x971)
#define IOCTL_WD_USB_RESET_DEVICE WD_CTL_CODE(0x93f)
#define IOCTL_WD_USB_SCAN_DEVICES WD_CTL_CODE(0x969)
#define IOCTL_WD_USB_TRANSFER WD_CTL_CODE(0x967)
#define IOCTL_WD_USB_DEVICE_REGISTER WD_CTL_CODE(0x968)
#define IOCTL_WD_USB_DEVICE_UNREGISTER WD_CTL_CODE(0x970)
#define IOCTL_WD_USB_GET_CONFIGURATION WD_CTL_CODE(0x974)
#define IOCTL_WD_EVENT_REGISTER WD_CTL_CODE(0x993)
#define IOCTL_WD_EVENT_UNREGISTER WD_CTL_CODE(0x987)
#define IOCTL_WD_EVENT_PULL WD_CTL_CODE(0x988)
#define IOCTL_WD_EVENT_SEND WD_CTL_CODE(0x989)
#define IOCTL_WD_DEBUG_ADD WD_CTL_CODE(0x964)
#define IOCTL_WD_USB_RESET_DEVICEEX WD_CTL_CODE(0x973)
#define IOCTL_WD_USAGE WD_CTL_CODE(0x976)
#define IOCTL_WDU_GET_DEVICE_DATA WD_CTL_CODE(0x980)
#define IOCTL_WDU_SET_INTERFACE WD_CTL_CODE(0x981)
#define IOCTL_WDU_RESET_PIPE WD_CTL_CODE(0x982)
#define IOCTL_WDU_TRANSFER WD_CTL_CODE(0x983)
#define IOCTL_WDU_HALT_TRANSFER WD_CTL_CODE(0x985)
#define IOCTL_WD_WATCH_PCI_START WD_CTL_CODE(0x999)
#define IOCTL_WD_WATCH_PCI_STOP WD_CTL_CODE(0x99a)
#define IOCTL_WDU_WAKEUP WD_CTL_CODE(0x98a)
#define IOCTL_WDU_RESET_DEVICE WD_CTL_CODE(0x98b)
#define IOCTL_WD_GET_DEVICE_PROPERTY WD_CTL_CODE(0x990)
#define IOCTL_WD_CARD_CLEANUP_SETUP WD_CTL_CODE(0x995)
#if defined(UNIX)
typedef struct
{
DWORD dwHeader;
PVOID pData;
DWORD dwSize;
} WD_IOCTL_HEADER;
#define WD_IOCTL_HEADER_CODE 0xa410b413UL
#endif
#if defined(__KERNEL__)
HANDLE __cdecl WD_Open(void);
void __cdecl WD_Close(HANDLE hWD);
DWORD __cdecl KP_DeviceIoControl(DWORD dwFuncNum, HANDLE h, PVOID pParam,
DWORD dwSize);
#define WD_FUNCTION(wFuncNum, h, pParam, dwSize, fWait) \
KP_DeviceIoControl(\
(DWORD) wFuncNum, h,\
(PVOID) pParam, (DWORD) dwSize\
)
#else
#if defined(UNIX)
static inline ULONG WD_FUNCTION_LOCAL( DWORD wFuncNum, HANDLE h,
PVOID pParam, DWORD dwSize, BOOL fWait)
{
WD_IOCTL_HEADER ioctl_hdr;
ioctl_hdr.dwHeader = WD_IOCTL_HEADER_CODE;
ioctl_hdr.pData = pParam;
ioctl_hdr.dwSize = dwSize;
#if defined(VXWORKS)
return (ULONG) ioctl((int)(h), wFuncNum, (int)&ioctl_hdr);
#elif defined(LINUX) || defined(SOLARIS)
return (ULONG) ioctl((int)(DWORD)(h), wFuncNum, &ioctl_hdr);
#endif
}
#if defined(VXWORKS)
#define WD_OpenLocal()\
((HANDLE)open("/windrvr6", O_RDWR, 0644))
#else
#define WD_OpenLocal()\
((HANDLE)(DWORD)open("/dev/windrvr6", O_RDWR))
#endif
#define WD_CloseLocal(h)\
close((int)(DWORD)(h))
#elif defined(WINCE) && defined(_WIN32_WCE_EMULATION)
HANDLE WINAPI WCE_EMU_WD_Open();
void WINAPI WCE_EMU_WD_Close(HANDLE hWD);
BOOL WINAPI WCE_EMU_WD_FUNCTION(DWORD wFuncNum, HANDLE h, PVOID
pParam, DWORD dwSize);
#define WD_OpenLocal() WCE_EMU_WD_Open()
#define WD_CloseLocal(h) WCE_EMU_WD_Close(h)
#define WD_FUNCTION_LOCAL(wFuncNum, h, pParam, dwSize, fWait) \
WCE_EMU_WD_FUNCTION(wFuncNum, h, pParam, dwSize)
#elif defined(WIN32) || defined(WINCE)
#define WD_CloseLocal(h)\
CloseHandle(h)
#if defined(WINCE)
#if defined(WD_CE_ENHANCED_INTR)
#include <ceddk.h>
#define InterruptDisable CE_InterruptDisable
#include <pkfuncs.h>
#undef InterruptDisable
#else
void WINAPI SetProcPermissions(DWORD dwPermissions);
#endif
#define WD_OpenLocal()\
(SetProcPermissions(0xFFFF), CreateFile(\
TEXT("WDR1:"),\
GENERIC_READ,\
FILE_SHARE_READ | FILE_SHARE_WRITE,\
NULL, OPEN_EXISTING, 0, NULL))
static DWORD WD_FUNCTION_LOCAL(DWORD wFuncNum, HANDLE h,
PVOID pParam, DWORD dwSize, BOOL fWait)
{
DWORD dwTmp;
DWORD rc = (DWORD)WD_STATUS_INVALID_WD_HANDLE;
((DWORD) DeviceIoControl(h, wFuncNum, pParam, dwSize, &rc, sizeof(DWORD),
&dwTmp, NULL));
return rc;
}
#elif defined(WIN32)
#define WD_OpenLocal()\
CreateFile(\
TEXT("\\\\.\\WINDRVR6"),\
GENERIC_READ,\
FILE_SHARE_READ | FILE_SHARE_WRITE,\
NULL, OPEN_EXISTING, FILE_FLAG_OVERLAPPED, NULL)
static DWORD WD_FUNCTION_LOCAL(DWORD wFuncNum, HANDLE h,
PVOID pParam, DWORD dwSize, BOOL fWait)
{
DWORD dwTmp;
HANDLE hWD = fWait ? WD_OpenLocal() : h;
DWORD rc = (DWORD)WD_STATUS_INVALID_WD_HANDLE;
if (hWD==INVALID_HANDLE_VALUE)
return (DWORD) -1;
DeviceIoControl(hWD, (DWORD) wFuncNum, (PVOID) pParam,
(DWORD) dwSize, &rc, sizeof(DWORD), &dwTmp, NULL);
if (fWait)
WD_CloseLocal(hWD);
return rc;
}
#endif
#endif
#define WD_FUNCTION WD_FUNCTION_LOCAL
#define WD_Close WD_CloseLocal
#define WD_Open WD_OpenLocal
#endif
#define SIZE_OF_WD_DMA(pDma) \
sizeof(WD_DMA) + ((pDma)->dwPages <= WD_DMA_PAGES ? 0 : ((pDma)->dwPages - WD_DMA_PAGES) * sizeof(WD_DMA_PAGE))
#define SIZE_OF_WD_EVENT(pEvent) \
sizeof(WD_EVENT) + sizeof(WDU_MATCH_TABLE) * ((pEvent)->dwNumMatchTables - 1)
#define SIZE_OF_WD_HS_WATCH(pHsWatch) \
sizeof(WD_HS_WATCH) + sizeof(WD_HS_MATCH_TABLE) * ((pHsWatch)->dwNumMatchTables - 1)
#define WD_Debug(h,pDebug)\
WD_FUNCTION(IOCTL_WD_DEBUG, h, pDebug, sizeof (WD_DEBUG), FALSE)
#define WD_DebugDump(h,pDebugDump)\
WD_FUNCTION(IOCTL_WD_DEBUG_DUMP, h, pDebugDump, sizeof (WD_DEBUG_DUMP), FALSE)
#define WD_DebugAdd(h, pDebugAdd)\
WD_FUNCTION(IOCTL_WD_DEBUG_ADD, h, pDebugAdd, sizeof(WD_DEBUG_ADD), FALSE)
#define WD_Transfer(h,pTransfer)\
WD_FUNCTION(IOCTL_WD_TRANSFER, h, pTransfer, sizeof (WD_TRANSFER), FALSE)
#define WD_MultiTransfer(h,pTransferArray,dwNumTransfers)\
WD_FUNCTION(IOCTL_WD_MULTI_TRANSFER, h, pTransferArray, sizeof (WD_TRANSFER) * (dwNumTransfers), FALSE)
#define WD_DMALock(h,pDma)\
WD_FUNCTION(IOCTL_WD_DMA_LOCK, h, pDma, SIZE_OF_WD_DMA(pDma), FALSE)
#define WD_DMAUnlock(h,pDma)\
WD_FUNCTION(IOCTL_WD_DMA_UNLOCK, h, pDma, SIZE_OF_WD_DMA(pDma), FALSE)
#define WD_CardRegister(h,pCard)\
WD_FUNCTION(IOCTL_WD_CARD_REGISTER, h, pCard, sizeof (WD_CARD_REGISTER), FALSE)
#define WD_CardUnregister(h,pCard)\
WD_FUNCTION(IOCTL_WD_CARD_UNREGISTER, h, pCard, sizeof (WD_CARD_REGISTER), FALSE)
#define WD_CardCleanupSetup(h,pCardCleanup)\
WD_FUNCTION(IOCTL_WD_CARD_CLEANUP_SETUP, h, pCardCleanup, sizeof(WD_CARD_CLEANUP), FALSE)
#define WD_PciScanCards(h,pPciScan)\
WD_FUNCTION(IOCTL_WD_PCI_SCAN_CARDS, h, pPciScan, sizeof (WD_PCI_SCAN_CARDS), FALSE)
#define WD_PciGetCardInfo(h,pPciCard)\
WD_FUNCTION(IOCTL_WD_PCI_GET_CARD_INFO, h, pPciCard, sizeof (WD_PCI_CARD_INFO), FALSE)
#define WD_PciConfigDump(h,pPciConfigDump)\
WD_FUNCTION(IOCTL_WD_PCI_CONFIG_DUMP, h, pPciConfigDump, sizeof (WD_PCI_CONFIG_DUMP), FALSE)
#define WD_Version(h,pVerInfo)\
WD_FUNCTION(IOCTL_WD_VERSION, h, pVerInfo, sizeof (WD_VERSION), FALSE)
#define WD_License(h,pLicense)\
WD_FUNCTION(IOCTL_WD_LICENSE, h, pLicense, sizeof (WD_LICENSE), FALSE)
#define WD_KernelPlugInOpen(h,pKernelPlugIn)\
WD_FUNCTION(IOCTL_WD_KERNEL_PLUGIN_OPEN, h, pKernelPlugIn, sizeof (WD_KERNEL_PLUGIN), FALSE)
#define WD_KernelPlugInClose(h,pKernelPlugIn)\
WD_FUNCTION(IOCTL_WD_KERNEL_PLUGIN_CLOSE, h, pKernelPlugIn, sizeof (WD_KERNEL_PLUGIN), FALSE)
#define WD_KernelPlugInCall(h,pKernelPlugInCall)\
WD_FUNCTION(IOCTL_WD_KERNEL_PLUGIN_CALL, h, pKernelPlugInCall, sizeof (WD_KERNEL_PLUGIN_CALL), FALSE)
#define WD_IntEnable(h,pInterrupt)\
WD_FUNCTION(IOCTL_WD_INT_ENABLE, h, pInterrupt, sizeof (WD_INTERRUPT), FALSE)
#define WD_IntDisable(h,pInterrupt)\
WD_FUNCTION(IOCTL_WD_INT_DISABLE, h, pInterrupt, sizeof (WD_INTERRUPT), FALSE)
#define WD_IntCount(h,pInterrupt)\
WD_FUNCTION(IOCTL_WD_INT_COUNT, h, pInterrupt, sizeof (WD_INTERRUPT), FALSE)
#define WD_IntWait(h,pInterrupt)\
WD_FUNCTION(IOCTL_WD_INT_WAIT, h, pInterrupt, sizeof (WD_INTERRUPT), TRUE)
#define WD_IsapnpScanCards(h,pIsapnpScan)\
WD_FUNCTION(IOCTL_WD_ISAPNP_SCAN_CARDS, h, pIsapnpScan, sizeof (WD_ISAPNP_SCAN_CARDS), FALSE)
#define WD_IsapnpGetCardInfo(h,pIsapnpCard)\
WD_FUNCTION(IOCTL_WD_ISAPNP_GET_CARD_INFO, h, pIsapnpCard, sizeof (WD_ISAPNP_CARD_INFO), FALSE)
#define WD_IsapnpConfigDump(h,pIsapnpConfigDump)\
WD_FUNCTION(IOCTL_WD_ISAPNP_CONFIG_DUMP, h, pIsapnpConfigDump, sizeof (WD_ISAPNP_CONFIG_DUMP), FALSE)
#define WD_PcmciaScanCards(h,pPcmciaScan)\
WD_FUNCTION(IOCTL_WD_PCMCIA_SCAN_CARDS, h, pPcmciaScan, sizeof (WD_PCMCIA_SCAN_CARDS), FALSE)
#define WD_PcmciaGetCardInfo(h,pPcmciaCard)\
WD_FUNCTION(IOCTL_WD_PCMCIA_GET_CARD_INFO, h, pPcmciaCard, sizeof (WD_PCMCIA_CARD_INFO), FALSE)
#define WD_PcmciaConfigDump(h,pPcmciaConfigDump)\
WD_FUNCTION(IOCTL_WD_PCMCIA_CONFIG_DUMP, h, pPcmciaConfigDump, sizeof (WD_PCMCIA_CONFIG_DUMP), FALSE)
#define WD_Sleep(h,pSleep)\
WD_FUNCTION(IOCTL_WD_SLEEP, h, pSleep, sizeof (WD_SLEEP), FALSE)
#define WD_UsbScanDevice(h, pScan)\
WD_FUNCTION(IOCTL_WD_USB_SCAN_DEVICES, h, pScan,sizeof(WD_USB_SCAN_DEVICES), FALSE)
#define WD_UsbGetConfiguration(h, pConfig) \
WD_FUNCTION(IOCTL_WD_USB_GET_CONFIGURATION, h, pConfig, sizeof(WD_USB_CONFIGURATION), FALSE)
#define WD_UsbDeviceRegister(h, pRegister)\
WD_FUNCTION(IOCTL_WD_USB_DEVICE_REGISTER, h, pRegister, sizeof(WD_USB_DEVICE_REGISTER), FALSE)
#define WD_UsbTransfer(h, pTrans)\
WD_FUNCTION(IOCTL_WD_USB_TRANSFER, h, pTrans, sizeof(WD_USB_TRANSFER), TRUE)
#define WD_UsbDeviceUnregister(h, pRegister)\
WD_FUNCTION(IOCTL_WD_USB_DEVICE_UNREGISTER, h, pRegister, sizeof(WD_USB_DEVICE_REGISTER), FALSE)
#define WD_UsbResetPipe(h, pResetPipe)\
WD_FUNCTION(IOCTL_WD_USB_RESET_PIPE, h, pResetPipe, sizeof(WD_USB_RESET_PIPE), FALSE)
#define WD_UsbResetDevice(h, hDevice)\
WD_FUNCTION(IOCTL_WD_USB_RESET_DEVICE, h, &hDevice, sizeof(DWORD), FALSE)
#define WD_EventRegister(h, pEvent) \
WD_FUNCTION(IOCTL_WD_EVENT_REGISTER, h, pEvent, SIZE_OF_WD_EVENT(pEvent), FALSE)
#define WD_EventUnregister(h, pEvent) \
WD_FUNCTION(IOCTL_WD_EVENT_UNREGISTER, h, pEvent, SIZE_OF_WD_EVENT(pEvent), FALSE)
#define WD_EventPull(h,pEvent) \
WD_FUNCTION(IOCTL_WD_EVENT_PULL, h, pEvent, SIZE_OF_WD_EVENT(pEvent), FALSE)
#define WD_EventSend(h,pEvent) \
WD_FUNCTION(IOCTL_WD_EVENT_SEND, h, pEvent, SIZE_OF_WD_EVENT(pEvent), FALSE)
#define WD_UsbResetDeviceEx(h, pReset)\
WD_FUNCTION(IOCTL_WD_USB_RESET_DEVICEEX, h, pReset, sizeof(WD_USB_RESET_DEVICE), FALSE)
#define WD_Usage(h, pStop) \
WD_FUNCTION(IOCTL_WD_USAGE, h, pStop, sizeof(WD_USAGE), FALSE)
#define WD_UGetDeviceData(h, pGetDevData) \
WD_FUNCTION(IOCTL_WDU_GET_DEVICE_DATA, h, pGetDevData, sizeof(WDU_GET_DEVICE_DATA), FALSE);
#define WD_GetDeviceProperty(h, pGetDevProperty) \
WD_FUNCTION(IOCTL_WD_GET_DEVICE_PROPERTY, h, pGetDevProperty, sizeof(WD_GET_DEVICE_PROPERTY), FALSE);
#define WD_USetInterface(h, pSetIfc) \
WD_FUNCTION(IOCTL_WDU_SET_INTERFACE, h, pSetIfc, sizeof(WDU_SET_INTERFACE), FALSE);
#define WD_UResetPipe(h, pResetPipe) \
WD_FUNCTION(IOCTL_WDU_RESET_PIPE, h, pResetPipe, sizeof(WDU_RESET_PIPE), FALSE);
#define WD_UTransfer(h, pTrans) \
WD_FUNCTION(IOCTL_WDU_TRANSFER, h, pTrans, sizeof(WDU_TRANSFER), TRUE);
#define WD_UHaltTransfer(h, pHaltTrans) \
WD_FUNCTION(IOCTL_WDU_HALT_TRANSFER, h, pHaltTrans, sizeof(WDU_HALT_TRANSFER), FALSE);
#define WD_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -