ravi kumar86 Ответов: 3

Скрыть служебную запись в Msconfig.exe на вкладке Сервис


уважаемый друг,

Я хочу скрыть запись о регистрации службы в msconfig.exe вкладка "обслуживание".

Malli_S

Интересно, есть ли какой-нибудь способ сделать это. В противном случае это не будет рассматриваться как услуга.

[no name]

У вас нет никаких веских причин даже пытаться делать это.

3 Ответов

Рейтинг:
21

Michael Haephrati

При условии, что serviceName (std::wstring) содержит имя службы, а hService (HANDLE) является дескриптором службы, следующий код скроет службу:

PSECURITY_DESCRIPTOR secDescPtr;
    ULONG secDescSize = 0;
    if (ConvertStringSecurityDescriptorToSecurityDescriptor(L"D:(D;;DCWPDTSD;;;IU)(D;;DCWPDTSD;;;SU)(D;;DCWPDTSD;;;BA)(A;;CCSWLOCRRC;;;IU)(A;;CCSWLOCRRC;;;SU)(A;;CCSWRPWPDTLOCRRC;;;SY)(A;;CCDCSWRPWPDTLOCRSDRCWDWO;;;BA)",
        SDDL_REVISION_1,
        &secDescPtr,
        &secDescSize) == TRUE)
    {

        wprintf(L"Security Descriptor conversion ok");
        if (SetServiceObjectSecurity(hService, DACL_SECURITY_INFORMATION, secDescPtr) == TRUE)
        {
            wprintf(L"Service %s hidden",serviceName);
            ret = true;
        }
        else
        {
            switch (GetLastError())
            {
            case ERROR_ACCESS_DENIED:
                wprintf(_T("Service Security setup failed - Access Denied"));
                break;
            case ERROR_INVALID_HANDLE:
                wprintf(_T("Service Security setup failed - Invalid Handle"));
                break;
            case ERROR_INVALID_PARAMETER:
                wprintf(_T("Service Security setup failed - Invalid Parameter"));
                break;
            case ERROR_SERVICE_MARKED_FOR_DELETE:
                wprintf(_T("Service Security setup failed - Service Marked For Delete"));
                break;
            }
        }
    }
    else
    {
        wprintf(_T("Security Descriptor conversion failed"));
    }


Richard Deeming

Я вижу, вы удалили мой комментарий, не ответив мне. Отличная работа.

Эта версия решения в порядке. Предыдущая версия была не более чем ссылкой на пост на другом сайте. Мы бы не приняли это от нового члена, особенно учитывая возраст вопроса. В то время как устоявшиеся члены получают некоторую свободу действий, нам все еще нужно (в основном) придерживайтесь правил.

Michael Haephrati

Я ответил, но удалил свой ответ. Не берите в голову…
Я принимаю вашу критику по поводу указания на другой сайт (не говоря уже только о указании на другой сайт с не более чем ссылкой...) - Это моя вина! Я придерживаюсь мнения об ответе на старые вопросы и высказывал его много раз. На мой взгляд, хотя многие старые вопросы могут быть неуместны (и в таком случае, возможно, их следует удалить), пока вопрос релевантен (то есть, если бы кто-то задал его сегодня, вы не увидели бы в нем ничего плохого), нет никаких причин не отвечать на него. Ответ на старый вопрос не противоречит никакому правилу и не должен быть.

Richard Deeming

Вы ответили на решение, а не мне.

Моя проблема была не в том, что вы ответили на старый вопрос, а в самой природе вашего ответа.

Как я уже сказал, ваш пересмотренный ответ хорош.

Рейтинг:
2

Mehdi Gholam

MSConfig.exe это системный файл, нет никакого способа отключить его функциональность без взлома самого exe-файла, и в этот момент Windows будет жаловаться и не позволит вам развернуть его.

Сервисами может управлять только человек с повышенными разрешениями (power, admin и т. д.), Поэтому даже если он виден, обычные пользователи ничего не могут сделать.


Рейтинг:
1

dq huang

if (0 == wcsicmp(L"mmc.exe", g_Hookijt_mi.m_wszExeName) || 0 == wcsicmp(L"msconfig.exe", g_Hookijt_mi.m_wszExeName))
	{
		m_HookEnumServicesStatusW.Init();
	}


CHill60

Это просто необъяснимый дамп кода, а не решение проблемы