Используйте SetSystemTime с ограниченной учетной записью пользователя - PullRequest
2 голосов
/ 23 мая 2011

Операционная система: Windows XP (Embedded) Язык: c #

Проблема: С ограниченной учетной записью пользователя я пытаюсь изменить дату и время Windows XP программно, используяfunction SetSystemTime () , но возвращает false и код ошибки 5: Доступ запрещен .

После прочтения статей MSDN я олицетворяю ограниченную учетную запись пользователя для администраторапользователь (принадлежащий к группе администраторов и имеющий права на изменение системного времени), используя функции LogonUser () и Impersonate (), и вызывает после SetSystemTime (), но результат такой же, как и раньше.

Я пытаюсьпредоставить привилегию «SeSystemtimePrivilege» ограниченной учетной записи пользователя, после того, как имитировать ее перед вызовом AdjustTokenPrivileges (), которая не возвращает ошибки, но результат такой же, как и раньше.

Код:

const int  SE_PRIVILEGE_ENABLED = 2;

// Starting with limited user account
intPtr userToken = WindowsIdentity.GetCurrent(TokenAccessLevels.AdjustPrivileges | TokenAccessLevels.Query).Token;

IntPtr tokenDuplicate = IntPtr.Zero;
IntPtr token = IntPtr.Zero;

LogonUser("administrator", domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref token);
DuplicateToken(token, 2, ref tokenDuplicate);
WindowsImpersonationContext wic = (new WindowsIdentity(tokenDuplicate)).Impersonate();

bool enabled = true;

TOKEN_PRIVILEGES tokenPrivilege = new TOKEN_PRIVILEGES();
tokenPrivilege.PrivilegeCount = 1;
tokenPrivilege.Privileges = new LUID_AND_ATTRIBUTES[tokenPrivilege.PrivilegeCount];
tokenPrivilege.Privileges[0].Attributes = (UInt32)(enabled ? SE_PRIVILEGE_ENABLED : SE_PRIVILEGE_DISABLED);

if (LookupPrivilegeValue(null, "SeSystemtimePrivilege", out tokenPrivilege.Privileges[0].Luid))
    AdjustTokenPrivileges(userToken, false, ref tokenPrivilege, (UInt32)Marshal.SizeOf(typeof(TOKEN_PRIVILEGES)), IntPtr.Zero, IntPtr.Zero);

// Return to limited user account
wic.Undo();

if(!SetSystemTime(systemTime)) // systemTime in UTC time
   .... Error code here, 5 if I let administrator impersonate or 1314

У вас есть идея, как решить мою проблему?

Спасибо за ваш ответ, Алена

Ответы [ 2 ]

1 голос
/ 24 июня 2015

Я недавно опубликовал аналогичный вопрос, под другим углом зрения, но с той же базовой потребностью, заголовок этого вопроса - «Как проверить права локальной политики безопасности как не-администратора» для справки.

В любом случае, если выявным образом предоставьте этому стандартному пользователю привилегию «Изменить системное время» в локальной политике безопасности, тогда этот пользователь без прав администратора сможет получить доступ к SetSystemTime очень хорошо.Я объясняю в своем вопросе, как я решил свои конкретные потребности, может быть, это может помочь вам?

Удачи!

0 голосов
/ 06 марта 2013

Пожалуйста, обратитесь к этой статье: http://social.msdn.microsoft.com/Forums/en-US/netfxbcl/thread/c98a6b72-2330-4dee-b740-a3ab666b1f4b/. Проблема не может быть решена.

...