Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

EnableDebugPrivilege

281
10 мая 2007 года
Fan][
279 / / 19.12.2003
main.cpp
Код:
#include <iostream>
#include <windows.h>
#include <tchar.h>

#include "EnableDebugPrivilege.h"

using namespace std;

int main()
{
//------------------------------------------------------------------------

    EnableDebugPrivilege(INVALID_HANDLE_VALUE);
//------------------------------------------------------------------------

    SC_HANDLE schSCManager;

    schSCManager=OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);

    if (NULL!=schSCManager)
    {

        SC_HANDLE schService;
        _TCHAR *ser_name=_T("nnCron");
        schService = OpenService(schSCManager, LPCWSTR(ser_name), SERVICE_STOP | DELETE);
        if(NULL!=schService)
        {
            SERVICE_STATUS Status;
            ControlService(schService, SERVICE_CONTROL_STOP, &Status);
            Sleep(200);
            BOOL bOk = DeleteService(schService);          
//------------------------------------------------------------------------

            if(bOk)
            {
                Sleep(1000);
                if(StartService(schService,
                                0,
                                NULL
                               ))
                else
                    cout<<"Don't start service..."<<endl;
            }
//------------------------------------------------------------------------

            CloseServiceHandle(schService);    
        }
        else
            cout<<"Service not access - "<<GetLastError()<<endl;
       
        CloseServiceHandle(schSCManager);
    }
    else
        cout<<"Not Connection - "<<GetLastError()<<endl;
//------------------------------------------------------------------------
   
    return 0;
}


EnableDebugPrivilege.cpp
Код:
#include <windows.h>

void EnableDebugPrivilege(bool fEnable)
{
    HANDLE hToken;

    if(OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES, &hToken))
    {
        TOKEN_PRIVILEGES tp;
        tp.PrivilegeCount = 1;
        LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid);
        tp.Privileges[0].Attributes = fEnable ? SE_PRIVILEGE_ENABLED : 0;
        AdjustTokenPrivileges(hToken, false, &tp, sizeof(tp), NULL, NULL);
        CloseHandle(hToken);
    }
}


Пытаюсь отключить на время службу и потом её включить.
1. С админскими правами службу включить обратно не удаётся;
2. Под Пользователем вообще не удаётся подключиться к Service Control Manager, не смотря на наличие EnableDebugPrivilege().
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог