Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2009, 10:07   #1
RIOJI
Новичок
Джуниор
 
Регистрация: 04.05.2009
Сообщений: 2
Восклицание Помогите с функцией CreateService

Я прописал нормально функцию, но делфи пишет ошибку для параметра SERVISE_KERNEL_DRIVER и SC_MANAGER_CONECT. Говорит они не обьявлены...
RIOJI вне форума Ответить с цитированием
Старый 04.05.2009, 14:17   #2
MalCer
Форумчанин
 
Аватар для MalCer
 
Регистрация: 15.07.2008
Сообщений: 615
По умолчанию

Тяжело судить нормально ли ты прописал или нет.Возможно, что ты модуль не подключил. Тут же нет телепатов! Может код свой покажешь что-ли!
xor eax, eax
xchg [eax], eax
MalCer вне форума Ответить с цитированием
Старый 04.05.2009, 15:52   #3
RIOJI
Новичок
Джуниор
 
Регистрация: 04.05.2009
Сообщений: 2
По умолчанию

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls,WinSvc;

type
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
TUsbStor=class
private

public
Function CreateService(SysPath:String):Boole an;
Function RemoveService:Boolean;
Function StartService:Boolean;
Function StopService:Boolean;
Function GiveIoForProcess(dwProcessId:Cardin al):Cardinal;
end;
var
Form1: TForm1;
hDevice:THandle;

implementation

{$R *.dfm}

Function CreateFile(lpFileName:PChar;dwDesir edAccess,dwShareMode:DWORD;lpSA:PSe curityAttributes;dwCreationDisposit ion,dwFlagsAndAttributes:DWORD;hTem plateFile:THandle):THandle;
begin
// загрузка по имени драйвера
hDevice:=CreateFile('\\.\usbstor',G ENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,F ILE_ATTRIBUTE_NORMAL,0);
end;

const
// имя драйвера
DriverName:PChar='usbstor'#0;
// имя файла драйвера
FileDriver:String='usbstor.sys'#0;
// процедура регистрации драйвера
Function TUsbStor.CreateService(SysPath:Stri ng):Boolean;
var
lpServiceArgVectors:PChar;
hSCMan,hService:SC_Handle;
DriverPath:String;
Begin
Result:=False;
{ создание сервиса }
hSCMan:=WinSvc.OpenSCManager(nil,ni l,SC_MANAGER_ALL_ACCESS);
if hSCMan=0 then Exit;
{ получаем полное имя к файлу драйвера }
DriverPath:=SysPath + FileDriver;
{ регистрируем драйвер }
hService:=WinSvc.CreateService(hSCM an,Drivername,DriverName,SERVICE_AL L_ACCESS,SERVISE_KERNEL_DRIVER,SERV ICE_DEMAND_START,SERVICE_ERROR_NORM AL,PChar(@DriverPath[1]),nil,nil,nil,nil,nil);
{ файл не найден или сервис уже зарегистрирован }
if hService=0 then begin
MessageDlg(SysErrorMessage(GetLastE rror),mtError,[mbOk],0);
CloseServiceHandle(hSCMan);
Exit;
end;
{ регистрация успешна }
WinSvc.CloseServiceHandle(hService) ;
WinSvc.CloseServiceHandle(hSCMan);
Result:=true;
end;
// старт зарегистрированого сервиса
Function TUsbStor.StartService:Boolean;
var
lpServiceArgVectors:PChar;
hSCMan,hService:SC_Handle;
DriverPath:String;
begin
Result:=False;
// старт сервиса
hSCMan:=WinSvc.OpenSCManager(nil,ni l,SC_MANAGER_CONECT);
if hSCMan=0 then exit;
hService:=WinSvc.OpenService(hSCMan ,DriverName,SERVICE_START);
if hService=0 then begin
CloseServiceHandle(hSCMan);
Exit;
end;
lpServiceArgVectors:=nil;
WinSvc.StartService(hService,0,lpSe rviceArgVectors);
WinSvc.CloseServiceHandle(hService) ;
WinSvc.CloseServiceHandle(hSCMan);
Result:=true;
end;

Function TUsbStor.GiveIoForProcess(dwProcess Id:Cardinal):Cardinal;
var hDevice:SC_Handle;Res:Cardinal;
begin
// Загрузить драйвер с именем usbstor
hDevice:=CreateFile('\\.\usbstor',G ENERIC_READ or GENERIC_WRITE,0,nil,OPEN_EXISTING,F ILE_ATTRIBUTE_NORMAL,0);
// обращение к рабочей процедуре
DeviceIoControl(hDevice,IOCTL_INTER NAL_USB_GET_PORT_STATUS,@dwProcessI d,SizeOf(dwProcessId),nil,0,Result, nil);
// закрытие драйвера
CloseHandle(hDevice);
end;

procedure TForm1.Button5Click(Sender: TObject);
begin

end;

// остановка сервиса
Function TUsbStor.StopService:Boolean;
var ServiceStatus:TServiceStatus;
hSCMan,hService:SC_Handle;
begin
Result:=False;
hSCMan:=WinSvc.OpenSCManager(nil,ni l,SC_MANAGER_CONECT);
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;
end;
// разрегистрация сервиса
Function TUsbStor.RemoveService:Boolean;
var ServiceStatus:TServiceStatus;
hSCMan,hService:SC_Handle;
begin
Result:=false;
hSCMan:=WinSvc.OpenSCManager(nil,ni l,SC_MANAGER_ALL_ACCESS);
if hSCMan=0 then Exit;
hService:=WinSvc.OpenService(hSCMan ,DriverName,SERVICE_ALL_ACCESS);
if hService=0 then begin
CloseServiceHandle(hService);
CloseServiceHandle(hSCMan);
Result:=true;
end;
end;
end.
RIOJI вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите с функцией Ximerka Паскаль, Turbo Pascal, PascalABC.NET 0 09.04.2009 00:14
помогите с функцией 1234 Общие вопросы Delphi 5 30.08.2008 10:55
Помогите с функцией Родион Общие вопросы Delphi 3 08.05.2008 19:18
помогите с функцией zetrix Microsoft Office Excel 0 31.10.2006 07:32