Я использую CreateService для установки службы Windows в Windows XPE. Я хотел бы настроить все так, чтобы только администратор мог запустить / остановить / приостановить / возобновить службу.
Сейчас я использую следующее для установки сервиса:
schService = CreateService(schSCManager,
ServiceName,
ServiceDisplayName, // service name to display
SERVICE_ALL_ACCESS, // desired access
SERVICE_WIN32_OWN_PROCESS, // service type
SERVICE_AUTO_START, // start type
SERVICE_ERROR_NORMAL, // error control type
binaryPathName, // service's binary (this program)
NULL, // no load ordering group
NULL, // no tag identifier
NULL, // no dependencies
NULL, // LocalSystem account
NULL); // no password
И служба заканчивается безопасностью, так что члены группы PowerUsers могут запускать и останавливать службу. Я понял, что могу использовать sc sdshow для проверки дескриптора безопасности, и я разработал строку SDDL, которая будет делать для нас правильные вещи.
Я также узнал, что в нашей установке Win XPE нет бинарного файла sc.exe, поэтому мы не можем использовать его для настройки этой конкретной системы.
Итак, что мне нужно знать: какие API мне нужно использовать, чтобы установить дескриптор безопасности для этой службы примерно во время выполнения вызова CreateService. Я совершенно незнаком с API безопасности Windows, поэтому просто не знаю, с чего начать.
ОБНОВЛЕНИЕ: ответ SetServiceObjectSecurity (ниже). Следующий вопрос: как лучше всего настроить SecurityDescriptor? Лучше всего получить дескриптор по умолчанию, а затем изменить его? Или мне просто создать совершенно новый дескриптор?