2 * COPYRIGHT: See COPYING in the top level directory
4 * FILE: reactos/dll/win32/netapi32/misc.c
5 * PURPOSE: Helper functions
7 * PROGRAMMERS: Eric Kohl
10 /* INCLUDES ******************************************************************/
15 #define WIN32_NO_STATUS
21 #include "wine/debug.h"
23 #define NTOS_MODE_USER
24 #include <ndk/rtlfuncs.h>
29 WINE_DEFAULT_DEBUG_CHANNEL(netapi32
);
32 /* GLOBALS *******************************************************************/
34 static SID_IDENTIFIER_AUTHORITY NtAuthority
= {SECURITY_NT_AUTHORITY
};
37 /* FUNCTIONS *****************************************************************/
40 GetAccountDomainSid(IN PUNICODE_STRING ServerName
,
41 OUT PSID
*AccountDomainSid
)
43 PPOLICY_ACCOUNT_DOMAIN_INFO AccountDomainInfo
= NULL
;
44 LSA_OBJECT_ATTRIBUTES ObjectAttributes
;
45 LSA_HANDLE PolicyHandle
= NULL
;
49 memset(&ObjectAttributes
, 0, sizeof(LSA_OBJECT_ATTRIBUTES
));
51 Status
= LsaOpenPolicy(ServerName
,
53 POLICY_VIEW_LOCAL_INFORMATION
,
55 if (!NT_SUCCESS(Status
))
57 ERR("LsaOpenPolicy failed (Status %08lx)\n", Status
);
61 Status
= LsaQueryInformationPolicy(PolicyHandle
,
62 PolicyAccountDomainInformation
,
63 (PVOID
*)&AccountDomainInfo
);
64 if (!NT_SUCCESS(Status
))
66 ERR("LsaQueryInformationPolicy failed (Status %08lx)\n", Status
);
70 Length
= RtlLengthSid(AccountDomainInfo
->DomainSid
);
72 *AccountDomainSid
= RtlAllocateHeap(RtlGetProcessHeap(), 0, Length
);
73 if (*AccountDomainSid
== NULL
)
75 ERR("Failed to allocate SID\n");
76 Status
= STATUS_INSUFFICIENT_RESOURCES
;
80 memcpy(*AccountDomainSid
, AccountDomainInfo
->DomainSid
, Length
);
83 if (AccountDomainInfo
!= NULL
)
84 LsaFreeMemory(AccountDomainInfo
);
86 LsaClose(PolicyHandle
);
93 GetBuiltinDomainSid(OUT PSID
*BuiltinDomainSid
)
97 NTSTATUS Status
= STATUS_SUCCESS
;
99 *BuiltinDomainSid
= NULL
;
101 Sid
= RtlAllocateHeap(RtlGetProcessHeap(),
103 RtlLengthRequiredSid(1));
105 return STATUS_INSUFFICIENT_RESOURCES
;
107 Status
= RtlInitializeSid(Sid
,
110 if (!NT_SUCCESS(Status
))
113 Ptr
= RtlSubAuthoritySid(Sid
, 0);
114 *Ptr
= SECURITY_BUILTIN_DOMAIN_RID
;
116 *BuiltinDomainSid
= Sid
;
119 if (!NT_SUCCESS(Status
))
122 RtlFreeHeap(RtlGetProcessHeap(), 0, Sid
);