Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 13 / 0
Регистрация: 04.01.2018
Сообщений: 58

Метод OpenService не возвращает handle

23.02.2018, 12:34. Показов 1400. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
9
            var serviceHandle = OpenService(
                scManagerHandle,
                svc.ServiceName,
                SERVICE_QUERY_CONFIG | SERVICE_CHANGE_CONFIG);
 
            if (serviceHandle == IntPtr.Zero)
            {
                throw new ExternalException("Open Service Error");
            }
Программа написана на C#, но данный метод импортирован из Advapi32.dll.
При открытии службы "SecurityHealthService" (защитник Windows) срабатывает исключение ExternalException.
При открытии других служб пока-что таких проблем не наблюдал.
Админ права присутствуют и запрашиваются.
Возможно нужно подключить определённую привилегию, но я не знаю какую.

Есть у кого-нибудь идеи?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
23.02.2018, 12:34
Ответы с готовыми решениями:

OpenService возвращает ошибку 5
SC_HANDLE sc_manager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); if (sc_manager == NULL) { cout << "Error0 " <<...

OpenService не возвращает запущенный сервис
Private Type SRV_STATUS dwServiceType As Long dwCurrentState As Long dwControlsAccepted As Long dwWin32ExitCode As...

Созданная форма не возвращает(?) Handle
Доброго времени суток, господа программисты, будьте так любезны :) Суть: Попытки открытия другого приложения внутри windows формы(1...

13
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
23.02.2018, 12:51
Цитата Сообщение от Quntgo Посмотреть сообщение
Есть у кого-нибудь идеи?
Пойти в соответствующий раздел по C#
0
0 / 13 / 0
Регистрация: 04.01.2018
Сообщений: 58
23.02.2018, 13:02  [ТС]
Azazel-San, ну так по сути метод из C++
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
23.02.2018, 13:20
Quntgo, и что теперь? Как это "метод из С++", возможно он реализован на С++ и если не ошибаюсь, это деректива из Windows.h
это наверное логично если вам нужна реализация под шарп то и ищите в разделах нужного вам языка
0
0 / 13 / 0
Регистрация: 04.01.2018
Сообщений: 58
23.02.2018, 13:23  [ТС]
Цитата Сообщение от Azazel-San Посмотреть сообщение
если вам нужна реализация под шарп
можно и под C++, мне нужен лишь ход решения, хоть под шарп, хоть под плюса
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
23.02.2018, 13:37
Quntgo,
пробуйте что-то такое
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 #include <windows.h>
 /* ... */
 SC_HANDLE sc_manager = OpenSCManager(
 /* params */
    ...,
    ...,
    ...
 );
 SC_HANDLE s_handle = OpenService(
    sc_manager, 
    ...,
    ...
 );
    
 if(s_handle == NULL)
 {
        std::cout << "ERROR " << GetLastError() << std::endl;
 }
Правда тут нужны знатоки умнее меня, явно
0
322 / 174 / 78
Регистрация: 09.10.2014
Сообщений: 809
23.02.2018, 13:42
del
0
0 / 13 / 0
Регистрация: 04.01.2018
Сообщений: 58
23.02.2018, 14:49  [ТС]
Цитата Сообщение от lArtl Посмотреть сообщение
del
Что?

Добавлено через 19 минут
Azazel-San,
C++
1
2
3
4
5
    SC_HANDLE sc_manager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
    SC_HANDLE s_handle = OpenService(sc_manager, "SecurityHealthService", SC_MANAGER_ALL_ACCESS);
    if (s_handle == NULL) {
        cout << "Error " << GetLastError() << endl;
    }
Возвращает 5, как я понимаю это "Access is denied."
Админ права запрашиваются.
У меня есть предположение, что нужна какая-то привилегия , но в списке привилегий я не увидел похожих.

Добавлено через 8 минут
Либо стоит вызывать OpenSCMangaer от Local Service, сейчас попробую

Добавлено через 27 минут
Я думаю так будет более логично
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
23.02.2018, 14:50
Quntgo, попробуйте SERVICE_ALL_ACCESS
0
0 / 13 / 0
Регистрация: 04.01.2018
Сообщений: 58
23.02.2018, 14:56  [ТС]
Azazel-San,
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
    SC_HANDLE sc_manager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS); // если сюда тоже вставить SERVICE_ALL_ACCESS, то и тут вылетит ошибка 5 
    if (sc_manager == NULL) {
        cout << "Error0 " << GetLastError() << endl;
    }
    SC_HANDLE s_handle = OpenService(sc_manager, "SecurityHealthService", SERVICE_ALL_ACCESS);
    if (s_handle == NULL) {
        cout << "Error1 " << GetLastError() << endl; // ошибка 5
    }

Так же вылетает ошибка 5, если поставить "SERVICE_ALL_ACCESS" и в OpenScManager(), то эта функция выдаст ошибку 5.
0
2732 / 887 / 330
Регистрация: 10.02.2018
Сообщений: 2,095
23.02.2018, 15:18
Цитата Сообщение от Quntgo Посмотреть сообщение
У меня есть предположение, что нужна какая-то привилегия , но в списке привилегий я не увидел похожих.
SE_SECURITY_NAME не похожа разве, по имени так весьма?
0
0 / 13 / 0
Регистрация: 04.01.2018
Сообщений: 58
23.02.2018, 16:22  [ТС]
Ygg,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    HANDLE hToken;
    if (OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) {
        if (SetPrivilege(hToken, SE_SECURITY_NAME, TRUE)) {
            SC_HANDLE sc_manager = OpenSCManager(NULL, NULL, SC_MANAGER_ALL_ACCESS);
            if (sc_manager == NULL) {
                cout << "Error0 " << GetLastError() << endl;
            }
            SC_HANDLE s_handle = OpenService(sc_manager, "SecurityHealthService", SC_MANAGER_ALL_ACCESS);
            if (s_handle == NULL) {
                cout << "Error1 " << GetLastError() << endl; // возвращает "Error1 5"
            }
        }
    }
Всё та же ошибка 5
0
2732 / 887 / 330
Регистрация: 10.02.2018
Сообщений: 2,095
23.02.2018, 17:00
Остаётся попробовать SE_TCB_NAME, но, как я понял, что бы эту фигню включить придётся сервис писать и запускать его от системы. С консолью уже не прокатит.
0
0 / 13 / 0
Регистрация: 04.01.2018
Сообщений: 58
23.02.2018, 17:04  [ТС]
Ygg,
"The token does not have the specified privilege." , видимо ты правильно понял)
Как я понимаю, это связано с тем, что служба не с svchost.exe запускается, а с собственного экзешника, хотя группа та же что и у центра обновления(к примеру)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.02.2018, 17:04
Помогаю со студенческими работами здесь

VirtualAllocEx возвращает ошибку The handle is invalid
вопрос собственно уже в заголовке , не пойму почему ? Хэндл точно находит нормально !!! VirtualAllocEx(hSnap,hModule,size,...

OpenProcess возвращает разные handle запущенного др. приложения
привет. Вопрос такой - хочу получить handle процесса для использования в функциях VirtualAllocEx и WriteProcessMemory делаю так ...

Метод без проблем возвращает строку, но не возвращает класс
Здравствуйте! Уже сутки бьюсь с проблемой и не пойму вообще почему она возникла. Есть WCF-сервер и -клиент. На сервере есть 2 метода,...

Handle передать в метод
Как в метод передать Handle компонента

Метод, который возвращает true, если трехзначное число переданное в метод как параметр делится на сумму своих цифр
написать метод, который возвращает true, если трехзначное число переданное в метод как параметр делится на сумму своих цифр


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru