Reputation: 1123
I want to add a user to local Administrators group using NetLocalGroupAddMembers function from the Windows API.
NET_API_STATUS nStatus;
DWORD dwLevel = 0;
LOCALGROUP_INFO_0 localGroupInformation;
localGroupInformation.lgrpi0_name = username;
nStatus = NetLocalGroupAddMembers(
NULL,
TEXT("Administrators"),
dwLevel,
(LPBYTE)& localGroupInformation,
1
);
However when I use the following command it works:
net localgroup Administrators username /add
Thank you.
Upvotes: 1
Views: 263
Reputation: 1545
You must use the User SID and LOCALGROUP_MEMBERS_INFO_0 structure.
Something like this =>
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);
}
Upvotes: 1