在DLL中调用时,DeviceIoControl会出现ERROR_BAD_LENGTH错误

时间:2014-02-18 06:17:00

标签: c++ winapi

我想找到我使用的DeviceIoControl功能的驱动器类型。但是,当我在DLL中使用相同的函数时,它返回ERROR_BAD_LENGTH错误。以下是我的代码。

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;
}

我正在以管理员身份执行我的程序。

非常感谢任何帮助。

0 个答案:

没有答案