NetGroupGetUsers的用法

时间:2011-11-02 09:38:58

标签: c windows winapi

我希望使用NetGroupGetUsers函数获取组的用户。

DWORD dwError = 0;
NET_API_STATUS nStatus;
LPDWORD entriesread=0;
LPDWORD totalentries=0;
LPBYTE *buff;
nStatus=NetGroupGetUsers(NULL,L"Users",0,buff,MAX_PREFERRED_LENGTH,
                          entriesread,totalentries,NULL);

当我使用这个时,我得到了这个错误;

xC0000005: Access violation reading location 0xffffffffffffffff.

如何在工作时阅读buff?我也尝试了这个;

GROUP_USERS_INFO_0 *buff;
nStatus=NetGroupGetUsers(NULL,L"Users",0,(LPBYTE*)&buff,MAX_PREFERRED_LENGTH,
entriesread,totalentries,NULL);

但发生了同样的错误。

编辑:nStatus值为NERR_GroupNotFound我认为访问冲突的原因是尝试读取实际未设置的buff。

编辑2:我使用了这个函数NetLocalGroupGetMembers。现在它取得了成功,但buff->grui0_name毫无意义。有一个名为“ali”的用户,但buff->grui0_name的值只是“d”。我做错了什么?

最后一个代码;

LPCWSTR TargetGroup = L"group1";

DWORD dwError = 0;
NET_API_STATUS stat;

GROUP_USERS_INFO_0 *buff;
LPDWORD entriesread=new DWORD;
LPDWORD totalentries=new DWORD;

stat=NetGroupGetUsers(NULL,TargetGroup,0,(LPBYTE *)&buff,MAX_PREFERRED_LENGTH,
                          entriesread,totalentries,NULL);

for EDIT 2;

stat=NetLocalGroupGetMembers(NULL,TargetGroup,0,(LPBYTE *)&buff,
                  MAX_PREFERRED_LENGTH,entriesread,totalentries,NULL);

请帮忙......

4 个答案:

答案 0 :(得分:1)

您尚未为buff分配任何内存。你应该写

GROUP_USERS_INFO_0 *buff;
... NetGroupGetUsers(..., (LPBYTE*)&buff, ...);

否则你告诉NetGroupGetUsers将结果写入垃圾位置。请注意,bufptr参数记录为[out]。这意味着调用者有责任指定结果的位置。 There's more to calling a function than just getting the types to match

我很惊讶你没有得到编译器的“使用初始化变量”警告。

答案 1 :(得分:1)

以下是不包含新版本的版本:

LPCWSTR TargetGroup = L"group1";

NET_API_STATUS stat;

LOCALGROUP_MEMBERS_INFO_1 *buff;
DWORD entriesread;
DWORD totalentries;

stat = NetLocalGroupGetMembers(NULL,TargetGroup,1,(LPBYTE *)&buff,
    MAX_PREFERRED_LENGTH,&entriesread,&totalentries,NULL);

wprintf(buff->lgrmi1_name);

答案 2 :(得分:0)

请通过此链接(http://www.codeguru.com/forum/archive/index.php/t-116634.html)供您参考。

答案 3 :(得分:0)

LPCWSTR TargetGroup = L"group1";

NET_API_STATUS stat;

LOCALGROUP_MEMBERS_INFO_1 *buff;
LPDWORD entriesread=new DWORD;
LPDWORD totalentries=new DWORD;

stat=NetLocalGroupGetMembers(NULL,TargetGroup,1,(LPBYTE *)&buff,
                        MAX_PREFERRED_LENGTH,entriesread,totalentries,NULL);



wprintf(buff->lgrmi1_name);

此代码现在运行良好。感谢大家。