Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Какая буква у USB-носителя? 
V
    Опции темы
Alca
Дата 15.7.2009, 15:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: нет
Всего: 50



Есть "\\?\usb#vid_ffff&pid_001b#00000001#{a5dcbf10-6530-11d2-901f-00c04fb951ed}".
Необходимо по  этой строке вычислить на каком диске сидит флешка.


--------------------
PM WWW ICQ Skype Jabber   Вверх
Keeper89
Дата 15.7.2009, 18:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2580
Регистрация: 26.2.2009

Репутация: 14
Всего: 58



Вот интересная страничка: http://www.ureader.com/message/1018345.aspx, в конце есть пример на Delphi. Речь идет об извлечении USB-устройств, а соответствующие им буквы определяются в процессе для составления списка этих устройств.

З.Ы. Вот еще одна страница в тему.

Это сообщение отредактировал(а) Keeper89 - 15.7.2009, 18:06


--------------------
PM MAIL WWW   Вверх
Alca
Дата 16.7.2009, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: нет
Всего: 50



Я так понял, что только через реестр можно замутить?


--------------------
PM WWW ICQ Skype Jabber   Вверх
Alca
Дата 16.7.2009, 17:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: нет
Всего: 50



 smile 
НЕ получается у меня через реестр...


--------------------
PM WWW ICQ Skype Jabber   Вверх
Romikgy
Дата 16.7.2009, 19:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



Код

function GetVolumeNameForVolumeMountPointString(Name: string): string;
var
  Volume: array [0..MAX_PATH] of Char;
begin
  FillChar(Volume[0], SizeOf(Volume), 0);
  GetVolumeNameForVolumeMountPoint(PChar(Name), @Volume[0], SizeOf(Volume));
  Result := Volume;
end;


эта ф-ция важная ,
причем здесь реестр ?


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Alca
Дата 16.7.2009, 20:19 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: нет
Всего: 50



А чего в эту функцию пихать надо, какой параметр?

Добавлено @ 20:26
Разобрался:
Код

#include <windows.h>
#include <iostream>
#include <stdio.h>
#include <string>
#include <vector>
//---------------------------------------------------------------------------
std::string sGetVolumeNameForVolumeMountPointString(const std::string &csStr) {
    CHAR Volume[MAX_PATH + 1] = {0};

    ::GetVolumeNameForVolumeMountPoint(csStr.c_str(), &Volume[0], MAX_PATH);
    
    return Volume;
}
//---------------------------------------------------------------------------
int main(int argc, char* argv[]) {
    std::string sRes;
    
    sRes = sGetVolumeNameForVolumeMountPointString("I:\\");
    std::cout << "sGetVolumeNameForVolumeMountPointString: " << sRes.c_str() << std::endl;
    
    system("pause");
    return 0;
}
//---------------------------------------------------------------------------



Добавлено через 12 минут и 2 секунды
И где здесь связь?
Код

Искомая строка ---> "\\?\usb#vid_058f&pid_6387#3dh5r5el#{a5dcbf10-6530-11d2-901f-00c04fb951ed}"

sGetVolumeNameForVolumeMountPointString ---> "\\?\Volume{ac78451d-3366-11de-8bb6-806d6172696f}\"


Это сообщение отредактировал(а) Alca - 16.7.2009, 20:29


--------------------
PM WWW ICQ Skype Jabber   Вверх
Romikgy
Дата 16.7.2009, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



еще 2 ф-кции нужны оказывается 
GetDriveInstanceID(DriveMountPoints[I], Inst);
    SymbolicName := GetSymbolicName(Inst);
эти 


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Alca
Дата 16.7.2009, 22:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: нет
Всего: 50



Код

GetDriveInstanceID(DriveMountPoints[I], Inst);
GetSymbolicName(Inst);

Таких я в MSDN не нашел...   smile 


--------------------
PM WWW ICQ Skype Jabber   Вверх
Alca
Дата 16.7.2009, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: нет
Всего: 50



 smile 
Код

function GetFlashSerialFromDrive(const Drive:string):string;
const
  GUID_DEVINTERFACE_VOLUME:TGUID='{53f5630d-b6bf-11d0-94f2-00a0c91efb8b}';
var
  PnPHandle:HDEVINFO;
  DevData:TSPDevInfoData;
  DeviceInterfaceData:TSPDeviceInterfaceData;
  FunctionClassDeviceData:PSPDeviceInterfaceDetailData;
  Devn:Integer;
  BytesReturned:DWORD;
  Inst:DEVINST;
  MountPointName:string;
  Key:HKEY;
  Buffer:array[0..4095] of Char;
  function GetVolumeNameForVolumeMountPointString(const Name:string):string;
  var
    Volume:array[0..MAX_PATH] of Char;
  begin
    FillChar(Volume[0],SizeOf(Volume),0);
    GetVolumeNameForVolumeMountPoint(PChar(Name),@Volume[0],SizeOf(Volume));
    Result:=Volume;
  end;
  function ExtractSerial(const SymbolicName:string):string;
  var
    Count:DWORD;
    PC,First:PChar;
  begin
    PC:=PChar(SymbolicName);
    Count:=0;
    First:=nil;
    while PC^<>#0 do begin
      if PC^='#' then begin
        case Count of
          1:First:=PC+1;
          2:begin
              SetString(Result,First,PC-First);
              Exit;
            end;
        end;
        Inc(Count);
      end;
      Inc(PC);
    end;
    Result:='';
  end;
begin
  Result:='';
  PnPHandle:=SetupDiGetClassDevs(@GUID_DEVINTERFACE_VOLUME,nil,0,DIGCF_PRESENT or DIGCF_DEVICEINTERFACE);
  if PnPHandle<>Pointer(INVALID_HANDLE_VALUE) then ;
  try
    MountPointName:=GetVolumeNameForVolumeMountPointString(Drive);
    DeviceInterfaceData.cbSize:=SizeOf(TSPDeviceInterfaceData);
    Devn:=0;
    while SetupDiEnumDeviceInterfaces(PnPHandle,nil,GUID_DEVINTERFACE_VOLUME,Devn,DeviceInterfaceData) do begin
      DevData.cbSize:=SizeOf(DevData);
      BytesReturned:=0;
      SetupDiGetDeviceInterfaceDetail(PnPHandle,@DeviceInterfaceData,nil,0,BytesReturned,@DevData);
      if (BytesReturned<>0)and(GetLastError=ERROR_INSUFFICIENT_BUFFER) then begin
        FunctionClassDeviceData:=AllocMem(BytesReturned);
        try
          FunctionClassDeviceData.cbSize:=SizeOf(TSPDeviceInterfaceDetailData);
          if SetupDiGetDeviceInterfaceDetail(PnPHandle,@DeviceInterfaceData,FunctionClassDeviceData,BytesReturned,BytesReturned,@DevData) then begin
            if GetVolumeNameForVolumeMountPointString(PChar(@FunctionClassDeviceData.DevicePath)+'\')=MountPointName then begin
              Inst:=DevData.DevInst;
              CM_Get_Parent(Inst,Inst,0);
              CM_Get_Parent(Inst,Inst,0);
              CM_Open_DevNode_Key(Inst,KEY_READ,0,REGDISPOSITION(RegDisposition_OpenExisting),Key,0);
              Buffer[0]:=#0;
              if Key<>INVALID_HANDLE_VALUE then begin
                BytesReturned:=SizeOf(Buffer);
                if RegQueryValueEx(Key,'SymbolicName',nil,nil,@Buffer[0],@BytesReturned)=0 then begin
                  Result:=ExtractSerial(Buffer);
                  if Pos('&',Result)>0 then Result:='';
                end;
                RegCloseKey(Key);
              end;
              Exit;
            end;
          end;
        finally
          FreeMem(FunctionClassDeviceData);
        end;
      end;
      Inc(Devn);
    end;
  finally
    SetupDiDestroyDeviceInfoList(PnPHandle);
  end;
end;



--------------------
PM WWW ICQ Skype Jabber   Вверх
Romikgy
Дата 16.7.2009, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



это не в msdn это в тех ссылках что выше ....


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Alca
Дата 17.7.2009, 09:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3993
Регистрация: 14.6.2006

Репутация: нет
Всего: 50



Romikgy, я уже вкурил


--------------------
PM WWW ICQ Skype Jabber   Вверх
Romikgy
Дата 17.7.2009, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 13
Всего: 146



молодца , не дыми сильно только


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0788 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.