📄 windrvr.bas
字号:
Global Const WD_ACTIONS_POWER = &H3FF0
Global Const WD_ACTIONS_ALL = &H3FF3
Global Const WD_ACKNOWLEDGE = &H1
Global Const WD_REENUM = &H2
Type WD_EVENT
handle As Long
dwAction As Long ' WD_EVENT_ACTION
dwStatus As Long ' EVENT_STATUS
dwEventId As Long
dwCardType As Long 'WD_BUS_PCI or WD_BUS_USB
hKernelPlugIn As Long
dwOptions As Long ' WD_EVENT_OPTION
dwVendorID As Long
dwProductID As Long ' dwDeviceId for PCI cards
' for PCI card
' dw1 - dwBus
' dw2 - dwSlot
' dw3 - dwFunction
' for USB device
' dw1 - dwUniqueID
dw1 As Long
dw2 As Long
dw3 As Long
dwEventVer As Long
dwNumMatchTables As Long
matchTables(1) As WDU_MATCH_TABLE
End Type
Global Const WD_USB_HARD_RESET = 1
Private IOCTL_WD_USB_RESET_PIPE As Long
Private IOCTL_WD_USB_RESET_DEVICE As Long
Private IOCTL_WD_USB_RESET_DEVICE_EX As Long
Private IOCTL_WD_USB_SCAN_DEVICES As Long
Private IOCTL_WD_USB_SCAN_DEVICES_V432 As Long
Private IOCTL_WD_USB_TRANSFER As Long
Private IOCTL_WD_USB_DEVICE_REGISTER As Long
Private IOCTL_WD_USB_DEVICE_UNREGISTER As Long
Private IOCTL_WD_USB_GET_CONFIGURATION As Long
Dim WinDriverGlobalDW As Long
Global Const WD_TYPE As Long = 38200
Global Const FILE_ANY_ACCESS As Long = 0
Global Const METHOD_NEITHER As Long = 3
' This is an implementation of a WinIOCTL macro (CTL_CODE)
Function Get_Ctl_Code(Nr As Integer) As Long
Dim lTMP As Long
Const lMaxLong As Long = 2147483647
lTMP = (WD_TYPE * 2 ^ 15) Or (FILE_ANY_ACCESS * 2 ^ 13) + ((Nr * 4) Or (METHOD_NEITHER)) \ 2
Get_Ctl_Code = 0 - (lMaxLong - lTMP) * 2 - 1
End Function ' Get_Ctl_Code
Function WD_Open() As Long
Static WD_Initialized As Integer
If (WD_Initialized = 0) Then
WD_Initialize
WD_Initialized = 1
End If
WD_Open = CreateFile("\\.\WINDRVR6", GENERIC_READ, _
FILE_SHARE_READ Or FILE_SHARE_WRITE, 0, _
OPEN_EXISTING, FILE_FLAG_OVERLAPPED, 0)
End Function
Sub WD_Close(ByVal hWD As Long)
CloseHandle hWD
End Sub
Function WD_Debug(ByVal hWD As Long, ByRef Debug_parm As WD_Debug)
DeviceIoControl hWD, IOCTL_WD_DEBUG, Debug_parm, _
LenB(Debug_parm), WD_Debug, 4, WinDriverGlobalDW, 0
End Function ' WD_Debug
Function WD_DebugDump(ByVal hWD As Long, ByRef DebugDump As WD_DEBUG_DUMP)
DeviceIoControl hWD, IOCTL_WD_DEBUG_DUMP, DebugDump, _
LenB(DebugDump), WD_DebugDump, 4, WinDriverGlobalDW, 0
End Function ' WD_DebugDump
Function WD_Transfer(ByVal hWD As Long, ByRef Transfer As WD_Transfer)
DeviceIoControl hWD, IOCTL_WD_TRANSFER, Transfer, _
LenB(Transfer), WD_Transfer, 4, WinDriverGlobalDW, 0
End Function ' WD_Transfer
Function WD_MultiTransfer(ByVal hWD As Long, ByRef TransferArray As WD_Transfer, ByVal dwNumTransfers As Integer)
DeviceIoControl hWD, IOCTL_WD_MULTI_TRANSFER, TransferArray, _
LenB(TransferArray) * dwNumTransfers, WD_MultiTransfer, _
4, WinDriverGlobalDW, 0
End Function ' WD_MultiTransfer
Function WD_DMALock(ByVal hWD As Long, ByRef Dma As WD_DMA)
DeviceIoControl hWD, IOCTL_WD_DMA_LOCK, Dma, LenB(Dma), WD_DMALock, 4, _
WinDriverGlobalDW, 0
End Function ' WD_DMALock
Function WD_DMAUnlock(ByVal hWD As Long, ByRef Dma As WD_DMA)
DeviceIoControl hWD, IOCTL_WD_DMA_UNLOCK, Dma, LenB(Dma), WD_DMAUnlock, _
4, WinDriverGlobalDW, 0
End Function ' WD_DMAUnlock
Function WD_IntEnable(ByVal hWD As Long, ByRef TheInterrupt As WD_INTERRUPT)
DeviceIoControl hWD, IOCTL_WD_INT_ENABLE, TheInterrupt, _
LenB(TheInterrupt), WD_IntEnable, 4, WinDriverGlobalDW, 0
End Function ' WD_IntEnable
Function WD_IntDisable(ByVal hWD As Long, ByRef TheInterrupt As WD_INTERRUPT)
DeviceIoControl hWD, IOCTL_WD_INT_DISABLE, TheInterrupt, _
LenB(TheInterrupt), WD_IntDisable, 4, WinDriverGlobalDW, 0
End Function ' WD_IntDisable
Function WD_IntCount(ByVal hWD As Long, ByRef TheInterrupt As WD_INTERRUPT)
DeviceIoControl hWD, IOCTL_WD_INT_COUNT, TheInterrupt, _
LenB(TheInterrupt), WD_IntCount, 4, WinDriverGlobalDW, 0
End Function ' WD_IntCount
Function WD_IntWait(ByVal hWD As Long, ByRef TheInterrupt As WD_INTERRUPT)
Dim h As Long
h = WD_Open()
DeviceIoControl h, IOCTL_WD_INT_WAIT, TheInterrupt, _
LenB(TheInterrupt), WD_IntWait, 4, WinDriverGlobalDW, 0
WD_Close h
End Function ' WD_IntWait
Function WD_IsapnpScanCards(ByVal hWD As Long, ByRef IsapnpScanCards As WD_ISAPNP_SCAN_CARDS)
DeviceIoControl hWD, IOCTL_WD_ISAPNP_SCAN_CARDS, IsapnpScanCards, _
LenB(IsapnpScanCards), WD_IsapnpScanCards, 4, WinDriverGlobalDW, 0
End Function ' WD_IsapnpScanCards
Function WD_IsapnpGetCardInfo(ByVal hWD As Long, ByRef IsapnpGetCardInfo As WD_ISAPNP_CARD_INFO)
DeviceIoControl hWD, IOCTL_WD_ISAPNP_GET_CARD_INFO, IsapnpGetCardInfo, _
LenB(IsapnpGetCardInfo), WD_IsapnpGetCardInfo, 4, WinDriverGlobalDW, 0
End Function ' WD_IsapnpGetCardInfo
Function WD_IsapnpConfigDump(ByVal hWD As Long, ByRef IsapnpConfigDump As WD_ISAPNP_CONFIG_DUMP)
DeviceIoControl hWD, IOCTL_WD_ISAPNP_CONFIG_DUMP, IsapnpConfigDump, _
LenB(IsapnpConfigDump), WD_IsapnpConfigDump, 4, WinDriverGlobalDW, 0
End Function ' WD_IsapnpConfigDump
Function WD_PcmciaScanCards(ByVal hWD As Long, ByRef PcmciaScanCards As WD_PCMCIA_SCAN_CARDS)
DeviceIoControl hWD, IOCTL_WD_PCMCIA_SCAN_CARDS, PcmciaScanCards, _
LenB(PcmciaScanCards), WD_PcmciaScanCards, 4, WinDriverGlobalDW, 0
End Function ' WD_PcmciaScanCards
Function WD_PcmciaGetCardInfo(ByVal hWD As Long, ByRef PcmciaCardInfo As WD_PCMCIA_CARD_INFO)
DeviceIoControl hWD, IOCTL_WD_PCMCIA_GET_CARD_INFO, PcmciaCardInfo, _
LenB(PcmciaCardInfo), WD_PcmciaGetCardInfo, 4, WinDriverGlobalDW, 0
End Function ' WD_PcmciaGetCardInfo
Function WD_PcmciaConfigDump(ByVal hWD As Long, ByRef PcmciaConfigDump As WD_PCMCIA_CONFIG_DUMP)
DeviceIoControl hWD, IOCTL_WD_PCMCIA_CONFIG_DUMP, PcmciaConfigDump, _
LenB(PcmciaConfigDump), WD_PcmciaConfigDump, 4, WinDriverGlobalDW, 0
End Function ' WD_PcmciaConfigDump
Function WD_Sleep(ByVal hWD As Long, ByRef Sleep As WD_Sleep)
DeviceIoControl hWD, IOCTL_WD_SLEEP, Sleep, _
LenB(Sleep), WD_Sleep, 4, WinDriverGlobalDW, 0
End Function ' WD_Sleep
Function WD_CardRegister(ByVal hWD As Long, ByRef Card As WD_CARD_REGISTER)
DeviceIoControl hWD, IOCTL_WD_CARD_REGISTER, Card, _
LenB(Card), WD_CardRegister, 4, WinDriverGlobalDW, 0
End Function ' WD_CardRegister
Function WD_CardUnregister(ByVal hWD As Long, ByRef Card As WD_CARD_REGISTER)
DeviceIoControl hWD, IOCTL_WD_CARD_UNREGISTER, Card, _
LenB(Card), WD_CardUnregister, 4, WinDriverGlobalDW, 0
End Function ' WD_CardUnregister
Function WD_PciScanCards(ByVal hWD As Long, ByRef pciScan As WD_PCI_SCAN_CARDS)
DeviceIoControl hWD, IOCTL_WD_PCI_SCAN_CARDS, pciScan, _
LenB(pciScan), WD_PciScanCards, 4, WinDriverGlobalDW, 0
End Function ' WD_PciScanCards
Function WD_PciGetCardInfo(ByVal hWD As Long, ByRef PciCard As WD_PCI_CARD_INFO)
DeviceIoControl hWD, IOCTL_WD_PCI_GET_CARD_INFO, PciCard, _
LenB(PciCard), WD_PciGetCardInfo, 4, WinDriverGlobalDW, 0
End Function ' WD_PciGetCardInfo
Function WD_Version(ByVal hWD As Long, ByRef VerInfo As WD_VERSION)
DeviceIoControl hWD, IOCTL_WD_VERSION, VerInfo, _
LenB(VerInfo), WD_Version, 4, WinDriverGlobalDW, 0
End Function ' WD_Version
Function WD_License(ByVal hWD As Long, ByRef License As WD_License)
DeviceIoControl hWD, IOCTL_WD_LICENSE, License, _
LenB(License), WD_License, 4, WinDriverGlobalDW, 0
End Function ' WD_License
Function WD_KernelPlugInOpen(ByVal hWD As Long, ByRef KernelPlugInOpen As WD_KERNEL_PLUGIN)
DeviceIoControl hWD, IOCTL_WD_KERNEL_PLUGIN_OPEN, KernelPlugInOpen, _
LenB(KernelPlugInOpen), WD_KernelPlugInOpen, 4, WinDriverGlobalDW, 0
End Function ' WD_KernelPlugInOpen
Function WD_KernelPlugInClose(ByVal hWD As Long, ByRef KernelPlugInClose As WD_KERNEL_PLUGIN)
DeviceIoControl hWD, IOCTL_WD_KERNEL_PLUGIN_CLOSE, KernelPlugInClose, _
LenB(KernelPlugInClose), WD_KernelPlugInClose, 4, WinDriverGlobalDW, 0
End Function ' WD_KernelPlugInClose
Function WD_KernelPlugInCall(ByVal hWD As Long, ByRef KernelPlugInCall As WD_KERNEL_PLUGIN_CALL)
DeviceIoControl hWD, IOCTL_WD_KERNEL_PLUGIN_CALL, KernelPlugInCall, _
LenB(KernelPlugInCall), WD_KernelPlugInCall, 4, WinDriverGlobalDW, 0
End Function ' WD_KernelPlugInCall
Function WD_PciConfigDump(ByVal hWD As Long, ByRef PciConfigDump As WD_PCI_CONFIG_DUMP)
DeviceIoControl hWD, IOCTL_WD_PCI_CONFIG_DUMP, PciConfigDump, _
LenB(PciConfigDump), WD_PciConfigDump, 4, WinDriverGlobalDW, 0
End Function ' WD_PciConfigDump
Function WD_UsbScanDevice(ByVal hWD As Long, ByRef Scan As WD_USB_SCAN_DEVICES)
DeviceIoControl hWD, IOCTL_WD_USB_SCAN_DEVICES, Scan, _
LenB(Scan), WD_UsbScanDevice, 4, WinDriverGlobalDW, 0
End Function ' WD_UsbScanDevice
Function WD_UsbGetConfiguration(ByVal hWD As Long, ByRef Config As WD_USB_CONFIGURATION)
DeviceIoControl hWD, IOCTL_WD_USB_GET_CONFIGURATION, Config, _
LenB(Config), WD_UsbGetConfiguration, 4, WinDriverGlobalDW, 0
End Function ' WD_UsbGetConfiguration
Function WD_UsbDeviceRegister(ByVal hWD As Long, ByRef Dev As WD_USB_DEVICE_REGISTER)
DeviceIoControl hWD, IOCTL_WD_USB_DEVICE_REGISTER, Dev, _
LenB(Dev), WD_UsbDeviceRegister, 4, WinDriverGlobalDW, 0
End Function ' WD_UsbDeviceRegister
Function WD_UsbTransfer(ByVal hWD As Long, ByRef Trans As WD_USB_TRANSFER)
Dim h As Long
h = WD_Open()
DeviceIoControl h, IOCTL_WD_USB_TRANSFER, Trans, _
LenB(Trans), WD_UsbTransfer, 4, WinDriverGlobalDW, 0
WD_Close h
End Function ' WD_UsbTransfer
Function WD_UsbDeviceUnregister(ByVal hWD As Long, ByRef Dev As WD_USB_DEVICE_REGISTER)
DeviceIoControl hWD, IOCTL_WD_USB_DEVICE_UNREGISTER, Dev, _
LenB(Dev), WD_UsbDeviceUnregister, 4, WinDriverGlobalDW, 0
End Function ' WD_UsbDeviceUnregister
Function WD_UsbResetPipe(ByVal hWD As Long, ByRef ResetPipe As WD_USB_RESET_PIPE)
DeviceIoControl hWD, IOCTL_WD_USB_RESET_PIPE, ResetPipe, _
LenB(ResetPipe), WD_UsbResetPipe, 4, WinDriverGlobalDW, 0
End Function ' WD_UsbResetPipe
Function WD_UsbResetDevice(ByVal hWD As Long, ByVal hDev As Long)
DeviceIoControl hWD, IOCTL_WD_USB_RESET_DEVICE, hDev, _
LenB(hDev), WD_UsbResetDevice, 4, WinDriverGlobalDW, 0
End Function ' WD_UsbResetDevice
Function WD_UsbResetDeviceEx(ByVal hWD As Long, ByRef ResetDevice As WD_USB_RESET_DEVICE)
DeviceIoControl hWD, IOCTL_WD_USB_RESET_DEVICE_EX, ResetDevice, _
LenB(ResetDevice), WD_UsbResetDeviceEx, 4, WinDriverGlobalDW, 0
End Function ' WD_UsbResetDevice_Ex
Function WD_EventRegister(ByVal hWD As Long, ByRef wdEvent As WD_EVENT)
DeviceIoControl hWD, IOCTL_WD_EVENT_REGISTER, wdEvent, _
LenB(wdEvent), WD_EventRegister, 4, WinDriverGlobalDW, 0
End Function ' WD_EventRegister
Function WD_EventUnregister(ByVal hWD As Long, ByRef wdEvent As WD_EVENT)
DeviceIoControl hWD, IOCTL_WD_EVENT_UNREGISTER, wdEvent, _
LenB(wdEvent), WD_EventUnregister, 4, WinDriverGlobalDW, 0
End Function ' WD_EventUnregister
Function WD_EventPull(ByVal hWD As Long, ByRef wdEvent As WD_EVENT)
DeviceIoControl hWD, IOCTL_WD_EVENT_PULL, wdEvent, _
LenB(wdEvent), WD_EventPull, 4, WinDriverGlobalDW, 0
End Function ' WD_EventPull
Function WD_EventSend(ByVal hWD As Long, ByRef wdEvent As WD_EVENT)
DeviceIoControl hWD, IOCTL_WD_EVENT_SEND, wdEvent, _
LenB(wdEvent), WD_EventSend, 4, WinDriverGlobalDW, 0
End Function ' WD_EventSend
Function WD_DebugAdd(ByVal hWD As Long, ByRef dbg As WD_DEBUG_ADD)
DeviceIoControl hWD, IOCTL_WD_DEBUG_ADD, dbg, _
LenB(dbg), WD_DebugAdd, 4, WinDriverGlobalDW, 0
End Function ' WD_DebugAdd
Sub WD_Initialize()
IOCTL_WD_DMA_LOCK = Get_Ctl_Code(&H901)
IOCTL_WD_DMA_UNLOCK = Get_Ctl_Code(&H902)
IOCTL_WD_TRANSFER = Get_Ctl_Code(&H903)
IOCTL_WD_MULTI_TRANSFER = Get_Ctl_Code(&H904)
IOCTL_WD_PCI_SCAN_CARDS = Get_Ctl_Code(&H90E)
IOCTL_WD_PCI_GET_CARD_INFO = Get_Ctl_Code(&H90F)
IOCTL_WD_VERSION = Get_Ctl_Code(&H910)
IOCTL_WD_PCI_CONFIG_DUMP = Get_Ctl_Code(&H91A)
IOCTL_WD_KERNEL_PLUGIN_OPEN = Get_Ctl_Code(&H91B)
IOCTL_WD_KERNEL_PLUGIN_CLOSE = Get_Ctl_Code(&H91C)
IOCTL_WD_KERNEL_PLUGIN_CALL = Get_Ctl_Code(&H91D)
IOCTL_WD_INT_ENABLE = Get_Ctl_Code(&H91E)
IOCTL_WD_INT_DISABLE = Get_Ctl_Code(&H91F)
IOCTL_WD_INT_COUNT = Get_Ctl_Code(&H920)
IOCTL_WD_ISAPNP_SCAN_CARDS = Get_Ctl_Code(&H924)
IOCTL_WD_ISAPNP_CONFIG_DUMP = Get_Ctl_Code(&H926)
IOCTL_WD_SLEEP = Get_Ctl_Code(&H927)
IOCTL_WD_DEBUG = Get_Ctl_Code(&H928)
IOCTL_WD_DEBUG_DUMP = Get_Ctl_Code(&H929)
IOCTL_WD_CARD_UNREGISTER = Get_Ctl_Code(&H92B)
IOCTL_WD_ISAPNP_GET_CARD_INFO = Get_Ctl_Code(&H92D)
IOCTL_WD_PCMCIA_SCAN_CARDS = Get_Ctl_Code(&H92F)
IOCTL_WD_PCMCIA_GET_CARD_INFO = Get_Ctl_Code(&H930)
IOCTL_WD_PCMCIA_CONFIG_DUMP = Get_Ctl_Code(&H931)
IOCTL_WD_CARD_REGISTER = Get_Ctl_Code(&H99C)
IOCTL_WD_INT_WAIT = Get_Ctl_Code(&H94B)
IOCTL_WD_LICENSE = Get_Ctl_Code(&H952)
IOCTL_WD_USB_RESET_PIPE = Get_Ctl_Code(&H971)
IOCTL_WD_USB_RESET_DEVICE = Get_Ctl_Code(&H93F)
IOCTL_WD_USB_SCAN_DEVICES = Get_Ctl_Code(&H969)
IOCTL_WD_USB_TRANSFER = Get_Ctl_Code(&H967)
IOCTL_WD_USB_DEVICE_REGISTER = Get_Ctl_Code(&H968)
IOCTL_WD_USB_DEVICE_UNREGISTER = Get_Ctl_Code(&H970)
IOCTL_WD_USB_GET_CONFIGURATION = Get_Ctl_Code(&H974)
IOCTL_WD_USB_RESET_DEVICE_EX = Get_Ctl_Code(&H973)
IOCTL_WD_EVENT_REGISTER = Get_Ctl_Code(&H99D)
IOCTL_WD_EVENT_UNREGISTER = Get_Ctl_Code(&H962)
IOCTL_WD_EVENT_PULL = Get_Ctl_Code(&H963)
IOCTL_WD_EVENT_SEND = Get_Ctl_Code(&H97A)
IOCTL_WD_DEBUG_ADD = Get_Ctl_Code(&H964)
End Sub
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -