• C++之NetGroupGetUsers


    普通版本

    #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) {			//如果这里的参数个数不是3个,则触发如下
    		wprintf(L"Usage: +  "groupname"    \\servername
    ");
    		wprintf(L"Eg:    +  "domain admins" \\127.0.0.1
    ");
    		wprintf(L"      !!!  target ip must DC's ip  !!!   
    ");
    		exit(1);    //程序的退出,同break
    	}
    	wprintf(L"target servername:%s
    ", argv[2]);
    	wprintf(L"target groupname:%s
    ", argv[1]);
    	
    	LPCWSTR servername = argv[2];	// 已经建立ipc连接的IP
    	LPCWSTR groupname = argv[1];
    	//DWORD  level 调用时候再给
    	GROUP_USERS_INFO_1* cunchu;			//GROUP_USERS_INFO_1结构和下面构造函数的level相关,选用0有较多限定,还是用1,变量cunchu存放获取到的信息
    	DWORD dwPrefmaxlen = MAX_PREFERRED_LENGTH;	// 指定返回数据的首选最大长度,以字节为单位。如果指定MAX_PREFERRED_LENGTH,该函数将分配数据所需的内存量。
    	DWORD dwEntriesread;						// 指向一个值的指针,该值接收实际枚举的元素数。
    	DWORD dwTotalentries;						//指向一个值的值,该值接收可能已从当前简历位置枚举的条目总数
    	
    	DWORD result;
    	result = NetGroupGetUsers(servername, groupname,1, (LPBYTE*)&cunchu, dwPrefmaxlen, &dwEntriesread, &dwTotalentries, NULL);
    	//上边的1就是函数里的等级level
    	
    	for (DWORD i = 0; i < dwEntriesread; i++) {  // i < dwEntriesread 小于收到的指针的元素数量
    	
    		wprintf(L"%s
    ", cunchu[i].grui1_name);
    	}
    }
    

    附带错误代码版本

    #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) {			//如果这里的参数个数不是3个,则触发如下
    		wprintf(L"Usage: +  "groupname"    \\servername
    ");
    		wprintf(L"Eg:    +  "domain admins" \\192.168.3.144
    ");
    		wprintf(L"      !!!  target ip must DC's ip  !!!   
    ");
    		exit(1);    //程序的退出,同break
    	}
    	wprintf(L"target servername:%s
    ", argv[2]);
    	wprintf(L"target groupname:%s
    ", argv[1]);
    
    	LPCWSTR servername = argv[2];	// 已经建立ipc连接的IP
    	LPCWSTR groupname = argv[1];
    	//DWORD  level 调用时候再给
    	GROUP_USERS_INFO_1* cunchu;			//GROUP_USERS_INFO_1结构和下面构造函数的level相关,选用0有较多限定,还是用1,变量cunchu存放获取到的信息
    	DWORD dwPrefmaxlen = MAX_PREFERRED_LENGTH;	// 指定返回数据的首选最大长度,以字节为单位。如果指定MAX_PREFERRED_LENGTH,该函数将分配数据所需的内存量。
    	DWORD dwEntriesread;						// 指向一个值的指针,该值接收实际枚举的元素数。
    	DWORD dwTotalentries;						//指向一个值的值,该值接收可能已从当前简历位置枚举的条目总数
    
    	DWORD result;
    	result = NetGroupGetUsers(servername, groupname, 1, (LPBYTE*)&cunchu, dwPrefmaxlen, &dwEntriesread, &dwTotalentries, NULL);
    	//上边的1就是函数里的等级level
    
    	if (result == NO_ERROR) {
    		for (DWORD i = 0; i < dwEntriesread; i++)
    		{
    			wprintf(L"[%u] %s 
    ", i, cunchu[i].grui1_name);
    		}
    	}
    	else
    	{
    		wprintf(L"wrong number :%u",result);
    	}
    }
    


    参考
    https://docs.microsoft.com/en-us/windows/win32/api/lmaccess/nf-lmaccess-netgroupgetusers
    https://docs.microsoft.com/en-us/windows/win32/netmgmt/network-management-error-codes
    https://docs.microsoft.com/en-us/windows/win32/api/lmaccess/ns-lmaccess-group_users_info_1
    https://github.com/SkewwG/domainTools/blob/master/NetGroupGetUsers/%E6%BA%90.cpp
    
    联系邮箱:yang_s1r@163.com 博客园地址:https://www.cnblogs.com/Yang34/
  • 相关阅读:
    【Git】windows上git命令中文乱码的问题
    【spring boot】集成了druid后,同样的mybatis模糊查询语句出错Caused by: com.alibaba.druid.sql.parser.ParserException: syntax error, error in :'name LIKE '%' ? '%'
    【log4j】springboot项目启动 ,使用的druid数据源,log4j报错 log4j:WARN Please initialize the log4j system properly.
    ScheduledExecutorService run方法要加入try catch
    基于t-io的MI工具实现
    Java 8:不要再用循环了 Stream替代for循环
    java gzip压缩与解压
    Java将字符串写入文件与将文件内容读取到字符串
    Des加解密
    spring boot 利用redisson实现redis的分布式锁
  • 原文地址:https://www.cnblogs.com/Yang34/p/14394279.html
Copyright © 2020-2023  润新知