Показать сообщение отдельно
  #1  
Старый 22.03.2012, 17:48
loltrol loltrol вне форума
Прохожий
 
Регистрация: 22.03.2012
Сообщения: 2
Репутация: 10
По умолчанию CreateFile Delphi 2010 (USB)

Добрый день!
Никак не могу понять в чём проблема, один и тот же код работает на Delphi 5 и не работает на Delphi 2010. Код перебирает подключённые HID-устройства и находит нужное.
Код:
  lcHDevInfo:=SetupDiGetClassDevs(@C_GUID_CLASS_USB_DEVICE, nil, 0, DIGCF_PRESENT OR DIGCF_DEVICEINTERFACE);
  if lcHDevInfo=Pointer(INVALID_HANDLE_VALUE) then Exit;

  try
    i:=0;
    lcDevInfoData.cbSize:=SizeOf(TSPDevInfoData);
    lcDevInterfData.cbSize:=SizeOf(TSPDeviceInterfaceData);
    while SetupDiEnumInterfaceDevice(lcHDevInfo, nil, C_GUID_CLASS_USB_DEVICE, i, lcDevInterfData) do
    try
      lcSize:=0;
      SetupDiGetDeviceInterfaceDetail(lcHDevInfo, @lcDevInterfData, nil, 0, lcSize, nil);
      if lcSize=0 then Continue;

      try
        GetMem(lcDevInterfDetailData, lcSize);
        lcDevInterfDetailData.cbSize:=SizeOf(TSPDeviceInterfaceDetailData);
        if not SetupDiGetDeviceInterfaceDetail(lcHDevInfo, @lcDevInterfData, lcDevInterfDetailData, lcSize, lcSize, @lcDevInfoData) then Continue;
        lcDevPath:=lcDevInterfDetailData.DevicePath;

        lcHandle:=CreateFile(lcDevPath, GENERIC_READ OR GENERIC_WRITE, FILE_SHARE_READ OR FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
        if lcHandle=INVALID_HANDLE_VALUE then Continue;
        try
          lcAttributes.Size:=SizeOf(THidDAttributes);
          if not HidD_GetAttributes(lcHandle, lcAttributes) then Continue;
          if (lcAttributes.VendorID<>C_MY_VID) then Continue;

          //дальнейшие вычитывания
        finally
          CloseHandle(lcHandle);
        end;
      finally
        FreeMem(lcDevInterfDetailData);
      end;
    finally
      Inc(i);
    end;
  finally
    SetupDiDestroyDeviceInfoList(lcHDevInfo);
  end;
В Delphi 2010 просто не проходит CreateFile (GetLastError выдаёт 31). На том же компьютере под Delphi 5 всё работает как часы. Система Windows 7.
Кто-нибудь сталкивался?
Ответить с цитированием