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

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

Агуров П.В. Интерфейсы USB. Практика использования и программирования — БВХ-Петербург, 2004. — 576 c.
ISBN 5-94157-202-6
Скачать (прямая ссылка): interfeysusbpraktikaispolzovaniya2004.djvu
Предыдущая << 1 .. 67 68 69 70 71 72 < 73 > 74 75 76 77 78 79 .. 168 >> Следующая

openSCM_
Manager С флаГОМ SC_MANAGER_ALL_ACCESS;
• открытие сервиса, соответствующего драйверу с помощью функции
OpenService с флагом SERVICE_ALL_ACCESS;
212
Часть III. Практика программирования
• удаление записи о драйвере с помощью функции DeleteServi.ee;
• закрытие дескриптора сервиса;
• закрытие дескриптора SCM-менеджера.
Листинг 9.20. Регистрация драйвера в реестре и старт сервиса
Const // имя драйвера
DriverName : PChar= 'giveioex'#0;
// имя файла драйвера
FileDriver : String = 'giveioex.sys'OO;-II Процедура регистрации драйвера
Function TGivelOEx.CreateService(SysPath : String) : Boolean; var
IpServiceArgVectors : PChar; hSCMan, hService: SC_HANDLE;
DriverPath : String;
Begin Result:= False;
{= Создание сервиса ==}
{Сервис регистрируется в ветке реестра)
{HKEY_LOCAL_MACHINE\SYSTEM\CurrentContEolSet\Services\giveioex} hSCMan:=
WinSvc.OpenSCManager(
Nil, { локальный }
Nil, { SERVICES_ACTIVE_DATABASE }
SC_MANAGER_ALL_ACCESS ) ;
If hSCMan = 0 then Exit;
{Получаем полное имя к файлу драйвера)
DriverPath:= SysPath + FileDriver;
{Создаем сервис (регистрируем драйвер)}
hService:= WinSvc.CreateService(hSCMan, Drivemame, DriverName,
SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START,
SERVICE_ERROR_NQRMAL,
PChar(0DriverPath[l]), nil,nil,nil,nil,nil);
Гпава 9. Введение в WDM
213
{Файл не найден или сервис уже зарегистрирован}
If hService = 0 then begin MessageDlg(IntToStr(GetLastError), mtError,
[mbOK], 0); CloseServiceHandle(hSCMan);
Exit;
End;
{Регистрация успешна}
WinSvc.CloseServiceHandle(hService);
WinSvc.CloseServiceHandle(hSCMan);
Result:= True;
End;
II Старт зарегистрированного сервиса Function TGivelGEx.StartService :
Boolean; var IpServiceArgVectors : PChar; hSCMan, hService : SC_HANDLE;
DriverPath ; String;
Begin Result:= False;
II Старт сервиса hSCMan ;= WinSvdiOpenSCManager(Nil, Nil,
SC_MANAGER_CONNECT);
If hSCMan = 0 then Exit;
hService:='WinSvc.OpenService(hSCMan, DriverName, SERVICE^START); If
hService = 0 then begin CloseServiceHandle(hSCMan);
Exit;
End;
IpServiceArgVectors:=nil;
WinSvc.StartService(hService, 0, IpServiceArgVectors);
WinSvc.CloseServiceHandle(hService);
WinSvc.CloseServiceHandle(hSCMan);
Result:= True;
End;
214
Часть III. Практика программирования
| Листинг 9.21. Останов сервиса и разрегистрация драйвера
// Останов сервиса
Function TGivelOEx.StqpService : Boolean; var serviceStatus :
TServiceStatus;
hSCMan, hService : SC_HANDLE;
Begin Result:= False;
{= Остановка сервиса}
hSCMan:= WinSvc.OpenSCManager(Nil, Nil, SC_JdANAGER_CONNECT) ;
If hSCMan = 0 then Exit;
hService:= WinSvc.OpenService(hSCMan, DriverName, SERVICE_STOP);
If hService = 0 then begin WinSvc.CloseServiceHandle(hSCMan);
Exit;
End;
WinSvc.ControlService(hService, SERVICE_CONTROL_STOP, serviceStatus);
WinSvc.CloseServiceHandle(hService);
WinSvc.CloseServiceHandle(hSCMan);
Result;= True;
hSCMan, hService ; SC_HANDLE;
Begin Result:= False;
{== Удаление сервиса из реестра}
hSCMan:= WinSvc.OpenSCManager(Nil,Nil,SC_MANAGER_ALL_ACCESS);
If hSCMan .= 0 then Exit;
hService:= WinSvc.OpenService(hSCMan, DriverName, SERVICE_ALli_ACCESS);
{Ошибка открытия сервиса}
If hService-О then begin CloseServiceHandle(hSCMan);
Exit;
End;
End;
// Разрегистрация сервиса
Function TGivelOEx.RemoveService : Boolean; var serviceStatus :
TServiceStatus;
Гпава 9. Введение в WDM
215
WinSvc.DeleteService(hService); WinSvc.CloseServiceHandle(hService);
WinSvc. CloseServiceHandle (hSCMan) Result:= True;
End;
У Registry Editor ииииииггшгх]
: Besistfy ?&t yiem Favorites Help -l_l r"-'
В'-ОЙИЕЙ * , -_J Enum j j "f_j Security ! № CJ ^Pc it! - '1 i3042prt 1 ;
it, ?j IAS I ; ft; LJ IdeBusDr ¦ !+¦ CJ IdeChnDr <l -Г1
| Name itj?l (Default) |??]DisplayName LH^ErrorControl |йЙ
ImagePath 1:5s] Start $8тУРе !<! Type _. BEG_S2 REG_SZ REGJ3W0RD
REG_EXPAND_SZ REG_DWORD REGJDWORD ) : Date Г- (value no, sel) giveioex
0x00000001 (1) \??\E AS ource\giveioex. sys 0x00000003 (3) 0x00000001 (1)
Jj • -
[MyComputer\HKEY_L0CAi_MACHINE\SYSTEM\CurcenCont[ol5et\s7rvicesVgiveioex"
'
Рис. 9.7. Драйвер зарегистрирован
Рисунок 9.7 показывает результат успешной регистрации драйвера, после
которой обращение к драйверу выглядит довольно просто (листинг 9.22).
Параметры драйвера в реестре
При регистрации драйвера в реестре создаются несколько стандартных
записей (рис. 9.7).
? DispiayName (тип reg_sz) - значение этого параметра описывает текст,
используемый в служебных программах операционной системы, в частности, в
программах панели управления. В случае если данный параметр не указан,
используется имя драйвера;
? ErrorControi (тип reg_dword) - этот параметр описывает способ обработки
ошибки при загрузке или инициализации драйвера. Возможные варианты
приведены в табл. 9.3;
? imagePath (тип reg_expand_sz) - значение этого параметра описывает
полный путь к файлу, содержащему исполняемый код драйвера. По умолчанию
значение этого параметра равно %system%\Drivers\
Предыдущая << 1 .. 67 68 69 70 71 72 < 73 > 74 75 76 77 78 79 .. 168 >> Следующая
Книги
Web-программирован-
ие
Аппаратное обеспечение Графика Руководство по П.О. Самоучитель Теория программирования Фотошоп Языки программирования
Новые книги
Вирт Н. "Систематическое программирование " (Теория программирования)

Эком "Microsoft Excel 2000 шаг за шагом Русская версия самоучитель " (Самоучитель)

Поляков А.Ю. "Методы и алгоритмы компьютерной графики в примерах Vizual C++" (Графика)

Баяковский Ю.М. "Графическая библиотека Open GL " (Графика)

Валиков А. "Технология " (Языки программирования)
Авторские права © 2013 ComputersBooks. Все права защищены.