Текущий архив: 2006.03.05;
Скачать: CL | DM;
Вниз
Какой модуль надо подключить? Найти похожие ветки
← →
kvz (2006-02-16 10:45) [0]Какой модуль надо подключить для работы следующих функций:
OpenSCManager, OpenService, StartService, ControlService?
← →
kaZaNoVa © (2006-02-16 10:48) [1]
WinSvc
← →
Reindeer Moss Eater © (2006-02-16 10:49) [2]Поиск по pas файлам содержащим нужный текст отменили?
← →
kvz (2006-02-16 10:58) [3]Спасибо!
← →
VirEx © (2006-02-19 08:44) [4]помочь? консольная
program SCMTestApp;
{$APPTYPE CONSOLE}
uses
SysUtils,
Winsvc, //для работы с сервисами
Windows; //для распознавания ошибок
//===================================================
// далее идут вспомогательные процедуры и функции
//
//установка драйвера
function InstallDriver(scm :SC_HANDLE;DrvName,DrvPath:PChar):string;
var
Service:SC_HANDLE;
begin
//создаем сервис
Service:=CreateService(scm, //дескриптор создаваемого сервиса
DrvName, //имя сервиса (для системы)
DrvName, //имя сервиса для вывода на экран
SERVICE_ALL_ACCESS, //тип доступа (полный)
SERVICE_KERNEL_DRIVER, //тип сервиса (драйвер)
SERVICE_DEMAND_START, //тип запуска (по опросу)
SERVICE_ERROR_NORMAL, //реакция системы на ошибку
DrvPath, //путь к *.sys файлу
nil,nil,nil,nil,nil); //здесь не используются
if scm<>0 then result:="Install driver OK" else
//вывод ошибок
case GetLastError of
ERROR_ACCESS_DENIED: result:="ERROR_ACCESS_DENIED";
ERROR_CIRCULAR_DEPENDENCY: result:="ERROR_CIRCULAR_DEPENDENCY";
ERROR_DUP_NAME: result:="ERROR_DUP_NAME";
ERROR_INVALID_HANDLE: result:="Driver fail install";
ERROR_INVALID_NAME: result:="ERROR_INVALID_NAME";
ERROR_INVALID_PARAMETER: result:="ERROR_INVALID_PARAMETER";
ERROR_INVALID_SERVICE_ACCOUNT: result:="ERROR_INVALID_SERVICE_ACCOUNT";
ERROR_SERVICE_EXISTS: result:="Driver already install";
end;
//закрываем сервис
CloseServiceHandle(Service);
end;
//удаление драйвера
function RemoveDriver(scm :SC_HANDLE;DrvName:PChar):string;
var
Service:SC_HANDLE;
begin
//открываем сервис
Service:=OpenService(scm,DrvName,SERVICE_ALL_ACCESS);
if Service=0 then result:="Driver not install" else
if DeleteService(Service) then result:="Driver remove OK";
//закрываем сервис
CloseServiceHandle(Service);
end;
//запуск драйвера
function StartDriver(scm :SC_HANDLE;DrvName:PChar):string;
var
Service:SC_HANDLE;
arg:PChar;
begin
arg:=nil;
//открываем сервис
Service:=OpenService(scm,DrvName,SERVICE_ALL_ACCESS);
if Service=0 then result:="Driver not install" else
if StartService(Service,0,arg) then result:="Driver start OK" else
//вывод ошибок
case GetLastError of
ERROR_INVALID_HANDLE: result:="ERROR_INVALID_HANDLE";
ERROR_PATH_NOT_FOUND: result:="ERROR_PATH_NOT_FOUND";
ERROR_SERVICE_ALREADY_RUNNING:result:="Driver already start";
ERROR_SERVICE_DATABASE_LOCKED:result:="ERROR_SERVICE_DATABASE_LOCKED";
ERROR_SERVICE_DEPENDENCY_DELETED: result:="ERROR_SERVICE_DEPENDENCY_DELETED";
ERROR_SERVICE_DEPENDENCY_FAIL:result:="ERROR_SERVICE_DEPENDENCY_FAIL";
ERROR_SERVICE_DISABLED: result:="ERROR_SERVICE_DISABLED";
ERROR_SERVICE_LOGON_FAILED: result:="ERROR_SERVICE_LOGON_FAILED";
ERROR_SERVICE_MARKED_FOR_DELETE: result:="ERROR_SERVICE_MARKED_FOR_DELETE";
ERROR_SERVICE_NO_THREAD: result:="ERROR_SERVICE_NO_THREAD";
ERROR_SERVICE_REQUEST_TIMEOUT:result:="ERROR_SERVICE_REQUEST_TIMEOUT";
end;
//закрываем сервис
CloseServiceHandle(Service);
end;
//остановка драйвера
function StopDriver(scm :SC_HANDLE;DrvName:PChar):string;
var
Service:SC_HANDLE;
ServStatus:TServiceStatus;
begin
//открываем сервис
Service:=OpenService(scm,DrvName,SERVICE_ALL_ACCESS);
if Service=0 then result:="Driver not install" else
if ControlService(Service,SERVICE_CONTROL_STOP,ServStatus) then result:="Driver stop OK" else
//вывод ошибок
case GetLastError of
ERROR_INVALID_HANDLE: result:="ERROR_INVALID_HANDLE";
ERROR_ACCESS_DENIED: result:="ERROR_ACCESS_DENIED";
ERROR_DEPENDENT_SERVICES_RUNNING:result:="ERROR_DEPENDENT_SERVICES_RUNNING";
ERROR_INVALID_SERVICE_CONTROL: result:="ERROR_INVALID_SERVICE_CONTROL";
ERROR_SERVICE_CANNOT_ACCEPT_CTRL:result:="ERROR_SERVICE_CANNOT_ACCEPT_CTRL";
ERROR_SERVICE_NOT_ACTIVE: result:="Driver already stopped";
ERROR_SERVICE_REQUEST_TIMEOUT: result:="ERROR_SERVICE_REQUEST_TIMEOUT";
end;
//закрываем сервис
CloseServiceHandle(Service);
end;
//помощь о командах
procedure Help;
begin
Writeln("-------------------------------");
Writeln("|Test drivers from SCM meneger|");
Writeln("-------------------------------");
Writeln("Commands:");
Writeln("1 - Install driver");
Writeln("2 - Start driver");
Writeln("3 - Stop driver");
Writeln("4 - Remove driver");
Writeln("99 - exit");
Writeln("-------------------------------");
end;
//
// вспомогательные процедуры и функции заканчиваются здесь,
// далее идёт главная процедура программы
// (в языке C/C++ она называется Main)
//===================================================
var
i:integer;
scm_:SC_HANDLE;//дескриптор SCM менеждера
status:string; //строка статуса (для вывода)
begin
//запуск SCM менеждера
scm_:=OpenSCManager(nil,nil,SC_MANAGER_ALL_ACCESS);
if scm_<>0 then WriteLn("SCM Manager start OK")//успешный запуск
else begin
WriteLn("SCM Manager start fail");//показываем ошибку на экране
readln;// до ввода любого символа
exit; // выход из программы
end;
status:="";
Help; // выводим меню команд при старте
repeat
//цикл, до тех пор, пока не будет
//введена цифра 99
begin
readln(i);// запоминаем код команды
Help; // выводим меню команд после ввода команды
case i of
//команды
1: status:=InstallDriver(scm_,"Example","D:\Example\objchk_wxp_x86\i386\Example.sys ");
2: status:=StartDriver (scm_,"Example");
3: status:=StopDriver (scm_,"Example");
4: status:=RemoveDriver (scm_,"Example");
end;
Writeln("Driver status="+Status);//статус результата команды
Write(">"); //командное приглашение
end;
until i=99;
//останавливаем SCM менеждер
CloseServiceHandle(scm_);
end.
Страницы: 1 вся ветка
Текущий архив: 2006.03.05;
Скачать: CL | DM;
Память: 0.48 MB
Время: 0.011 c