Форум программистов, компьютерный форум, киберфорум
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. Показов 2494. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru