C++ DeviceIoControl在DLL中调用时给出错误\u错误\u长度错误
我想找到我使用的设备控制功能正在工作的驱动器类型。但是,当我在DLL中使用相同的函数时,它返回错误\u BAD\u LENGTH ERROR。下面是我的代码C++ DeviceIoControl在DLL中调用时给出错误\u错误\u长度错误,c++,winapi,C++,Winapi,我想找到我使用的设备控制功能正在工作的驱动器类型。但是,当我在DLL中使用相同的函数时,它返回错误\u BAD\u LENGTH ERROR。下面是我的代码 BOOL Globals::IsUsbDevice ( wchar_t letter) { wchar_t volumeAccessPath[] = L"\\\\.\\X:"; volumeAccessPath [4] = letter; HANDLE deviceHandle= CreateFileW(
BOOL Globals::IsUsbDevice ( wchar_t letter)
{
wchar_t volumeAccessPath[] = L"\\\\.\\X:";
volumeAccessPath [4] = letter;
HANDLE deviceHandle= CreateFileW(
volumeAccessPath,
0, // no access to the Drive
FILE_SHARE_READ | // Share mode
FILE_SHARE_WRITE,
NULL, // Default Security attributes
OPEN_EXISTING, // Disposition
0, // file attributes
NULL); // do not Copy file attributes
if (deviceHandle == INVALID_HANDLE_VALUE) // cannot open the drive
{
CloseHandle (deviceHandle);
return (FALSE);
}
// Setup query
STORAGE_PROPERTY_QUERY Query;
memset (&Query, 0, sizeof (Query));
Query.PropertyId = StorageDeviceProperty;
Query.QueryType = PropertyStandardQuery;
// Issue query
DWORD bytes;
//STORAGE_DEVICE_DESCRIPTOR Devd;
STORAGE_BUS_TYPE busType = BusTypeUnknown;
char OutBuf[1024] = {0}; // good enough, usually about 100 bytes
PSTORAGE_DEVICE_DESCRIPTOR pDevDesc = (PSTORAGE_DEVICE_DESCRIPTOR)OutBuf;
pDevDesc->Size = sizeof(OutBuf);
if (DeviceIoControl (deviceHandle,
IOCTL_STORAGE_QUERY_PROPERTY,
&Query, sizeof(STORAGE_PROPERTY_QUERY),
pDevDesc, pDevDesc->Size,
&bytes,NULL))
{
busType = pDevDesc->BusType;
}
else
{
// Retrieve the system error message for the last-error code
..........
}
CloseHandle (deviceHandle);
return BusTypeUsb == busType;
}
我以管理员的身份执行我的程序
任何帮助都将不胜感激。代码对我来说运行良好。。。你看到这个代码了吗@JochenKalmbach Ya代码工作正常,但在DLL中出现错误。我已经检查了你提供的链接。我的代码也差不多。你签入DLL了吗?你说的“在DLL中”是什么意思。代码在何处执行并不重要,因为它与EXE/DLL没有关系……当在程序中调用IsUsbDevice函数时,它工作正常,但当它作为类函数包含在DLL中时,它开始在DeviceIoControl函数中给出错误\u BAD \u长度。请仔细检查生成选项(EXE与DLL)之间的差异。仔细检查(
字母
参数是否具有预期的输入值)(跟踪或调试器)。