Re[2]: Как програмно сотворить то, что мутит dcomcnfg
От: x2003 Россия www.mportal.narod.ru
Дата: 24.07.03 07:56
Оценка:
Здравствуйте, 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.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.