https://git.reactos.org/?p=reactos.git;a=commitdiff;h=77671f0337ee5bf25b2ffad367438157e47cec0f

commit 77671f0337ee5bf25b2ffad367438157e47cec0f
Author:     Doug-Lyons <dougly...@douglyons.com>
AuthorDate: Sat Jun 22 11:23:11 2019 -0500
Commit:     Hermès Bélusca-Maïto <hermes.belusca-ma...@reactos.org>
CommitDate: Mon Jul 22 00:49:47 2019 +0200

    [NETID][WINLOGON] Fix Computer Name Change to update Domain/Hostname on 
reboot. (#1684)
    CORE-16123
    
    - NETID: Correct the call when using the "Computer Name Change" in ReactOS.
    - WINLOGON: Update the volatile "Hostname" and "Domain" variables from
      their non-volatile counterparts.
    
    Co-authored-by: Hermès Bélusca-Maïto <hermes.belusca-ma...@reactos.org>
---
 base/system/winlogon/winlogon.c | 136 ++++++++++++++++++++++++++++++++++++++++
 dll/win32/netid/netid.c         |   4 +-
 2 files changed, 138 insertions(+), 2 deletions(-)

diff --git a/base/system/winlogon/winlogon.c b/base/system/winlogon/winlogon.c
index 68783c828b9..480272ac80a 100644
--- a/base/system/winlogon/winlogon.c
+++ b/base/system/winlogon/winlogon.c
@@ -147,6 +147,139 @@ WaitForLsass(VOID)
 }
 
 
+static
+VOID
+UpdateTcpIpInformation(VOID)
+{
+    LONG lError;
+    HKEY hKey = NULL;
+    DWORD dwType, dwSize;
+    PWSTR pszBuffer;
+    WCHAR szBuffer[128] = L"";
+
+    lError = RegOpenKeyExW(HKEY_LOCAL_MACHINE,
+                           
L"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters",
+                           0,
+                           KEY_QUERY_VALUE | KEY_SET_VALUE,
+                           &hKey);
+    if (lError != ERROR_SUCCESS)
+    {
+        ERR("WL: 
RegOpenKeyExW(\"HKLM\\System\\CurrentControlSet\\Services\\Tcpip\\Parameters\") 
failed (error %lu)\n", lError);
+        return;
+    }
+
+    /*
+     * Read the "NV Hostname" value and copy it into the "Hostname" value.
+     */
+
+    pszBuffer = szBuffer;
+    dwSize = ARRAYSIZE(szBuffer);
+
+    lError = RegQueryValueExW(hKey,
+                              L"NV Hostname",
+                              NULL,
+                              &dwType,
+                              (LPBYTE)pszBuffer,
+                              &dwSize);
+    if (((lError == ERROR_INSUFFICIENT_BUFFER) || (lError == ERROR_MORE_DATA)) 
&& (dwType == REG_SZ))
+    {
+        pszBuffer = HeapAlloc(GetProcessHeap(), 0, dwSize);
+        if (pszBuffer)
+        {
+            lError = RegQueryValueExW(hKey,
+                                      L"NV Hostname",
+                                      NULL,
+                                      &dwType,
+                                      (LPBYTE)pszBuffer,
+                                      &dwSize);
+        }
+        else
+        {
+            ERR("WL: Could not reallocate memory for pszBuffer\n");
+        }
+    }
+    if ((lError == ERROR_SUCCESS) && (dwType == REG_SZ))
+    {
+        TRACE("NV Hostname is '%S'.\n", pszBuffer);
+
+        lError = RegSetValueExW(hKey,
+                                L"Hostname",
+                                0,
+                                REG_SZ,
+                                (LPBYTE)pszBuffer,
+                                dwSize);
+        if (lError != ERROR_SUCCESS)
+            ERR("WL: RegSetValueExW(\"Hostname\") failed (error %lu)\n", 
lError);
+    }
+
+    /*
+     * Read the "NV Domain" value and copy it into the "Domain" value.
+     */
+
+    // pszBuffer = szBuffer;
+    // dwSize = ARRAYSIZE(szBuffer);
+
+    lError = RegQueryValueExW(hKey,
+                              L"NV Domain",
+                              NULL,
+                              &dwType,
+                              (LPBYTE)pszBuffer,
+                              &dwSize);
+    if (((lError == ERROR_INSUFFICIENT_BUFFER) || (lError == ERROR_MORE_DATA)) 
&& (dwType == REG_SZ))
+    {
+        if (pszBuffer != szBuffer)
+        {
+            PWSTR pszNewBuffer;
+            pszNewBuffer = HeapReAlloc(GetProcessHeap(), 0, pszBuffer, dwSize);
+            if (pszNewBuffer)
+            {
+                pszBuffer = pszNewBuffer;
+            }
+            else
+            {
+                HeapFree(GetProcessHeap(), 0, pszBuffer);
+                pszBuffer = NULL;
+            }
+        }
+        else
+        {
+            pszBuffer = HeapAlloc(GetProcessHeap(), 0, dwSize);
+        }
+        if (pszBuffer)
+        {
+            lError = RegQueryValueExW(hKey,
+                                      L"NV Domain",
+                                      NULL,
+                                      &dwType,
+                                      (LPBYTE)pszBuffer,
+                                      &dwSize);
+        }
+        else
+        {
+            ERR("WL: Could not reallocate memory for pszBuffer\n");
+        }
+    }
+    if ((lError == ERROR_SUCCESS) && (dwType == REG_SZ))
+    {
+        TRACE("NV Domain is '%S'.\n", pszBuffer);
+
+        lError = RegSetValueExW(hKey,
+                                L"Domain",
+                                0,
+                                REG_SZ,
+                                (LPBYTE)pszBuffer,
+                                dwSize);
+        if (lError != ERROR_SUCCESS)
+            ERR("WL: RegSetValueExW(\"Domain\") failed (error %lu)\n", lError);
+    }
+
+    if (pszBuffer != szBuffer)
+        HeapFree(GetProcessHeap(), 0, pszBuffer);
+
+    RegCloseKey(hKey);
+}
+
+
 static
 BOOL
 InitKeyboardLayouts(VOID)
@@ -322,6 +455,9 @@ WinMain(
     RtlSetProcessIsCritical(TRUE, NULL, FALSE);
     RtlSetThreadIsCritical(TRUE, NULL, FALSE);
 
+    /* Update the cached TCP/IP Information in the registry */
+    UpdateTcpIpInformation();
+
     if (!RegisterLogonProcess(GetCurrentProcessId(), TRUE))
     {
         ERR("WL: Could not register logon process\n");
diff --git a/dll/win32/netid/netid.c b/dll/win32/netid/netid.c
index bcc9ce80c8f..a9e30b01bbf 100644
--- a/dll/win32/netid/netid.c
+++ b/dll/win32/netid/netid.c
@@ -232,7 +232,7 @@ NetworkPropDlgProc(HWND hDlg, UINT Msg, WPARAM wParam, 
LPARAM lParam)
                                     SetFocus(GetDlgItem(hDlg, 1002));
                                     break;
                                 }
-                                else if (!SetComputerName(NewComputerName))
+                                else if 
(!SetComputerNameExW(ComputerNamePhysicalDnsHostname, NewComputerName))
                                 {
                                     TCHAR szMsgText[MAX_PATH];
 
@@ -308,7 +308,7 @@ NetIDPage_OnInitDialog(
         RegCloseKey(KeyHandle);
     }
 
-    if (GetComputerName(ComputerName,&Size))
+    if (GetComputerName(ComputerName, &Size))
     {
         SetDlgItemText(hwndDlg, IDC_COMPUTERNAME, ComputerName);
     }

Reply via email to