олицетворение — новый объект групповой политики с использованием программы на С ++

Я пытаюсь создать gpo программно используя IGrouppolicyobject интерфейс

Запускаю программу в дочернем домене и могу успешно создать объект групповой политики в дочернем домене.

Чтобы создать объект групповой политики в родительском домене, я имитирую (с помощью функции Windows LogonUser) учетные данные родительского администратора домена

(олицетворение является успешным, и я использую LOGON32_LOGON_NEW_CREDENTIALS в методе LogonUser для олицетворения и даже последующего успеха метода ImpersonateLoggedOnUser)

Но вызов создания gpo (метод IGrouppolicyobject’s New) завершается неудачно с кодом отказа в доступе: 80070005

Пожалуйста, ведите меня.

Вот код ..

HANDLE tokHandle = NULL;
BOOL chk = LogonUser("parent domain admin name", "parent domain name", "password", LOGON32_LOGON_NEW_CREDENTIALS, LOGON32_PROVIDER_WINNT50, &tokHandle);
if(chk) {
chk = ImpersonateLoggedOnUser(tokHandle);
if(!chk)
{
//print error code in log
}
CloseHandle(tokHandle);
}
else
{
//print error code in log
}
if(chk) {
IGroupPolicyObject* gpo = NULL;
HRESULT hr = CoCreateInstance(CLSID_GroupPolicyObject, NULL, CLSCTX_INPROC_SERVER, IID_IGroupPolicyObject, (LPVOID*)&gpo);
if (hr==S_OK) {
hr = gpo->New(L"LDAP://dcname/DC=domain,DC=com", L"gponame", GPO_OPEN_READ_ONLY);
if(hr!=0) {
print hr;   //ACCESS DENIED ERROR CODE COMES HERE...
}
} else {
//print error code in log
}
if(gpo) gpo->Release();
RevertToSelf();
}

2

Решение

Наконец-то нашел ответ.

Кажется IGroupPolicyObject Новый метод ошибочно возвращает олицетворение, выполненное в вызывающем потоке. Так что только подражание не происходит. Поэтому создал новый процесс с необходимыми учетными данными для выполнения моей задачи.

Ссылка: https://shellexecute.wordpress.com/2008/11/18/igrouppolicyobjectnew-will-fail-if-thread-is-impersonating-or-identity-or-delegation/

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]