![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 04.05.2009
Сообщений: 2
|
![]()
Я прописал нормально функцию, но делфи пишет ошибку для параметра SERVISE_KERNEL_DRIVER и SC_MANAGER_CONECT. Говорит они не обьявлены...
|
![]() |
![]() |
![]() |
#2 |
Форумчанин
Регистрация: 15.07.2008
Сообщений: 615
|
![]()
Тяжело судить нормально ли ты прописал или нет.Возможно, что ты модуль не подключил. Тут же нет телепатов!
![]()
xor eax, eax
xchg [eax], eax |
![]() |
![]() |
![]() |
#3 |
Новичок
Джуниор
Регистрация: 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. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
помогите с функцией | 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 |