Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2004.02.06;
Скачать: [xml.tar.bz2];

Вниз

поиск 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.45 MB
Время: 0.031 c
1-16301
Grinder
2004-01-25 21:36
2004.02.06
Hint


3-16107
Ruslan
2004-01-10 15:55
2004.02.06
BDE


1-16439
Blade
2004-01-28 12:31
2004.02.06
Потоки


14-16671
goga
2004-01-16 22:50
2004.02.06
Никуда не гожусь


7-16748
Andrew287
2003-11-21 01:39
2004.02.06
Остановка службы





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский