一般访问拒绝尝试更新我自己在 AD 中的字段

General access denied trying to update my own field in AD

我正在尝试使用 ADSI 和 C++ 应用程序更新与我自己在 Active Directory 中的用户对象相关的字段。操作系统是 Windows Server 2012 Standard。

我能够阅读,我能够毫无问题地调用 Put,但是当我调用 SetInfo 时,它 returns 和 "General access denied"。我已确认我正在尝试访问的是我自己的用户对象。

我这样获得自己的 FQDN:

GetUserNameEx(EXTENDED_NAME_FORMAT::NameFullyQualifiedDN, pszFullyQualifiedDN, &dwFullyQualifiedDN);

然后我这样使用它:

LPTSTR pszObj = (LPTSTR)LocalAlloc(LPTR, dwMemToAlloc);
wcscpy_s(pszObj, dwMemToAlloc / sizeof(TCHAR), L"LDAP://");
wcscat_s(pszObj, dwMemToAlloc / sizeof(TCHAR), pszFullyQualifiedDN);

我像这样绑定到一个对象:

ADsGetObject(pszObj, IID_IADs, (LPVOID*)&pObject);

本次调用成功:

pObject->Get(CComBSTR("Description"), &var);

这个调用也成功了:

VariantClear(&var);

V_BSTR(&var) = SysAllocString(L"Some new value");
V_VT(&var) = VT_BSTR;
hr = pObject->Put(CComBSTR("Description"), var);

尝试使用以下方法提交上述更改:

pObject->SetInfo();

这是它失败的地方。
它 returns E_ACCESSDENIED 一般访问被拒绝错误。

如您所见,这是我要更新的自己的用户对象。据我所知,如果我是域用户组的成员,那应该可以工作。我就是。

可能是什么问题?

我通常会在其他人有时间回答之前找到自己问题的答案。

问题是在 Windows Server 2012 Domain Controller 中,允许写入 public (and personal, for that matter) properties is not granted to "SELF". The field I am trying to write to belongs to public properties. The only property set a user is able to change for himself in Windows Server 2012, by default, seems to be "Private-Information", which consists of ms-PKI-Credential-Roaming-Tokens, ms-PKI-RoamingTimeStamp, ms-PKI-DPAPIMasterKeys, ms-PKI-AccountCredentials

为什么用户在 Windows Server 2012 AD,Microsoft 中没有权限写入自己的个人字段??!?!?!

已编辑

另一个问题的答案是here。我无法在那里写信,因为我使用的是管理帐户登录。

If the user in question is or was a member of an administrative group such as Domain Admins, Account Operators, Backup Operators, Print Operators, etc, the AdminSDHolder object protects members of these groups by resetting their permission to the default every 5 minutes and also breaking permission inheritance on them.