我想使用 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);
编辑2;
stat=NetLocalGroupGetMembers(NULL,TargetGroup,0,(LPBYTE *)&buff,
MAX_PREFERRED_LENGTH,entriesread,totalentries,NULL);
请帮忙...
最佳答案
您尚未为 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 .
我很惊讶您没有从编译器收到“使用初始化变量”警告。
关于c - NetGroupGetUsers 的用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7978227/