Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Остановка сервиса


Автор: Draeden 11.7.2008, 07:01
При попытке остановки сервиса вызовом 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 );
}

Автор: Draeden 14.7.2008, 17:53
Ответ: а хрен его знает smile Видно где то ошибка в сервисе была, хотя я так и не понял как я её исправил smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)