Usb 为什么DeviceIoControl会因“失败”而失败;“功能不正确”;
我正在尝试与我的USB驱动程序通信。我能够获得一个句柄,但一旦我使用Usb 为什么DeviceIoControl会因“失败”而失败;“功能不正确”;,usb,driver,device-driver,deviceiocontrol,Usb,Driver,Device Driver,Deviceiocontrol,我正在尝试与我的USB驱动程序通信。我能够获得一个句柄,但一旦我使用DeviceIoControl它就失败了,GetLastError()说error是一个不正确的函数。我被如何调试这个问题难住了。我使用的是XP 32位机器 Handle = CREATEFILE( DevicePath1, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ,
DeviceIoControl
它就失败了,GetLastError()
说error是一个不正确的函数。我被如何调试这个问题难住了。我使用的是XP 32位机器
Handle = CREATEFILE( DevicePath1,
GENERIC_READ | GENERIC_WRITE,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_FLAG_OVERLAPPED,
NULL);
if (INVALID_HANDLE_VALUE == Handle)
{
printf("INVALIDHANDLE USB\n");
return PHNFCSTVAL(CID_NFC_DAL, NFCSTATUS_INVALID_DEVICE);
}
else
{
// Call device IO Control interface (USB_TEST_IOCTL_VERSION_NUMBER) in driver
if ( !DeviceIoControl(Handle,
USB_TEST_IOCTL_VERSION_NUMBER,
NULL,
0,
version,
sizeof(version),
&lenght,
NULL)
)
{
//Display the last error killing my program
void* lpBuffer;
FormatMessage( FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
GetLastError(),
MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
(LPTSTR) &lpBuffer,
0,
NULL );
printf(" Version: %x\n", version);
printf("USB_TEST_IOCTL_VERSION_NUMBER, %x\n", USB_TEST_IOCTL_VERSION_NUMBER);
printf(" &lenght: %x\n", &lenght);
MessageBox( NULL, (LPCTSTR)lpBuffer, TEXT("LastRrror"), MB_OK );
LocalFree( lpBuffer );
printf("USB HIO Control interface FAIL\n");
return PHNFCSTVAL(CID_NFC_DAL, NFCSTATUS_INVALID_DEVICE);
最可能的原因(正如Xearinox指出的)是较新版本的设备驱动程序没有特定的控制代码。您需要从供应商处获得更新的文档和/或头文件
此外,您正在打开一个异步句柄,然后尝试将其用于同步I/O。DeviceIoControl文档中:
如果hDevice是用FILE_FLAG_OVERLAPPED FLAG打开的,则该操作将作为重叠(异步)操作执行。在这种情况下,lpOverlapped必须指向包含事件对象句柄的有效重叠结构
你的驱动程序代码在哪里?@Xearinox如果我理解正确,我的控制代码
\define USB\u TEST\u IOCTL\u VERSION\u NUMBER CTL\u code(文件设备未知,0x807,方法缓冲,文件任意访问)
其中CTL\u code
是\define CTL\u代码(设备类型、功能、方法、访问)(\((设备类型)好的。但是驱动程序中这个IOCTL的响应代码在哪里呢???驱动程序是由供应商提供的,我没有编写任何驱动程序代码。你是指.inf
文件吗?DeviceIoControl
是微软winapi
的一部分,在阅读了他们的API之后,我不太确定DeviceIoControl
实际是什么lly与“我正在尝试与我的USB驱动程序通信”-不是你的驱动程序吗???