Компьютерные книги
Главное меню
Главная О нас Добавить материал Поиск по сайту Карта книг Карта сайта
Реклама
computersbooks.net -> Добавить материал -> Аппаратное обеспечение -> Агуров П.В. -> "Интерфейсы USB. Практика использования и программирования" -> 65

Интерфейсы USB. Практика использования и программирования - Агуров П.В.

Агуров П.В. Интерфейсы USB. Практика использования и программирования — БВХ-Петербург, 2004. — 576 c.
ISBN 5-94157-202-6
Скачать (прямая ссылка): interfeysusbpraktikaispolzovaniya2004.djvu
Предыдущая << 1 .. 59 60 61 62 63 64 < 65 > 66 67 68 69 70 71 .. 168 >> Следующая

var
Forml: TForml; implementation {$R *. dfm}
(Получение NT-имени no DOS-имени}
procedure TForml.btnGetNameClick(Sender: TObject);
Var Result : Array [1.,MAX_PATH] of Char; begin
If (QueryDosDevice(PChar(DOSDeviceName.Text),
Гпава 9. Введение в WDM
187
0Result, МАХ_РАТН) О 0) then NtDeviceName.Text:= StrPas((c)Result)
Else
NtDeviceName.Text:= 'Устройство не существует'; end;
{Добавить DOS-имя для NT-имени}
procedure TForml.btnAddNameClick(Sender: TObject); begin
If not DefineDosDevice(
DDD_RAW_TARGET_PATH,
PChar(DosDeviceName.Text),
PChar(NtDeviceName.Text)) then
StatusBar.Panels[0].Text:= 'Ошибка добавления имени'; end;
{Удалить DOS-имя}
procedure TForml.btnDelNameClick(Sender: TObject);
Var Result : Array [1..MAX_PATH] of Char; begin
{Ищем NT-имя для удаляемого DOS-имени}
If not(QueryDosDevice(PChar(DOSDeviceName.Text),
(c)Result, MAX_PATH) <> 0) then begin StatusBar.Panels[0].Text:= 'DOS-имя
не определено';
Exit;
End;
{Удаляем DOS-имя)
If not DefineDosDevice(
DDD_RAW_TARGET_PATH or DDD_REMOVE_DEFINITION or
DDD_EXACT_MATCH_ON_REMOVE,
PChar(DosDeviceName.Text),
PChar(NtDeviceName.Text)
) then
StatusBar.Panels[0].Text:= 'Ошибка удаления имени'; end;
188
Часть III. Практика программирования
{Получение всех имен устройства}
procedure TForml.btnGetListClick(Sender: TObject);
var BufSize : Cardinal; P, PName : Pointer; SName : String;
begin
{Очищаем предыдущий список}
ILNameList.Items.Clear;
{Размер буфера}
BufSize:= 10240;
{Распределяем память для буф)ера}
GetMem(P, BufSize);
{Запрашиваем список имен)
If QueryDosDevice(nil, Р, BufSize) <> 0 then begin {Цикл по всем
именам...}
PName:= Р;
While (True) do begin SName:= StrPas(PName);
If SName = '' then Break;
{Добавляем в список}
IbNameList.1 terns.Add(SName);
{Переход к следующему устройству}
{Сдвигаем указатель на следующую строку}
PName:= Pointer(Longlnt(PName) + Length(SName)+1);
End;
End;
{Освобождаем буфер}
FreeMem(P); end;
{Сортировка списка по двойному щелчку}
procedure TForml.IbNameListDblClick(Sender: TObject);
begin
IbNameList.Sorted:= True;
IbNameList.Sorted:= False; end;
end.
Гпава 9. Введение в WDM
189
Основное диалоговое окно нашей тестовой программы показано на рис. 9.4.
Введем в верхнее окно строку СОМ1 и нажмем кнопку Получить NT-имя..., В
поле Nt-имя должна отобразиться строка, похожая на \Device\seriaio.
Теперь введем в поле DOS-имя какое-нибудь новое имя, например, MyDevice,
и нажмем кнопку Добавить DOS-имя.... Результат мы можем увидеть, нажав
кнопку Получить полный список DOS-имен или Получить NT-имя....
NT-имена устройств m
DOS-имя:: JuSB#RbOT_HUBmi9780№7MWM8*Oe88 с**- 11
NT-имя: j'T'evicexUSBPDO 2
Получить NT-имя устройства по его DOS-имени i
Добавить D 0 S -имя для N Т -имени : i
Удалить DOS-имя j
Получить полный список DOS-имен j
iu, -
SWtt{a7c7a5bO-5af3-11 d1 -9ced-00a024bf0407}tt{9B365390-1 S5F-11D0-A195
0(Xj sysaudio I UNC 1
IUSBttROOT HUBtt4&19788b67№tt{f18a0e88-c30c-11 dO-8815-00a0c906bed8)

USBttROOT Н11ВШ2ае46918&0ВД18a0e8S-c30c-11 dO-3315-00a0c906bedS}
USBttROOT HUB84&3250fa59M#{f1 Ba0e38-c30c-11 dO-8815-00a0c90Sbed8}
USBttROOT HUB20S4&11858842&0tt{f18a0e88-c30c-11 dO-8815-00a0c906bed
USBttVid 0G7b&Pid 2303tt5&3848Sc91 W&2tt{4d36e878-e325-11 ce-bfd-08002
USBttVid 0G7b&Pid 2303й5&38488сЭ1 &0&2tt{8Ge0d1 e0-8033-11 d0-3ce4-0800:
USBttVid_0G7b&Pid_2303tt5&38488c91 &0&2tt{a5dcbf10-8530-11 d2-301 f-
00c04l_J VMnetUserif VMparportl 2Л
Рис. 9.4. Окно программы работы с именами устройств
В отличие от последовательных портов, имеющих привычные всем имена, USB-
компоненты имеют имена, включающие GUTD, например, для имени
USB#ROOT_HUB#4&19788b67&0#{fl8a0e88-c30c-lld0-8815-00a0c90-6bed8} с
помощью нашей программы мы получим NT-имя \Device\usBPD0-2.
Для просмотра имен удобно пользоваться программой WinObj (см. разд.
19.4.1).
9.3. Основные процедуры драйвера WDM
Оговорим сразу, что мы рассматриваем именно драйверы модели WDM, а не
драйверы Windows 98 или Windows NT. Это важно, т. к. драйверы WDM, с
одной стороны, должны содержать дополнительные процедуры для под-
190
Часть III. Практика программирования
цержки РпР, а с другой, более логичны по структуре. Итак, в этом разделе
мы перечислим основные процедуры драйвера WDM. Подробное описание
процесса создания драйвера не входит в рамки это книги, поэтому мы
ограничимся исключительно практическим интересом, а всех желающих
отсыпаем к списку литературы [7, 8].
9.3.1. Процедура DriverEntry
Процедура DriverEntry является "точкой входа" драйвера. Заголовок этой
процедуры показан в листинге 9.2.
'Листинг 9.2. Заголовок процедуры DriverEntry
it...................................... ¦¦ •• >
NTSTATUS DriverEntry(
IN PDRIVER_OBJECT pDriverObject,// Адрес объекта драйвера IN
PUNICODE_STRING pRegistryPath // Путь в регистре к подразделу драйвера )
Получив от диспетчера в/в указатель на структуру driver object драйвер
должен заполнить в ней следующие поля:
Предыдущая << 1 .. 59 60 61 62 63 64 < 65 > 66 67 68 69 70 71 .. 168 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Завалишин Д. "Интернетско-русский разговорник" (Web-программирование)

Заенцев И.В. "Нейронные сети: основные модели" (Web-программирование)

Владимиров А.А. "Wi-фу: «боевые» приемы взлома и защиты беспроводных сетей" (Web-программирование)

Вьейра Р. "SQL Server 2000. Программирование в 2 ч." (Web-программирование)

Веллинг Л.Т. "Разработка web приложений с помощью php и mysql" (Web-программирование)
Авторские права © 2013 ComputersBooks. Все права защищены.

c1c0fc952cf0704ad12d6af2ad3bf47e03017fed