WinUsb_Initialize调用返回0且错误码31的问题排查
WinUsb_Initialize调用失败(错误码31)排查方案
问题描述
使用Python结合winusbpy调用WinUsb_Initialize时始终返回0,获取到Windows错误码31(ERROR_GEN_FAILURE),已更新常量定义(如GENERIC_WRITE、FILE_FLAG_OVERLAPPED等),但问题依旧。
错误码31的含义
错误码31对应Windows系统错误ERROR_GEN_FAILURE,描述为"A device attached to the system is not functioning.",通常和设备驱动绑定、访问权限、API参数正确性相关。
排查与解决步骤
1. 确认设备已绑定WinUSB驱动
WinUsb_Initialize仅对绑定了WinUSB驱动的设备有效:
- 打开设备管理器,找到目标USB设备,查看其驱动程序是否为"WinUSB"
- 如果是厂商自定义驱动,使用驱动替换工具将设备驱动切换为WinUSB(注意选择正确的设备接口)
2. 调整CreateFile参数
尝试移除重叠IO标记,改用同步模式测试:
# 移除FILE_FLAG_OVERLAPPED,使用同步IO handle_file = api.exec_function_kernel32("CreateFileW", path, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, None, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, None)
另外,可尝试仅申请GENERIC_WRITE或GENERIC_READ权限,部分设备可能不允许同时申请读写权限。
3. 验证设备路径的正确性
确保找到的设备路径对应WinUSB接口:
- 设备可能包含多个接口(如HID、批量传输接口),
is_device(vid, pid, path)仅验证VID/PID,无法确认是否为WinUSB接口 - 通过设备管理器查看设备的"设备实例路径",和代码中输出的
path对比,确保路径指向正确的接口
4. 以管理员权限运行脚本
访问USB设备通常需要管理员权限,右键点击Python脚本或终端,选择"以管理员身份运行"。
5. 修正WinUsb_Initialize的参数类型
确保handle_winusb使用正确的类型定义:
from ctypes import * # 明确WINUSB_INTERFACE_HANDLE类型 WINUSB_INTERFACE_HANDLE = c_void_p handle_winusb = WINUSB_INTERFACE_HANDLE() result = api.exec_function_winusb("WinUsb_Initialize", handle_file, byref(handle_winusb))
关键代码修改示例
调整后的CreateFile与WinUsb初始化代码:
# 以管理员权限运行脚本 # 调整CreateFile参数,移除重叠IO handle_file = api.exec_function_kernel32("CreateFileW", path, GENERIC_WRITE | GENERIC_READ, FILE_SHARE_WRITE | FILE_SHARE_READ, None, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, None) if INVALID_HANDLE_VALUE == handle_file: print("Error Creating File") else: print("File handle created successfully") # 使用正确的句柄类型 WINUSB_INTERFACE_HANDLE = c_void_p handle_winusb = WINUSB_INTERFACE_HANDLE() result = api.exec_function_winusb("WinUsb_Initialize", handle_file, byref(handle_winusb)) if result != 0: print("WinUsb initialized successfully") # 后续设备操作... else: error_code = api.exec_function_kernel32("GetLastError") print(f"WinUsb Initialize Error: {error_code}")
内容的提问来源于stack exchange,提问作者user19212551
相关产品推荐
相关产品推荐

