我正在尝试使用ldap_modify函数修改AD属性值...
代码在下面...
LDAPMod *list_of_attrs[1]={0};
char *Password[] = {"Password2"};
LDAPMessage *result=NULL;
int msgid;
int rc=0;
LDAPMod attribute2;
attribute2.mod_type = (PCHAR)"Password number";
attribute2.mod_op = LDAP_MOD_REPLACE;
attribute2.mod_vals.modv_strvals=Password;
list_of_attrs[0] = &attribute2;
wchar_t dnName[100]={0};
char *dn = "CN=test,CN=Users,DC=raja,DC=com";
mbstowcs(dnName,dn, 100);
PWCHAR dnNameval = (PWCHAR)malloc(sizeof(PWCHAR) * 20);
wcscpy(dnNameval,dnName);
msgid=ldap_modify(pLdapConnection,(const PCHAR)dnNameval, list_of_attrs);
但是,当涉及到最后一行(msgid)时,发生了访问冲突异常。
* AD2.exe中0x76f693ac处未处理的异常:0xC0000005:访问冲突读取位置0xcccccccc。*
请帮助我解决这个问题...
提前致谢。
最佳答案
我可能从位置0xcccccccc 猜测,由于未初始化的指针而导致崩溃。读取代码时,pLdapConnection
似乎是该指针。
更新
阅读OP注释后,现在我可以看到问题出在第3个参数中,该参数引用MSDN的,是对条目进行的以空值终止的修改数组。
因此,正确的用法应该是
LDAPMod attribute2;
// Initialize attribute2
............
LDAPMod *list_of_attrs[2]={&attribute2, 0};
也就是说,数组的大小应比您要定义的条目数大一,最后一个数组项应为NULL。