c - NetGroupGetUsers 的用法

标签 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);

编辑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/

相关文章:

c++ - printf 中的 %n 是什么以及如何使用它?

c++ - double 0.0 是否总是在可移植 C 中准确表示?

c - 我在 x 中出现了多少次(无符号 32 位整数 C)

c - AVR-GCC - 包含 header 的枚举错误

java - 如何在用户的 AppData 目录中创建目录和文件?

c - 未检测到多线程库

c++ - QNetworkReply 没有数据

c - TreeView 更改项目图像的颜色

c++ - 使子窗口出现在任务栏中

windows - 64 位应用程序上 Windows HANDLE 的范围是多少?