[SAMSRV/SYSSETUP]
[reactos.git] / reactos / dll / win32 / samsrv / setup.c
index 635fc9c..fed2772 100644 (file)
@@ -223,11 +223,18 @@ SampCreateUserAccount(HKEY hDomainKey,
                       LPCWSTR lpAccountName,
                       ULONG ulRelativeId)
 {
+    SAM_USER_FIXED_DATA FixedUserData;
     DWORD dwDisposition;
     WCHAR szAccountKeyName[32];
     HKEY hAccountKey = NULL;
     HKEY hNamesKey = NULL;
 
+    /* Initialize fixed user data */
+    memset(&FixedUserData, 0, sizeof(SAM_USER_FIXED_DATA));
+    FixedUserData.Version = 1;
+
+    FixedUserData.UserId = ulRelativeId;
+
     swprintf(szAccountKeyName, L"Users\\%08lX", ulRelativeId);
 
     if (!RegCreateKeyExW(hDomainKey,
@@ -240,6 +247,13 @@ SampCreateUserAccount(HKEY hDomainKey,
                          &hAccountKey,
                          &dwDisposition))
     {
+        RegSetValueEx(hAccountKey,
+                      L"F",
+                      0,
+                      REG_BINARY,
+                      (LPVOID)&FixedUserData,
+                      sizeof(SAM_USER_FIXED_DATA));
+
         RegSetValueEx(hAccountKey,
                       L"Name",
                       0,
@@ -277,6 +291,8 @@ SampCreateDomain(IN HKEY hDomainsKey,
                  IN PSID lpDomainSid,
                  OUT PHKEY lpDomainKey)
 {
+    SAM_DOMAIN_FIXED_DATA FixedData;
+    LPWSTR lpEmptyString = L"";
     DWORD dwDisposition;
     HKEY hDomainKey = NULL;
     HKEY hAliasesKey = NULL;
@@ -287,6 +303,26 @@ SampCreateDomain(IN HKEY hDomainsKey,
     if (lpDomainKey != NULL)
         *lpDomainKey = NULL;
 
+    /* Initialize the fixed domain data */
+    memset(&FixedData, 0, sizeof(SAM_DOMAIN_FIXED_DATA));
+    FixedData.Version = 1;
+    NtQuerySystemTime(&FixedData.CreationTime);
+    FixedData.DomainModifiedCount.QuadPart = 0;
+//    FixedData.MaxPasswordAge                 // 6 Weeks
+    FixedData.MinPasswordAge.QuadPart = 0;     // Now
+//    FixedData.ForceLogoff
+//    FixedData.LockoutDuration                // 30 minutes
+//    FixedData.LockoutObservationWindow       // 30 minutes
+    FixedData.ModifiedCountAtLastPromotion.QuadPart = 0;
+    FixedData.NextRid = 1000;
+    FixedData.PasswordProperties = 0;
+    FixedData.MinPasswordLength = 0;
+    FixedData.PasswordHistoryLength = 0;
+    FixedData.LockoutThreshold = 0;
+    FixedData.DomainServerState = DomainServerEnabled;
+    FixedData.DomainServerRole = DomainServerRolePrimary;
+    FixedData.UasCompatibilityRequired = TRUE;
+
     if (RegCreateKeyExW(hDomainsKey,
                         lpKeyName,
                         0,
@@ -298,6 +334,15 @@ SampCreateDomain(IN HKEY hDomainsKey,
                         &dwDisposition))
         return FALSE;
 
+    /* Set the fixed data value */
+    if (RegSetValueEx(hDomainKey,
+                      L"F",
+                      0,
+                      REG_BINARY,
+                      (LPVOID)&FixedData,
+                      sizeof(SAM_DOMAIN_FIXED_DATA)))
+        return FALSE;
+
     if (lpDomainSid != NULL)
     {
         RegSetValueEx(hDomainKey,
@@ -315,6 +360,20 @@ SampCreateDomain(IN HKEY hDomainsKey,
                       RtlLengthSid(lpDomainSid));
     }
 
+    RegSetValueEx(hDomainKey,
+                  L"OemInformation",
+                  0,
+                  REG_SZ,
+                  (LPVOID)lpEmptyString,
+                  sizeof(WCHAR));
+
+    RegSetValueEx(hDomainKey,
+                  L"ReplicaSourceNodeName",
+                  0,
+                  REG_SZ,
+                  (LPVOID)lpEmptyString,
+                  sizeof(WCHAR));
+
     /* Create the Alias container */
     if (!RegCreateKeyExW(hDomainKey,
                          L"Aliases",
@@ -412,7 +471,7 @@ SampGetAccountDomainInfo(PPOLICY_ACCOUNT_DOMAIN_INFO *AccountDomainInfo)
 
     Status = LsaOpenPolicy(NULL,
                            &ObjectAttributes,
-                           POLICY_TRUST_ADMIN,
+                           POLICY_VIEW_LOCAL_INFORMATION,
                            &PolicyHandle);
     if (Status != STATUS_SUCCESS)
     {
@@ -507,22 +566,22 @@ SampInitializeSAM(VOID)
     {
         SampCreateAliasAccount(hDomainKey,
                                L"Administrators",
-                               L"",
+                               L"Testabc1234567890",
                                DOMAIN_ALIAS_RID_ADMINS);
 
         SampCreateAliasAccount(hDomainKey,
                                L"Users",
-                               L"",
+                               L"Users Group",
                                DOMAIN_ALIAS_RID_USERS);
 
         SampCreateAliasAccount(hDomainKey,
                                L"Guests",
-                               L"",
+                               L"Guests Group",
                                DOMAIN_ALIAS_RID_GUESTS);
 
         SampCreateAliasAccount(hDomainKey,
                                L"Power Users",
-                               L"",
+                               L"Power Users Group",
                                DOMAIN_ALIAS_RID_POWER_USERS);