#include <stdio.h>
#include <Windows.h>
#include <lmaccess.h>
#pragma comment(lib, "Netapi32.lib")
//wmain是main函数的宽字符版本 在Unicode编码下使用
int wmain(int argc, wchar_t* argv[]) {//argc是输入参数的个数,argv存储了所有命令行的参数
if (argc != 2) { //如果这里的参数个数不是2个,则触发如下
wprintf(L"Usage: + \\\\servername\n");
wprintf(L"Eg: + \\\\127.0.0.1\n");
exit(1); //程序的退出,同break
}
LPCWSTR servername = argv[1]; // 已经建立ipc连接的IP
LOCALGROUP_INFO_1* cunchu; // LOCALGROUP_MEMBERS_INFO_1结构和下面构造函数的level相关,再调用lgrpi1_name获得组名,变量cunchu存放获取到的信息
DWORD dwPrefmaxlen = MAX_PREFERRED_LENGTH; // 指定返回数据的首选最大长度,以字节为单位。如果指定MAX_PREFERRED_LENGTH,该函数将分配数据所需的内存量。
DWORD dwEntriesread; // 指向一个值的指针,该值接收实际枚举的元素数。
DWORD dwTotalentries; //指向一个值的值,该值接收可能已从当前简历位置枚举的条目总数
NetLocalGroupEnum(servername, 1, (LPBYTE*)&cunchu, dwPrefmaxlen, &dwEntriesread, &dwTotalentries, NULL);
//上边的1就是函数里的等级level,在LOCALGROUP_INFO_1* cunchu提到的下面相互对应
for (DWORD i = 0; i < dwEntriesread; i++) { // i < dwEntriesread 小于收到的指针的元素数量
//lgrmi2_domainandname是LOCALGROUP_MEMBERS_INFO_2的结构,回显DomainName\AccountName
wprintf(L"%s\n", cunchu[i].lgrpi1_name);
}
}
参考
https://docs.microsoft.com/en-us/windows/win32/api/lmaccess/ns-lmaccess-localgroup_members_info_1
https://docs.microsoft.com/en-us/windows/win32/api/lmaccess/nf-lmaccess-netlocalgroupenum
https://github.com/SkewwG/domainTools