[SYSSETUP]
[reactos.git] / reactos / dll / win32 / syssetup / security.c
1 /*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS system libraries
4 * PURPOSE: System setup
5 * FILE: dll/win32/syssetup/security.c
6 * PROGRAMER: Eric Kohl
7 */
8
9 /* INCLUDES *****************************************************************/
10
11 #include "precomp.h"
12
13 #define NDEBUG
14 #include <debug.h>
15
16
17 /* FUNCTIONS ****************************************************************/
18
19 NTSTATUS
20 SetAccountDomain(LPCWSTR DomainName,
21 PSID DomainSid)
22 {
23 PPOLICY_ACCOUNT_DOMAIN_INFO OrigInfo = NULL;
24 POLICY_ACCOUNT_DOMAIN_INFO Info;
25 LSA_OBJECT_ATTRIBUTES ObjectAttributes;
26 LSA_HANDLE PolicyHandle;
27 NTSTATUS Status;
28
29 if (DomainSid != NULL)
30 SamSetDomainSid (DomainSid);
31
32 memset(&ObjectAttributes, 0, sizeof(LSA_OBJECT_ATTRIBUTES));
33 ObjectAttributes.Length = sizeof(LSA_OBJECT_ATTRIBUTES);
34
35 Status = LsaOpenPolicy(NULL,
36 &ObjectAttributes,
37 POLICY_TRUST_ADMIN,
38 &PolicyHandle);
39 if (Status != STATUS_SUCCESS)
40 {
41 DPRINT("LsaOpenPolicy failed (Status: 0x%08lx)\n", Status);
42 return Status;
43 }
44
45 Status = LsaQueryInformationPolicy(PolicyHandle,
46 PolicyAccountDomainInformation,
47 (PVOID *)&OrigInfo);
48 if (Status == STATUS_SUCCESS && OrigInfo != NULL)
49 {
50 if (DomainName == NULL)
51 {
52 Info.DomainName.Buffer = OrigInfo->DomainName.Buffer;
53 Info.DomainName.Length = OrigInfo->DomainName.Length;
54 Info.DomainName.MaximumLength = OrigInfo->DomainName.MaximumLength;
55 }
56 else
57 {
58 Info.DomainName.Buffer = (LPWSTR)DomainName;
59 Info.DomainName.Length = wcslen(DomainName) * sizeof(WCHAR);
60 Info.DomainName.MaximumLength = Info.DomainName.Length + sizeof(WCHAR);
61 }
62
63 if (DomainSid == NULL)
64 Info.DomainSid = OrigInfo->DomainSid;
65 else
66 Info.DomainSid = DomainSid;
67 }
68 else
69 {
70 Info.DomainName.Buffer = (LPWSTR)DomainName;
71 Info.DomainName.Length = wcslen(DomainName) * sizeof(WCHAR);
72 Info.DomainName.MaximumLength = Info.DomainName.Length + sizeof(WCHAR);
73 Info.DomainSid = DomainSid;
74 }
75
76 Status = LsaSetInformationPolicy(PolicyHandle,
77 PolicyAccountDomainInformation,
78 (PVOID)&Info);
79 if (Status != STATUS_SUCCESS)
80 {
81 DPRINT("LsaSetInformationPolicy failed (Status: 0x%08lx)\n", Status);
82 }
83
84 if (OrigInfo != NULL)
85 LsaFreeMemory(OrigInfo);
86
87 LsaClose(PolicyHandle);
88
89 return Status;
90 }