编程语言
首页 > 编程语言> > C++之NetLocalGroupGetMembers

C++之NetLocalGroupGetMembers

作者:互联网

#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 != 3) {			//如果这里的参数个数不是三个,则触发如下
		wprintf(L"Usage: + localgroupname \\\\servername\n");
		wprintf(L"Eg:    + administrators \\\\192.168.232.128\n");
		exit(1);    //程序的退出,同break
	}
	//argv[0]==exe程序 //argv[1]==组名  //argv[2]==目标ip
	LPCWSTR servername = argv[2];				// 已经建立ipc连接的IP
	LPCWSTR TargetGroup = argv[1];				// 本地组名
	LOCALGROUP_MEMBERS_INFO_2* buff;			// LOCALGROUP_MEMBERS_INFO_2结构获得返回与本地组成员关联的SID、帐户信息和域名,变量buff存放获取到的信息
	DWORD dwPrefmaxlen = MAX_PREFERRED_LENGTH;	// 指定返回数据的首选最大长度,以字节为单位。如果指定MAX_PREFERRED_LENGTH,该函数将分配数据所需的内存量。
	DWORD dwEntriesread;						// 指向一个值的指针,该值接收实际枚举的元素数。
	DWORD dwTotalentries;						//指向一个值的值,该值接收可能已从当前简历位置枚举的条目总数
	NetLocalGroupGetMembers(servername, TargetGroup, 2, (LPBYTE*)&buff, dwPrefmaxlen, &dwEntriesread, &dwTotalentries, NULL);
	//上边的2就是函数里的等级
	for (DWORD i = 0; i < dwEntriesread; i++) {  // i < dwEntriesread 小于收到的指针的元素数量
		//lgrmi2_domainandname是LOCALGROUP_MEMBERS_INFO_2的结构,回显DomainName\AccountName
		wprintf(L"%s\n", buff[i].lgrmi2_domainandname);
	}
}

参考
https://docs.microsoft.com/en-us/windows/win32/api/lmaccess/ns-lmaccess-localgroup_members_info_2
https://docs.microsoft.com/en-us/windows/win32/api/lmaccess/nf-lmaccess-netlocalgroupgetmembers
https://github.com/SkewwG/domainTools

标签:lmaccess,LOCALGROUP,argv,dwEntriesread,C++,DWORD,NetLocalGroupGetMembers,buff
来源: https://www.cnblogs.com/Yang34/p/14393719.html