 
			
				22.03.2012, 17:48
			
			
			
		  
	 | 
	
		
		
		
			
			| 
			
				
				
				 Прохожий 
				
				
			 | 
			  | 
			
				
				
					Регистрация: 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. 
Кто-нибудь сталкивался?    
		
	
		
		
		
		
		
	
		
			
 
			
			
			
				 
			
			
			
			
		 
		
	
	
	 |