[SAMSRV/SYSSETUP]
[reactos.git] / reactos / dll / win32 / syssetup / security.c
index ecf892d..9df7669 100644 (file)
@@ -24,14 +24,21 @@ SetAccountDomain(LPCWSTR DomainName,
     POLICY_ACCOUNT_DOMAIN_INFO Info;
     LSA_OBJECT_ATTRIBUTES ObjectAttributes;
     LSA_HANDLE PolicyHandle;
+
+    SAM_HANDLE ServerHandle = NULL;
+    SAM_HANDLE DomainHandle = NULL;
+    DOMAIN_NAME_INFORMATION DomainNameInfo;
+
     NTSTATUS Status;
 
+    DPRINT1("SYSSETUP: SetAccountDomain\n");
+
     memset(&ObjectAttributes, 0, sizeof(LSA_OBJECT_ATTRIBUTES));
     ObjectAttributes.Length = sizeof(LSA_OBJECT_ATTRIBUTES);
 
     Status = LsaOpenPolicy(NULL,
                            &ObjectAttributes,
-                           POLICY_TRUST_ADMIN,
+                           POLICY_VIEW_LOCAL_INFORMATION | POLICY_TRUST_ADMIN,
                            &PolicyHandle);
     if (Status != STATUS_SUCCESS)
     {
@@ -83,6 +90,40 @@ SetAccountDomain(LPCWSTR DomainName,
 
     LsaClose(PolicyHandle);
 
+    DomainNameInfo.DomainName.Length = wcslen(DomainName) * sizeof(WCHAR);
+    DomainNameInfo.DomainName.MaximumLength = (wcslen(DomainName) + 1) * sizeof(WCHAR);
+    DomainNameInfo.DomainName.Buffer = (LPWSTR)DomainName;
+
+    Status = SamConnect(NULL,
+                        &ServerHandle,
+                        SAM_SERVER_CONNECT | SAM_SERVER_LOOKUP_DOMAIN,
+                        NULL);
+    if (NT_SUCCESS(Status))
+    {
+        Status = SamOpenDomain(ServerHandle,
+                               DOMAIN_WRITE_OTHER_PARAMETERS,
+                               Info.DomainSid,
+                               &DomainHandle);
+        if (NT_SUCCESS(Status))
+        {
+            Status = SamSetInformationDomain(DomainHandle,
+                                             DomainNameInformation,
+                                             (PVOID)&DomainNameInfo);
+            if (!NT_SUCCESS(Status))
+            {
+                DPRINT1("SamSetInformationDomain failed (Status: 0x%08lx)\n", Status);
+            }
+
+            SamCloseHandle(DomainHandle);
+        }
+        else
+        {
+            DPRINT1("SamOpenDomain failed (Status: 0x%08lx)\n", Status);
+        }
+
+        SamCloseHandle(ServerHandle);
+    }
+
     return Status;
 }