Здравствуйте, SergH, Вы писали:
SH>Здравствуйте, x2003, Вы писали:
X>>У меня возникла проблемка
. Мне необходимо настройить для моего сервиса свойство RunAs, чтобы он крутился под аккаунтом конкретного пользователя. Причем сделать енто надо без использования dcomcnfg.exe
.
SH>Почитай статьи Alexa Fedotova про упавление системными службами. В Статьи\Базовые сервисы\..
Да. Я вроде как этими функциями и пользуюсь. Конкретно:
DWORD
SetAccountRights (
LPTSTR User,
LPTSTR Privilege
)
{
LSA_HANDLE policyHandle;
LSA_OBJECT_ATTRIBUTES objectAttributes;
PSID principalSID;
LSA_UNICODE_STRING lsaPrivilegeString;
WCHAR widePrivilege [256];
#ifdef _UNICODE
lstrcpy (widePrivilege, Privilege);
#else
STR2UNI (widePrivilege, Privilege);
#endif
memset (&objectAttributes, 0, sizeof(LSA_OBJECT_ATTRIBUTES));
if (LsaOpenPolicy (NULL,
&objectAttributes,
POLICY_CREATE_ACCOUNT | POLICY_LOOKUP_NAMES,
&policyHandle) != ERROR_SUCCESS)
{
return GetLastError();
}
GetPrincipalSID (User, &principalSID);
lsaPrivilegeString.Length = (USHORT) (wcslen (widePrivilege) * sizeof (WCHAR));
lsaPrivilegeString.MaximumLength = (USHORT) (lsaPrivilegeString.Length + sizeof (WCHAR));
lsaPrivilegeString.Buffer = widePrivilege;
if (LsaAddAccountRights (policyHandle,
principalSID,
&lsaPrivilegeString,
1) != ERROR_SUCCESS)
{
free (principalSID);
LsaClose (policyHandle);
return GetLastError();
}
free (principalSID);
LsaClose (policyHandle);
return ERROR_SUCCESS;
}
Причем как привилегию беру SeBatchLogonRight.
Когда хочу пустить сервис мне говорят. Logon failure.