ldap_modify函数是否通过访问冲突?

时间:2012-10-15 05:32:38

标签: c++ c windows

我正在尝试使用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。 *

请帮我解决这个问题...... 提前谢谢。

2 个答案:

答案 0 :(得分:1)

我可以从位置0xcccccccc 猜测由于未初始化的指针而发生崩溃。阅读代码时,pLdapConnection似乎是指针。

<强>更新

在阅读OP评论之后,现在我可以看到问题出现在第三个参数中,即引用MSDN,对条目进行空终止的修改数组。 因此,正确的用法应该是例如。

LDAPMod attribute2;     
// Initialize attribute2
............
LDAPMod *list_of_attrs[2]={&attribute2, 0};

也就是说,数组的大小应该比您要定义的条目数多一个,最后一个数组项应该为NULL。

答案 1 :(得分:1)

只需将mod_values用于mod_vals ...

mod_values在winldap.h中定义...

char *Password[] = {"Password2",NUll};

    attribute2.mod_type = (PCHAR)"Password number";
    attribute2.mod_op = LDAP_MOD_REPLACE;
    attribute2.mod_values=Password;

    ldap_modify(pLdapConnection,dnNameval, list_of_attrs);

现在,ldap_modify函数工作正常&amp;修改Active Directory中的属性值...

感谢您的支持

散聚