c++ - 从 WindowsAPI 调用 NetLocalGroupAddMembers 时,安全 ID 结构无效错误
问题描述
我想使用 Windows API 中的 NetLocalGroupAddMembers 函数将用户添加到本地管理员组。
NET_API_STATUS nStatus;
DWORD dwLevel = 0;
LOCALGROUP_INFO_0 localGroupInformation;
localGroupInformation.lgrpi0_name = username;
nStatus = NetLocalGroupAddMembers(
NULL,
TEXT("Administrators"),
dwLevel,
(LPBYTE)& localGroupInformation,
1
);
但是,当我使用以下命令时,它可以工作:
net localgroup Administrators username /add
谢谢你。
解决方案
您必须使用用户SID和LOCALGROUP_MEMBERS_INFO_0结构。
像这样的东西=>
WCHAR wsName[256] = L"test";
DWORD dwSidSize = 0;
DWORD dwDomainSize = 0;
SID_NAME_USE snu;
LPWSTR pwszDomain = NULL;
PSID pSid = NULL;
LookupAccountName(NULL, wsName, NULL, &dwSidSize, NULL, &dwDomainSize, &snu);
DWORD dwErr = GetLastError();
if (dwErr == ERROR_INSUFFICIENT_BUFFER)
{
pSid = (PSID)LocalAlloc(LPTR, dwSidSize);
pwszDomain = (PWSTR)LocalAlloc(LPTR, dwDomainSize * sizeof(WCHAR));
if (!LookupAccountName(NULL, wsName, pSid, &dwSidSize, pwszDomain, &dwDomainSize, &snu))
{
// Handle error
}
}
if (pwszDomain != NULL)
LocalFree(pwszDomain);
if (pSid)
{
NET_API_STATUS nStatus;
DWORD dwLevel = 0;
LOCALGROUP_MEMBERS_INFO_0 localGroupMemberInfo;
localGroupMemberInfo.lgrmi0_sid = pSid;
nStatus = NetLocalGroupAddMembers(
NULL,
TEXT("Administrators"),
dwLevel,
(LPBYTE)&localGroupMemberInfo,
1
);
// Test nStatus...
LocalFree(pSid);
}
推荐阅读
- java - 如何流式传输 API 多个 groupBy 使用 Map 呈现数据
? - amazon-web-services - AWS Quicksight 可以记住每个用户的控制/过滤器设置吗?
- angular - 图表点击事件 - 点击圆环图的标签,不返回标签 ng2-charts
- java - 在 Java 中重新排列数组以使所有元素彼此相邻
- python-3.x - 在生成器函数中返回时未执行带有异步任务的 Python 3
- windows - “svchost -k”中的“-k”标志是什么意思?
- sql - 使用带有 on/and 条件的 Join PL/SQL 进行更新 - 它尝试更新所有行
- amazon-web-services - 何时使用公共子网与私有子网?
- swiftui - 带有一堆卡片的 SwiftUI 水平过渡
- react-native-android - 在 Flatlist 项目上实现 onPress