76 GroupInfo->Name.Length +
sizeof(
WCHAR);
81 GroupInfo->Name.Length +
sizeof(
WCHAR) +
82 GroupInfo->AdminComment.Length +
sizeof(
WCHAR);
87 GroupInfo->Name.Length +
sizeof(
WCHAR) +
88 GroupInfo->AdminComment.Length +
sizeof(
WCHAR);
93 GroupInfo->Name.Length +
sizeof(
WCHAR) +
94 GroupInfo->AdminComment.Length +
sizeof(
WCHAR);
118 GroupInfo->Name.Buffer,
119 GroupInfo->Name.Length);
130 GroupInfo->Name.Buffer,
131 GroupInfo->Name.Length);
138 GroupInfo->AdminComment.Buffer,
139 GroupInfo->AdminComment.Length);
150 GroupInfo->Name.Buffer,
151 GroupInfo->Name.Length);
158 GroupInfo->AdminComment.Buffer,
159 GroupInfo->AdminComment.Length);
174 GroupInfo->Name.Buffer,
175 GroupInfo->Name.Length);
182 GroupInfo->AdminComment.Buffer,
183 GroupInfo->AdminComment.Length);
199 if (GroupBuffer !=
NULL)
212 if (GroupInfo->Name.Buffer !=
NULL)
215 if (GroupInfo->AdminComment.Buffer !=
NULL)
244 WARN(
"SamLookupNamesInDomain(%wZ) failed (Status %08lx)\n", GroupName,
Status);
251 ERR(
"Object is not a group!\n");
263 ERR(
"SamOpenGroup failed (Status %08lx)\n",
Status);
268 if (RelativeId !=
NULL)
269 *RelativeId = RelativeIds[0];
272 if (RelativeIds !=
NULL)
306 TRACE(
"NetGroupAdd(%s, %d, %p, %p)\n",
309 if (parm_err !=
NULL)
313 if (servername !=
NULL)
356 ERR(
"SamConnect failed (Status %08lx)\n",
Status);
363 (servername !=
NULL) ? &ServerName :
NULL,
368 ERR(
"SamOpenDomain failed (Status %08lx)\n",
Status);
381 ERR(
"OpenGroupByName: Group %wZ already exists!\n", &GroupName);
398 ERR(
"SamCreateGroupInDomain failed (Status %08lx)\n",
Status);
403 TRACE(
"Created group \"%wZ\" (RID: %lu)\n", &GroupName, RelativeId);
415 ERR(
"SamSetInformationAlias failed (Status %08lx)\n",
Status);
435 ERR(
"SamSetInformationAlias failed (Status %08lx)\n",
Status);
446 if (GroupHandle !=
NULL)
454 if (DomainHandle !=
NULL)
457 if (ServerHandle !=
NULL)
482 TRACE(
"NetGroupAddUser(%s, %s, %s)\n",
485 if (servername !=
NULL)
499 ERR(
"SamConnect failed (Status %08lx)\n",
Status);
506 (servername !=
NULL) ? &ServerName :
NULL,
511 ERR(
"OpenAccountDomain failed (Status %08lx)\n",
Status);
524 ERR(
"OpenGroupByName(%wZ) failed (ApiStatus %lu)\n", &GroupName, ApiStatus);
537 ERR(
"SamLookupNamesInDomain(%wZ) failed (Status %08lx)\n", &UserName,
Status);
545 ERR(
"Object is not a user!\n");
555 ERR(
"SamAddMemberToGroup failed (Status %lu)\n",
Status);
561 if (RelativeIds !=
NULL)
567 if (GroupHandle !=
NULL)
570 if (DomainHandle !=
NULL)
573 if (ServerHandle !=
NULL)
594 TRACE(
"NetGroupDel(%s, %s)\n",
597 if (servername !=
NULL)
609 ERR(
"SamConnect failed (Status %08lx)\n",
Status);
616 (servername !=
NULL) ? &ServerName :
NULL,
621 ERR(
"OpenAccountDomain failed (Status %08lx)\n",
Status);
634 ERR(
"OpenGroupByName(%wZ) failed (ApiStatus %lu)\n", &GroupName, ApiStatus);
644 ERR(
"SamDeleteGroup failed (Status %08lx)\n",
Status);
650 if (GroupHandle !=
NULL)
653 if (DomainHandle !=
NULL)
656 if (ServerHandle !=
NULL)
681 TRACE(
"NetGroupDelUser(%s, %s, %s)\n",
684 if (servername !=
NULL)
698 ERR(
"SamConnect failed (Status %08lx)\n",
Status);
705 (servername !=
NULL) ? &ServerName :
NULL,
710 ERR(
"OpenAccountDomain failed (Status %08lx)\n",
Status);
723 ERR(
"OpenGroupByName(%wZ) failed (ApiStatus %lu)\n", &GroupName, ApiStatus);
736 ERR(
"SamLookupNamesInDomain(%wZ) failed (Status %08lx)\n", &UserName,
Status);
744 ERR(
"Object is not a user!\n");
753 ERR(
"SamRemoveMemberFromGroup failed (Status %lu)\n",
Status);
759 if (RelativeIds !=
NULL)
765 if (GroupHandle !=
NULL)
768 if (DomainHandle !=
NULL)
771 if (ServerHandle !=
NULL)
799 TRACE(
"NetGroupEnum(%s, %d, %p, %d, %p, %p, %p)\n",
debugstr_w(servername),
800 level,
bufptr, prefmaxlen, entriesread, totalentries, resume_handle);
806 if (servername !=
NULL)
809 if (resume_handle !=
NULL && *resume_handle != 0)
819 EnumContext->EnumerationContext = 0;
820 EnumContext->Buffer =
NULL;
821 EnumContext->Returned = 0;
822 EnumContext->Index = 0;
825 &EnumContext->ServerHandle,
830 ERR(
"SamConnect failed (Status %08lx)\n",
Status);
836 (servername !=
NULL) ? &ServerName :
NULL,
838 &EnumContext->AccountDomainHandle);
841 ERR(
"OpenAccountDomain failed (Status %08lx)\n",
Status);
848 &EnumContext->BuiltinDomainHandle);
851 ERR(
"OpenBuiltinDomain failed (Status %08lx)\n",
Status);
857 EnumContext->DomainHandle = EnumContext->AccountDomainHandle;
863 TRACE(
"EnumContext->Index: %lu\n", EnumContext->
Index);
864 TRACE(
"EnumContext->Returned: %lu\n", EnumContext->
Returned);
868 TRACE(
"Calling SamEnumerateGroupsInDomain\n");
876 TRACE(
"SamEnumerateGroupsInDomain returned (Status %08lx)\n",
Status);
879 ERR(
"SamEnumerateAliasesInDomain failed (Status %08lx)\n",
Status);
891 TRACE(
"EnumContext: %lu\n", EnumContext);
892 TRACE(
"EnumContext->Returned: %lu\n", EnumContext->
Returned);
893 TRACE(
"EnumContext->Buffer: %p\n", EnumContext->
Buffer);
896 CurrentGroup = &EnumContext->
Buffer[EnumContext->
Index];
906 ERR(
"SamOpenGroup failed (Status %08lx)\n",
Status);
913 (
PVOID *)&GroupInfo);
916 ERR(
"SamQueryInformationGroup failed (Status %08lx)\n",
Status);
934 if (GroupInfo !=
NULL)
940 EnumContext->
Index++;
946 switch (EnumContext->
Phase)
952 EnumContext->
Index = 0;
979 if (EnumContext !=
NULL)
980 *totalentries = EnumContext->
Returned;
984 if (EnumContext !=
NULL)
1010 if (GroupHandle !=
NULL)
1013 if (GroupInfo !=
NULL)
1016 if (resume_handle !=
NULL)
1017 *resume_handle = (
DWORD_PTR)EnumContext;
1021 TRACE(
"return %lu\n", ApiStatus);
1046 TRACE(
"NetGroupGetInfo(%s, %s, %d, %p)\n",
1049 if (servername !=
NULL)
1061 ERR(
"SamConnect failed (Status %08lx)\n",
Status);
1068 (servername !=
NULL) ? &ServerName :
NULL,
1073 ERR(
"OpenAccountDomain failed (Status %08lx)\n",
Status);
1086 ERR(
"OpenGroupByName(%wZ) failed (ApiStatus %lu)\n", &GroupName, ApiStatus);
1094 (
PVOID *)&GroupInfo);
1097 ERR(
"SamQueryInformationGroup failed (Status %08lx)\n",
Status);
1110 if (GroupInfo !=
NULL)
1113 if (GroupHandle !=
NULL)
1116 if (DomainHandle !=
NULL)
1119 if (ServerHandle !=
NULL)
1151 TRACE(
"NetGroupGetUsers(%s, %s, %d, %p, %d, %p, %p, %p)\n",
1153 prefmaxlen, entriesread, totalentries, resume_handle);
1159 if (servername !=
NULL)
1164 if (resume_handle !=
NULL && *resume_handle != 0)
1174 EnumContext->MemberCount = 0;
1175 EnumContext->MemberIds =
NULL;
1176 EnumContext->Attributes =
NULL;
1177 EnumContext->Names =
NULL;
1178 EnumContext->Start = 0;
1179 EnumContext->Count = 0;
1183 &EnumContext->ServerHandle,
1188 ERR(
"SamConnect failed (Status %08lx)\n",
Status);
1195 (servername !=
NULL) ? &ServerName :
NULL,
1197 &EnumContext->DomainHandle);
1200 ERR(
"OpenAccountDomain failed (Status %08lx)\n",
Status);
1209 &EnumContext->GroupHandle,
1213 ERR(
"OpenGroupByName(%wZ) failed (ApiStatus %lu)\n", &GroupName, ApiStatus);
1221 &EnumContext->MemberIds,
1222 &EnumContext->Attributes,
1223 &EnumContext->MemberCount);
1226 ERR(
"SamGetMembersInGroup failed (Status %08lx)\n",
Status);
1231 if (EnumContext->MemberCount > 0)
1235 EnumContext->MemberCount,
1236 EnumContext->MemberIds,
1237 &EnumContext->Names,
1241 ERR(
"SamLookupIdsInDomain failed (Status %08lx)\n",
Status);
1250 if (prefmaxlen == -1)
1254 for (
i = EnumContext->
Start; i < EnumContext->MemberCount;
i++)
1261 for (
i = EnumContext->
Start; i < EnumContext->MemberCount;
i++)
1266 EnumContext->
Count++;
1268 if (
Size >= prefmaxlen)
1288 for (
i = 0;
i < EnumContext->
Count;
i++)
1298 memcpy(UserInfo0[
i].grui0_name,
1311 memcpy(UserInfo1[
i].grui1_name,
1332 if (EnumContext !=
NULL)
1334 *entriesread = EnumContext->
Count;
1340 if (EnumContext !=
NULL)
1373 if (resume_handle !=
NULL)
1374 *resume_handle = (
DWORD_PTR)EnumContext;
1400 TRACE(
"NetGroupSetInfo(%s, %s, %d, %p, %p)\n",
1403 if (parm_err !=
NULL)
1406 if (servername !=
NULL)
1418 ERR(
"SamConnect failed (Status %08lx)\n",
Status);
1425 (servername !=
NULL) ? &ServerName :
NULL,
1430 ERR(
"OpenAccountDomain failed (Status %08lx)\n",
Status);
1443 WARN(
"OpenGroupByName(%wZ) failed (ApiStatus %lu)\n", &GroupName, ApiStatus);
1461 ERR(
"SamSetInformationGroup failed (ApiStatus %lu)\n", ApiStatus);
1477 ERR(
"SamSetInformationGroup failed (ApiStatus %lu)\n", ApiStatus);
1491 ERR(
"SamSetInformationGroup failed (ApiStatus %lu)\n", ApiStatus);
1507 ERR(
"SamSetInformationGroup failed (ApiStatus %lu)\n", ApiStatus);
1521 ERR(
"SamSetInformationGroup failed (ApiStatus %lu)\n", ApiStatus);
1534 ERR(
"SamSetInformationGroup failed (ApiStatus %lu)\n", ApiStatus);
1550 ERR(
"SamSetInformationGroup failed (ApiStatus %lu)\n", ApiStatus);
1564 ERR(
"SamSetInformationGroup failed (ApiStatus %lu)\n", ApiStatus);
1577 ERR(
"SamSetInformationGroup failed (ApiStatus %lu)\n", ApiStatus);
1593 ERR(
"SamSetInformationGroup failed (ApiStatus %lu)\n", ApiStatus);
1608 ERR(
"SamSetInformationGroup failed (ApiStatus %lu)\n", ApiStatus);
1620 if (GroupHandle !=
NULL)
1623 if (DomainHandle !=
NULL)
1626 if (ServerHandle !=
NULL)
1647 ULONG OldMemberCount = 0;
1660 TRACE(
"NetGroupSetUsers(%s, %s, %d, %p, %d) stub!\n",
1663 if (servername !=
NULL)
1675 ERR(
"SamConnect failed (Status %08lx)\n",
Status);
1682 (servername !=
NULL) ? &ServerName :
NULL,
1687 ERR(
"OpenAccountDomain failed (Status %08lx)\n",
Status);
1700 ERR(
"OpenGroupByName(%wZ) failed (ApiStatus %lu)\n", &GroupName, ApiStatus);
1713 ERR(
"SamGetMembersInGroup failed (Status %08lx)\n",
Status);
1721 if (NamesArray ==
NULL)
1723 ERR(
"RtlAllocateHeap failed\n");
1730 for (
i = 0;
i < totalentries;
i++)
1745 ERR(
"SamLookupNamesInDomain failed (Status %08lx)\n",
Status);
1758 for (
i = 0;
i < totalentries;
i++)
1761 for (
j = 0;
j < OldMemberCount;
j++)
1763 if (NewMemberIDs[
i] == OldMemberIDs[
j])
1769 UserInfo1[
i].grui1_attributes);
1772 ERR(
"SamSetMemberAttributesOfGroup failed (Status %lu)\n",
Status);
1785 TRACE(
"Add member %lx\n", NewMemberIDs[
i]);
1789 ERR(
"New member is not a user!\n");
1796 (
level == 0) ? 0 : UserInfo1[
i].grui1_attributes);
1799 ERR(
"SamAddMemberToGroup failed (Status %lu)\n",
Status);
1807 for (
i = 0;
i < OldMemberCount;
i++)
1810 for (
j = 0;
j < totalentries;
j++)
1812 if (OldMemberIDs[
i] == NewMemberIDs[
j])
1821 TRACE(
"Delete member %lx\n", OldMemberIDs[
i]);
1827 ERR(
"SamRemoveMemberFromGroup failed (Status %lu)\n",
Status);
1835 if (NewMemberUse !=
NULL)
1838 if (NewMemberIDs !=
NULL)
1841 if (NamesArray !=
NULL)
1844 if (OldMemberIDs !=
NULL)
1847 if (GroupHandle !=
NULL)
1850 if (DomainHandle !=
NULL)
1853 if (ServerHandle !=
NULL)
#define WINE_DEFAULT_DEBUG_CHANNEL(t)
PVOID NTAPI RtlAllocateHeap(IN PVOID HeapHandle, IN ULONG Flags, IN SIZE_T Size)
BOOLEAN NTAPI RtlFreeHeap(IN PVOID HeapHandle, IN ULONG Flags, IN PVOID HeapBase)
#define NT_SUCCESS(StatCode)
NET_API_STATUS WINAPI NetApiBufferFree(LPVOID Buffer)
NET_API_STATUS WINAPI NetApiBufferAllocate(DWORD ByteCount, LPVOID *Buffer)
NET_API_STATUS WINAPI NetpNtStatusToApiStatus(_In_ NTSTATUS Status)
_Must_inspect_result_ _In_ PFSRTL_PER_STREAM_CONTEXT Ptr
GLenum GLuint GLenum GLsizei const GLchar * buf
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint GLint GLint j
struct _GROUP_ENUM_CONTEXT * PGROUP_ENUM_CONTEXT
enum _ENUM_PHASE ENUM_PHASE
NET_API_STATUS WINAPI NetGroupEnum(_In_opt_ LPCWSTR servername, _In_ DWORD level, _Out_ LPBYTE *bufptr, _In_ DWORD prefmaxlen, _Out_ LPDWORD entriesread, _Out_ LPDWORD totalentries, _Inout_opt_ PDWORD_PTR resume_handle)
NET_API_STATUS WINAPI NetGroupDelUser(_In_opt_ LPCWSTR servername, _In_ LPCWSTR groupname, _In_ LPCWSTR username)
NET_API_STATUS WINAPI NetGroupDel(_In_opt_ LPCWSTR servername, _In_ IN LPCWSTR groupname)
static NET_API_STATUS BuildGroupInfoBuffer(_In_ PGROUP_GENERAL_INFORMATION GroupInfo, _In_ DWORD Level, _In_ DWORD GroupId, _Out_ LPVOID *Buffer)
NET_API_STATUS WINAPI NetGroupGetInfo(_In_opt_ LPCWSTR servername, _In_ LPCWSTR groupname, _In_ DWORD level, _Out_ LPBYTE *bufptr)
NET_API_STATUS WINAPI NetGroupSetUsers(_In_opt_ LPCWSTR servername, _In_ LPCWSTR groupname, _In_ DWORD level, _In_ LPBYTE buf, _In_ DWORD totalentries)
struct _USER_ENUM_CONTEXT * PUSER_ENUM_CONTEXT
NET_API_STATUS WINAPI NetGroupAddUser(_In_opt_ LPCWSTR servername, _In_ LPCWSTR groupname, _In_ LPCWSTR username)
NET_API_STATUS WINAPI NetGroupAdd(_In_opt_ LPCWSTR servername, _In_ DWORD level, _In_ LPBYTE buf, _Out_opt_ LPDWORD parm_err)
NET_API_STATUS WINAPI NetGroupGetUsers(_In_opt_ LPCWSTR servername, _In_ LPCWSTR groupname, _In_ DWORD level, _Out_ LPBYTE *bufptr, _In_ DWORD prefmaxlen, _Out_ LPDWORD entriesread, _Out_ LPDWORD totalentries, _Inout_ PDWORD_PTR resume_handle)
static VOID FreeGroupInfo(_In_ PGROUP_GENERAL_INFORMATION GroupInfo)
struct _USER_ENUM_CONTEXT USER_ENUM_CONTEXT
static NET_API_STATUS OpenGroupByName(_In_ SAM_HANDLE DomainHandle, _In_ PUNICODE_STRING GroupName, _In_ ULONG DesiredAccess, _Out_ PSAM_HANDLE GroupHandle, _Out_ PULONG RelativeId)
NET_API_STATUS WINAPI NetGroupSetInfo(_In_opt_ LPCWSTR servername, _In_ LPCWSTR groupname, _In_ DWORD level, _In_ LPBYTE buf, _Out_opt_ LPDWORD parm_err)
struct _GROUP_ENUM_CONTEXT GROUP_ENUM_CONTEXT
struct _GROUP_INFO_2 * PGROUP_INFO_2
struct _GROUP_INFO_3 GROUP_INFO_3
struct _GROUP_INFO_0 * PGROUP_INFO_0
struct _GROUP_INFO_3 * PGROUP_INFO_3
struct _GROUP_USERS_INFO_1 GROUP_USERS_INFO_1
struct _GROUP_INFO_1 GROUP_INFO_1
struct _GROUP_USERS_INFO_0 * PGROUP_USERS_INFO_0
struct _GROUP_INFO_2 GROUP_INFO_2
struct _GROUP_INFO_1005 * PGROUP_INFO_1005
struct _GROUP_USERS_INFO_0 GROUP_USERS_INFO_0
struct _GROUP_USERS_INFO_1 * PGROUP_USERS_INFO_1
struct _LOCALGROUP_INFO_0 LOCALGROUP_INFO_0
struct _GROUP_INFO_0 GROUP_INFO_0
struct _GROUP_INFO_1 * PGROUP_INFO_1
#define NERR_UserNotFound
#define NERR_GroupNotFound
enum _SID_NAME_USE * PSID_NAME_USE
#define memcpy(s1, s2, n)
NTSTATUS OpenBuiltinDomain(IN SAM_HANDLE ServerHandle, IN ULONG DesiredAccess, OUT SAM_HANDLE *DomainHandle)
NTSTATUS OpenAccountDomain(IN SAM_HANDLE ServerHandle, IN PUNICODE_STRING ServerName, IN ULONG DesiredAccess, OUT PSAM_HANDLE DomainHandle)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
#define GROUP_READ_INFORMATION
#define DOMAIN_CREATE_GROUP
ULONG SAM_ENUMERATE_HANDLE
#define SAM_SERVER_LOOKUP_DOMAIN
#define SAM_SERVER_CONNECT
#define GROUP_LIST_MEMBERS
#define GROUP_WRITE_ACCOUNT
#define GROUP_REMOVE_MEMBER
#define DOMAIN_LIST_ACCOUNTS
@ GroupAttributeInformation
@ GroupGeneralInformation
@ GroupAdminCommentInformation
#define STATUS_NONE_MAPPED
NTSTATUS NTAPI SamOpenGroup(IN SAM_HANDLE DomainHandle, IN ACCESS_MASK DesiredAccess, IN ULONG GroupId, OUT PSAM_HANDLE GroupHandle)
NTSTATUS NTAPI SamQueryInformationGroup(IN SAM_HANDLE GroupHandle, IN GROUP_INFORMATION_CLASS GroupInformationClass, OUT PVOID *Buffer)
NTSTATUS NTAPI SamSetInformationGroup(IN SAM_HANDLE GroupHandle, IN GROUP_INFORMATION_CLASS GroupInformationClass, IN PVOID Buffer)
NTSTATUS NTAPI SamLookupIdsInDomain(IN SAM_HANDLE DomainHandle, IN ULONG Count, IN PULONG RelativeIds, OUT PUNICODE_STRING *Names, OUT PSID_NAME_USE *Use OPTIONAL)
NTSTATUS NTAPI SamGetMembersInGroup(IN SAM_HANDLE GroupHandle, OUT PULONG *MemberIds, OUT PULONG *Attributes, OUT PULONG MemberCount)
NTSTATUS NTAPI SamDeleteGroup(IN SAM_HANDLE GroupHandle)
NTSTATUS NTAPI SamAddMemberToGroup(IN SAM_HANDLE GroupHandle, IN ULONG MemberId, IN ULONG Attributes)
NTSTATUS NTAPI SamLookupNamesInDomain(IN SAM_HANDLE DomainHandle, IN ULONG Count, IN PUNICODE_STRING Names, OUT PULONG *RelativeIds, OUT PSID_NAME_USE *Use)
NTSTATUS NTAPI SamFreeMemory(IN PVOID Buffer)
NTSTATUS NTAPI SamSetMemberAttributesOfGroup(IN SAM_HANDLE GroupHandle, IN ULONG MemberId, IN ULONG Attributes)
NTSTATUS NTAPI SamCreateGroupInDomain(IN SAM_HANDLE DomainHandle, IN PUNICODE_STRING AccountName, IN ACCESS_MASK DesiredAccess, OUT PSAM_HANDLE GroupHandle, OUT PULONG RelativeId)
NTSTATUS NTAPI SamConnect(IN OUT PUNICODE_STRING ServerName OPTIONAL, OUT PSAM_HANDLE ServerHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
NTSTATUS NTAPI SamCloseHandle(IN SAM_HANDLE SamHandle)
NTSTATUS NTAPI SamEnumerateGroupsInDomain(IN SAM_HANDLE DomainHandle, IN OUT PSAM_ENUMERATE_HANDLE EnumerationContext, IN PVOID *Buffer, IN ULONG PreferedMaximumLength, OUT PULONG CountReturned)
NTSTATUS NTAPI SamRemoveMemberFromGroup(IN SAM_HANDLE GroupHandle, IN ULONG MemberId)
PSAM_RID_ENUMERATION Buffer
SAM_ENUMERATE_HANDLE EnumerationContext
SAM_HANDLE AccountDomainHandle
SAM_HANDLE BuiltinDomainHandle
static unsigned int bufptr
#define STATUS_MORE_ENTRIES
_Must_inspect_result_ _In_ WDFDMAENABLER _In_ _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes
_Must_inspect_result_ _In_ WDFDEVICE _In_ ULONG _In_ ACCESS_MASK DesiredAccess
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_DEVICE_PROPERTY_DATA _In_ DEVPROPTYPE _In_ ULONG Size
#define ERROR_INVALID_LEVEL
#define ERROR_GROUP_EXISTS
#define ERROR_NONE_MAPPED
_IRQL_requires_same_ typedef _In_ ULONG _In_ UCHAR Level