Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
尝试更新AD中我自己的字段时,拒绝了常规访问 我试图用ADSI和C++应用程序更新ActiveDirectory中属于我自己的用户对象的字段。操作系统为Windows Server 2012标准_C++_Active Directory_Ldap_Adsi - Fatal编程技术网

尝试更新AD中我自己的字段时,拒绝了常规访问 我试图用ADSI和C++应用程序更新ActiveDirectory中属于我自己的用户对象的字段。操作系统为Windows Server 2012标准

尝试更新AD中我自己的字段时,拒绝了常规访问 我试图用ADSI和C++应用程序更新ActiveDirectory中属于我自己的用户对象的字段。操作系统为Windows Server 2012标准,c++,active-directory,ldap,adsi,C++,Active Directory,Ldap,Adsi,我能够阅读,我能够毫无问题地调用Put,但当我调用SetInfo时,它返回时拒绝一般访问。我已经确认,我正在尝试访问的是我自己的用户对象 我获得自己的FQDN,如下所示: GetUserNameEx(EXTENDED_NAME_FORMAT::NameFullyQualifiedDN, pszFullyQualifiedDN, &dwFullyQualifiedDN); LPTSTR pszObj = (LPTSTR)LocalAlloc(LPTR, dwMemToAlloc); wc

我能够阅读,我能够毫无问题地调用Put,但当我调用SetInfo时,它返回时拒绝一般访问。我已经确认,我正在尝试访问的是我自己的用户对象

我获得自己的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);
然后我就这样使用它:

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);
我绑定到这样一个对象:

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->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();
这就是它失败的地方。 它返回E_ACCESSDENIED General access denied错误

如您所见,这是我自己的用户对象,我正在尝试更新。据我所知,如果我是域用户组的成员,这应该是可行的。我就是


可能是什么问题

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

问题在于,在Windows Server 2012域控制器中,没有向SELF授予写入和属性的权限。我试图写入的字段属于公共属性。默认情况下,用户在Windows Server 2012中可以自行更改的唯一属性集似乎是,它包括

究竟为什么用户没有权限在Windows Server 2012广告中写入自己的个人字段,微软

编辑

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

如果所涉及的用户是或曾经是管理组(如域管理员、帐户操作员、备份操作员、打印操作员等)的成员,AdminsHolder对象会通过每5分钟将这些组的成员的权限重置为默认权限并断开其上的权限继承来保护这些组的成员