Форум программистов, компьютерный форум, киберфорум
Python
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
 Аватар для maxm
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457

Windows service на Python: access denied

20.06.2017, 12:40. Показов 2515. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
ПРЕДИСЛОВИЕ. Начну со ссылки на вопрос на stackoverflow, но там пока ничего не посоветовали. Может, кому-то будет понятнее суть вопроса.

Есть windows service на C++, одна из задач которого стартовать некий процесс в сессии по ее ID, т.е. если у нас есть ID сессии, мы можем передать путь к процессу, который надо запустить, и этот ID, и тогда этот windows service запустит требуемый процесс в требуемой сессиии.
Нужно написать аналог на Python. Чтобы это сделать, я попробывал два способа:
1. Взять токен у самого себя (т.е. у сервиса, который сидит в сессии 0, с правами SYSTEM, а значит, он всемогущ), сдублировать его, и дубликату поменять ID сессии, после чего вызвать CreateProcessAsUser() с дубликатом.
2. Взять WTSQueryUserToken по ID, но минус подхода как бы в том, что у него будут не права системы, а права юзера.

ПРОБЛЕМА. При вызове SetTokenInformation получаю Access denied (какого ***, у нас права системы, данный сервис диспетчер показывает в сессии 0, хазяин - SYSTEM). При вызове WTSQueryUserToken получаю то же самое, но в другой формулировке: A required privilege is not held by the client.

ВОПРОС. Почему так происходит и как это обойти?

КОД (под катом)
Кликните здесь для просмотра всего текста
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
class AppServerSvc (win32serviceutil.ServiceFramework):
_svc_name_ = "TestService"
_svc_display_name_ = "Test Service"
 
def __init__(self,args):
    win32serviceutil.ServiceFramework.__init__(self,args)
    self.hWaitStop = win32event.CreateEvent(None,0,0,None)
 
def SvcStop(self):
    self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING)
    win32event.SetEvent(self.hWaitStop)
 
def SvcDoRun(self):
    servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE,
                          servicemanager.PYS_SERVICE_STARTED,
                          (self._svc_name_,''))
    self.main()
 
def get_next_msg(self):
    address = ('localhost', 6000)
    listener = Listener(address, authkey='secret password')
    conn = listener.accept()
    msg = conn.recv()
    listener.close()
    return msg
 
def process_msg(self):
    token = win32security.OpenProcessToken(win32process.GetCurrentProcess(), 
                 win32security.TOKEN_ALL_ACCESS)
 
    duplicated = win32security.DuplicateToken(token, 2)
 
    curr_proc_id = win32process.GetCurrentProcessId()
    curr_session_id = win32ts.ProcessIdToSessionId(curr_proc_id)
 
    # access denied! error code: 5
    win32security.SetTokenInformation(duplicated, win32security.TokenSessionId, curr_session_id)
 
def main(self):
    while True:
        msg = self.get_next_msg()
        self.process_msg()
 
 
if __name__ == '__main__':
    win32serviceutil.HandleCommandLine(AppServerSvc)
Миниатюры
Windows service на Python: access denied  
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.06.2017, 12:40
Ответы с готовыми решениями:

[B] Access is denied [/B] Python + Excel VBA
Всем привет! бьюсь над задачей: для документа эксель с поддержкой макросов пытаюсь программно в питоне 2.7 (import os - не поддерживает...

Ошибка Could not start the MyService service on Local Computer. Error 5: Access denied.
Проблема описана в линке http://www.relib.com/forums/topic.asp?id=847824 Я последовал совету от Messir и написал код на Си. (вернее...

Не работает virtualhost Permission denied: access to / denied
имею сентос, там установлено пхп, майскул ну и все остальное, создал виртуалхост: ServerName **********.ua <VirtualHost...

1
 Аватар для maxm
63 / 35 / 25
Регистрация: 17.07.2014
Сообщений: 457
21.06.2017, 12:19  [ТС]
Решил проблему. Нужно использовать DuplicateTokenEx:
Python
1
duplicated = win32security.DuplicateTokenEx(token, impersonation_lvl, win32security.TOKEN_ALL_ACCESS, win32security.TokenPrimary)
Тогда SetTokenInformation не падает с ошибкой access denied, а работает как нужно.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.06.2017, 12:19
Помогаю со студенческими работами здесь

A Windows service with the name MySQL already exists. Please uninstall this service correctly or choose a different name for the new service.
Не знаю что делать дальше

VkApi (vk_api.exceptions.ApiError: [15] Access denied: no access to call this method)
Не работает код на питоне, что я делаю не так? или как это исправить from vk_api.bot_longpoll import VkBotLongPoll, VkBotEventType ...

Vk API Long Poll 'Access denied: no access to call this method'
Всем прив. Пробую впервые написать что то на Vk api, понадобился Long Poll, для его работы нужны данные сессии (server, key, ts). Беру с Vk...

Access denied: no access to call this method
При авторизации получаю токен с правами photos,video,wall,offline. Затем загружаю фото и видео и публикую пост с ними на стене. На...

Windows Service Manager Tray , Windows Service Manager (SrvMan) информация
Есть ли у кого то информация по Windows Service Manager Tray , Windows Service Manager (SrvMan) . Статьи , описания , инструкции по...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
1С: Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью. Данные берутся из регистра сведений, по которому настроено. . .
Хочу заставить корпорации вкладываться в здоровье сотрудников: делаю мат модель здравосохранения
anaschu 22.03.2026
e7EYtONaj8Y Z4Tv2zpXVVo https:/ / github. com/ shumilovas/ med2. git
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru