Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2009, 04:27   #1
defen
Новичок
Джуниор
 
Регистрация: 21.09.2009
Сообщений: 1
По умолчанию Как определить заводской номер устройства usb накопителя?

Здравствуйте! Стоит проблема с написанием программы, которая бы определяла заводской номер usb накопителя. Именно заводской, а не тот, который при форматировании меняется... С железом ни когда не связывался. Читал форумы, не понял ни чего... Если можно, дайте конкретный пример, чтобы не править... Заранее всем спасибо.
defen вне форума Ответить с цитированием
Старый 06.11.2009, 12:48   #2
w_mma
 
Регистрация: 03.09.2009
Сообщений: 5
По умолчанию

Вопрос актуальный!!
w_mma вне форума Ответить с цитированием
Старый 06.11.2009, 13:07   #3
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

возможно вам нужно это и пост #52
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 09.11.2009, 20:07   #4
w_mma
 
Регистрация: 03.09.2009
Сообщений: 5
По умолчанию

Задачу, решил )) 100%
WIN DDK

Читаем здесь.
http://forum.vingrad.ru/act-Print/cl.../t-107182.html

добавляем код
Код:
function GetDescriptor(hHub:THandle; ConnectionIndex:integer; DescriptorType, DescriptorIndex:byte):PUSB_COMMON_DESCRIPTOR;
var
  rOK:boolean;
  sz:cardinal;
  nBytes:dword;
  reqDesc: PUSB_DESCRIPTOR_REQUEST;
  descCom: PUSB_COMMON_DESCRIPTOR;
begin
  Result:=nil;
  sz := SizeOf(USB_DESCRIPTOR_REQUEST) + SizeOf(USB_COMMON_DESCRIPTOR);
  reqDesc := Pointer(LocalAlloc(LPTR, sz));
  descCom := Pointer(Cardinal(reqDesc) + SizeOf(USB_DESCRIPTOR_REQUEST));
  reqDesc^.ConnectionIndex := ConnectionIndex;
  reqDesc^.SetupPacket.wValue := (DescriptorType shl 8) or DescriptorIndex;
  reqDesc^.SetupPacket.wLength := SizeOf(USB_COMMON_DESCRIPTOR);
  rOK := DeviceIoControl(hHub,IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION,
        reqDesc, sz, reqDesc, sz, nBytes, nil);

  if rOK and (nBytes >= Sz) then begin
    sz := SizeOf(USB_DESCRIPTOR_REQUEST) + descCom^.bLength;
    LocalFree(Dword(reqDesc));
    reqDesc := Pointer(LocalAlloc(LPTR,sz + 2));
    reqDesc^.ConnectionIndex := ConnectionIndex;
    reqDesc^.SetupPacket.wValue := (DescriptorType shl 8) or DescriptorIndex;
    reqDesc^.SetupPacket.wLength := Sz - sizeof(USB_DESCRIPTOR_REQUEST);
    descCom := Pointer(Cardinal(reqDesc) + SizeOf(USB_DESCRIPTOR_REQUEST));
    rOK := DeviceIoControl(hHub,IOCTL_USB_GET_DESCRIPTOR_FROM_NODE_CONNECTION,
                       reqDesc, sz, reqDesc, sz, nBytes,nil);
  end;

  if not rOK then
    LocalFree(DWORD(reqDesc))
  else
    Result := descCom;
end;

procedure UpdateDescriptors(AName: String; AIndex: Integer);
var
  s:string;
  i:integer;
  hF:dword;
  pwcDesc : PWideChar;
begin
  hF := CreateFile(PChar(AName), GENERIC_WRITE + GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0);
  if hF <> INVALID_HANDLE_VALUE then begin
    i := 1;
    repeat
      pwcDesc := Pointer(GetDescriptor(hF, AIndex, USB_STRING_DESCRIPTOR_TYPE, i));
      if pwcDesc <> nil then begin
        pwcDesc := Pointer(Dword(pwcDesc) + 2);
        s := String(WideString(pwcDesc));
        Form1.Memo1.Lines.Add('SerNum = ' + s);
      end;
      i := i +1;
    until pwcDesc = nil;
    CloseHandle(hF);
  end;
end;
И
Код:
UpdateDescriptors(sRoot, iPort);
пишем вот так
Код:
  for iPort:= 0 to NodeInformation.HubDescriptor.bNumberOfPorts - 1 do begin
    // Отображение информации о порте
    ShowHubPortDetail(hRoot, iPort);
    UpdateDescriptors(sRoot, iPort);
  end;
w_mma вне форума Ответить с цитированием
Старый 10.11.2009, 11:06   #5
w_mma
 
Регистрация: 03.09.2009
Сообщений: 5
По умолчанию

Еще одно замечание!!
Порты начинаются с 1!!

То есть:
Код:
 for iPort:= 1 to NodeInformation.HubDescriptor.bNumberOfPorts do begin
w_mma вне форума Ответить с цитированием
Старый 24.12.2010, 03:14   #6
Xak59
 
Регистрация: 23.12.2010
Сообщений: 3
По умолчанию

Какие библиотеки нужно подключить?
Xak59 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как определить номер клиента leontv Работа с сетью в Delphi 11 28.03.2010 23:19
Узнать путь USB устройства dimonbest Win Api 0 27.07.2009 12:58
USB устройства KREGI Компоненты Delphi 11 29.06.2009 23:39
Как определить номер выбранной строки в стринггриде Deathwatcher Общие вопросы Delphi 2 15.06.2009 14:40
USB устройства. Ky3Heu, Win Api 1 04.05.2009 21:06