При попытке остановки сервиса вызовом ControlService ( ...SERVICE_CONTROL_STOP... ) возникает ошибка 1052: данная операция не имеет смысла для этого сервиса. Что не так с сервисом ?
Вот весь код ( нужный вызов в самом конце ).
| Код | #include <windows.h> #include <stdio.h> #include <conio.h> #include "controlcodes.h"
void SendProtPID ( DWORD PID ) { char *SymLink = "\\\\.\\procprot";
HANDLE Driver = CreateFileA ( SymLink, GENERIC_READ | GENERIC_WRITE, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL );
if ( Driver == INVALID_HANDLE_VALUE ) return;
DWORD Returned;
bool Res = false; Res = DeviceIoControl ( Driver, IOCTL_SET_PROTECTED_PID, &PID, sizeof ( PID ), NULL, 0, &Returned, NULL );
CloseHandle ( Driver ); }
void main ( int argc, char **argv ) { DWORD PID;
if ( !sscanf ( argv [ 1 ], "%x", &PID ) ) { printf ( "\nInvalid PID value" ); return; }
SC_HANDLE Scm = OpenSCManagerW ( NULL, NULL, SC_MANAGER_ALL_ACCESS );
if ( !Scm ) return;
SC_HANDLE Service = CreateServiceW ( Scm, L"procprot", L"Process protect", SERVICE_ALL_ACCESS, SERVICE_KERNEL_DRIVER, SERVICE_DEMAND_START, SERVICE_ERROR_NORMAL, L"c:\\temp\\procprot.sys", NULL, NULL, NULL, NULL, NULL );
if ( !Service ) return;
BOOL Res = StartService ( Service, 0, NULL );
if ( !Res ) return;
SendProtPID ( PID );
SERVICE_STATUS Status;
Res = ControlService ( Service, SERVICE_CONTROL_STOP, &Status );
Res = DeleteService ( Service ); }
|
|