C++ DeviceIoControl在DLL中调用时给出错误\u错误\u长度错误

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(

我想找到我使用的设备控制功能正在工作的驱动器类型。但是,当我在DLL中使用相同的函数时,它返回错误\u BAD\u LENGTH ERROR。下面是我的代码

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)之间的差异。仔细检查(
字母
参数是否具有预期的输入值)(跟踪或调试器)。