Есть небольшая программа, которая работает с менеджером служб. Вот пример куска кода:
HANDLE hToken;
LogonUser(TEXT("Администратор"),NULL,TEXT("123"),LOGON32_LOGON_INTERACTIVE,LOGON32_PROVIDER_DEFAULT,&hToken);
ImpersonateLoggedOnUser(hToken);
SC_HANDLE hSCMng = OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS);
Для работы с UAC под Windows Vista я добавил к программе манифест:
<trustInfo xmlns="urn:schemas-microsoft-com:asm.v2">
<security>
<requestedPrivileges>
<requestedExecutionLevel
level="requireAdministrator"
uiAccess="false"/>
</requestedPrivileges>
</security>
</trustInfo>
Всё работает из под пользователя в XP и в Vista с включенным UAC. Как только я отключил UAC функция OpenSCManager возвращает NULL с GetLastError() == ERROR_BAD_IMPERSONATION_LEVEL.