Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2004.02.06;
Скачать: CL | DM;

Вниз

поиск USB   Найти похожие ветки 

 
div_123   (2003-11-06 19:26) [0]

И снова здравствуйте недавно обращался на форум, спасибо за помощь

Но снова возник вопрос как найти DevicePath для USB устройства, в принципе вроде все делаю правильно


var
_guid: TGUID;
hdi: THANDLE;
devInfo_Data: P_SP_INFO_;
devIntr_Data: P_SP_INTERF_;

begin
...
HidD_GetHidGuid(_guid);

hdi:=SetupDiGetClassDevsA(@_guid, nil, 0, DIGCF_PRESENT or DIGCF_DEVICEINTERFACE);

if SetupDiEnumDeviceInterfaces(hdi, devInfo_Data, @_guid, 0, devIntr_Data)
then Memo1.Lines.Add("SetupDiEnumDeviceInterfaces> well")
else AddInt("SetupDiEnumDeviceInterfaces> error", GetLastError);

...
SetupDiDestroyDeviceInfoList(hdi);
end;


все отрабатывает но GetLastError выдает ошибку ERROR_NO_MORE_ITEMS (#259) те нет интерфейсов для перечисления и естественно в devInfo_Data и devIntr_Data все по нулям, а на машине стоит USB printer и устанавливались два разных USB флаш-накопителя
Причем если у принтера ГУИД не ЮСБ то у накопителей точно ЮСбишный classGUID по реестру проверял.

Кстати насчет classGuid: HidD_GetHidGuid выдает не тот что записан в реестре, но и тот что записан в реестре при подстановке в программу выдает тот же эфект т.е. ERROR_NO_MORE_ITEMS

Записаный в реестре GIUD удалось получить только через SetupDiClassGuidsFromNameA(PChar("USB"),outName,10,num)
но тут же
SetupDiClassNameFromGuidA(outName^[i],_name,nam1,nam1)
имя класса по полученному ГУИД не выдает

вот такие пироги, маюсь уже две недели, пока нашел где функции хранятся да их параметры, а результата 0

Может кто занимался чем либо подобным и сможет подсказать что неправильно, или просто как по реестру определить DevicePath без использования этих функций, они же его оттуда берут


 
div_123   (2003-11-11 13:22) [1]

Кажется нашел причину

hdi

под DELPHI и под C++ принимает разные значения, Сишный аналог кода отрабатывает
и С и Дельфь используют для вызова функций SETUPAPI.DLL
видимо правильней SetupDiGetClassDevsA, а не SetupDiGetClassDevsW, тк последняя при аналогичных параметрах выдает ошибочный хендл (-1)
единственное - может функция некорректно объявленна


PGUID = ^TGUID;

function SetupDiGetClassDevsA(Guid: PGUID; Enumrator: PChar; Hwd: THANDLE; Flags: longint): THANDLE; stdcall; external "SETUPAPI.DLL";


может кого наведет на правильную мысль


 
div_123   (2003-11-11 20:52) [2]

вопрос снимается

разобрался еще не совсем до конца, но если что обращайтесь может смогу помочь


 
DC-AC   (2003-11-20 16:49) [3]

Тоже разбирался с этим, переводил с С++. Правда у меня все работает за исключением одного момента, при отсутствии GUID в реестре не могу обработать ошибку. Об этом собственно и речь.
Не понял я одного :
hdi: THANDLE;
hdi:=SetupDiGetClassDevsA(@_guid, nil, 0, DIGCF_PRESENT or DIGCF_DEVICEINTERFACE);
Смотрим в setupapi.pas (взятый у джедаев)
HDEVINFO = Pointer;
function SetupDiGetClassDevsA(ClassGuid: PGUID; const Enumerator: PAnsiChar;
hwndParent: HWND; Flags: DWORD): HDEVINFO; stdcall;
Как это работает ?
А это
function SetupDiGetClassDevsA(Guid: PGUID; Enumrator: PChar; Hwd: THANDLE; Flags: longint): THANDLE; stdcall; external "SETUPAPI.DLL";
откуда взято ?



Страницы: 1 вся ветка

Текущий архив: 2004.02.06;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.027 c
3-16130
Nebel
2004-01-15 13:24
2004.02.06
пароли в paradox


6-16554
Delphi5.01
2003-11-30 22:08
2004.02.06
блокируется Интернет при использовании компонента IdHttp


1-16323
Elast
2004-01-25 10:02
2004.02.06
Perform


14-16704
syte_ser78
2004-01-16 16:04
2004.02.06
Работа с DirectX


14-16693
din_tsk
2004-01-15 16:24
2004.02.06
---|Ветка была без названия|---