DllEntry 动态链接库入口函数,首先调用
三个接口函数:
USBInstallDriver
USBUnInstallDriver
USBDeviceAttach
消息回调函数:
USBDeviceNotifications
ClearEndpointZeroStall
DetermineDestination
HidPdd_GetReport
HidPdd_SetReport
GetStringDescriptor
HidPdd_GetString
HidPdd_GetIdle
HidPdd_SetIdle
EnableRemoteWakeup
HidPdd_IssueCommand
流接口函数:
HID_Init
HID_Deinit
HID_Open
HID_Close
HID_IOControl
流接口函数功能:
1) DWORD XXX_Init (LPCTSTR pContext, LPCVOID lpvBusContext) ;
pContext :指向一个字符串,包含注册表中该流接口活动键值的路径
lpvBusContext :此参数是被处理过的一个指针数据,由函数 ActiveDeviceEx 的第四参数lpvParam传递而来(若该对应的驱动由 ActiveDeviceEx 调用而加载则 lpvBusContext 被传递过来,否则为0)
该函数是驱动挂载后第一个被执行的。主要负责完成对设备的初始化操作和驱动的安全性检查。由 ActiveDeviceEx 通过设备管理器调用。其返回值一般是一个数据结构指针,作为函数参数传递给其他流接口函数。
2) BOOL XXX_Deinit (DWORD hDeviceContext) ;
hDeviceContext : XXX_Init 的返回值。
整个驱动中最后执行。用来停止和卸载设备。由 DeactivateDevice 触发设备管理器调用。成功返回 TRUE 。
3) DWORD XXX_Open (DWORD hDeviceContext, DWORD AccessCode , DWORD ShareMode) ;
hDeviceContext : XXX_Init 的返回值。
AccessCode : 访问模式标志,读、写或其他。
ShareMode : 驱动的共享方式标志 。
打开设备,为后面的操作初始化数据就够,准备相应的资源。应用程序通过 CreateFile 函数间接调用之。返回一个结构指针,用于区分哪个应用程序调用了驱动,这个值还作为参数传递给其他接口函数 XXX_Read 、 XXX_Write 、 XXX_Seek 、 XXX_IOControl 。
4) BOOL XXX_Close (DWORD hOpenContext) ;
hOpenContext : XXX_Open 返回值。
关闭设备,释放资源。由 CloseHandle 函数间接调用。
5 ) BOOL XXX_IOControl (DWORD hOpenContext, DWORD dwCode, PBYTE pBufIn, DWORD dwLenIn, PBYTE pBufOut,
DWORD dwLenOut, PDWORD pdwActualOut) ;
hOpenContext : XXX_Open 返回值。
dwCode : 控制命令字。
pdwActualOut : 实际输出数据长度。
用于向设备发送命令,应用程序通过 DeviceIoControl 调用来实现该功能。要调用这个接口还需要在应用层和驱动之间建立一套相同的命令,通过宏定义 CTL_CODE(DeviceType, Function, Method, Access 来实现。如:
#define IOCTL_INIT_PORTS / CTL_CODE(FILE_DEVICE_UNKNOWN,0X801,
METHOD_BUFFERED,FILE_ANY_ACCESS)
本文介绍了USBHID驱动中涉及的关键函数,包括动态链接库入口函数USBInstallDriver、USBUnInstallDriver和USBDeviceAttach,以及消息回调函数USBDeviceNotifications。此外,详细阐述了流接口函数如HID_Init、HID_Deinit、HID_Open、HID_Close和HID_IOControl的功能,这些函数分别负责设备初始化、卸载、打开、关闭和I/O控制。通过对这些函数的使用,可以实现对USBHID设备的有效管理和通信。
439

被折叠的 条评论
为什么被折叠?



