Author: akhaldi
Date: Thu Sep 29 10:49:30 2016
New Revision: 72851
URL:
http://svn.reactos.org/svn/reactos?rev=72851&view=rev
Log:
[IPHLPAPI][KERNEL32] Revert r72722 and apply a proper fix based on tests. By Peter Hater.
CORE-10440 ROSTESTS-243
Modified:
trunk/reactos/dll/win32/iphlpapi/iphlpapi_main.c
trunk/reactos/dll/win32/kernel32/client/compname.c
Modified: trunk/reactos/dll/win32/iphlpapi/iphlpapi_main.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/iphlpapi/iphlpap…
==============================================================================
--- trunk/reactos/dll/win32/iphlpapi/iphlpapi_main.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/iphlpapi/iphlpapi_main.c [iso-8859-1] Thu Sep 29 10:49:30
2016
@@ -1404,7 +1404,7 @@
*/
DWORD WINAPI GetNetworkParams(PFIXED_INFO pFixedInfo, PULONG pOutBufLen)
{
- DWORD ret, size;
+ DWORD ret, size, type;
LONG regReturn;
HKEY hKey;
PIPHLP_RES_INFO resInfo;
@@ -1426,10 +1426,59 @@
}
memset(pFixedInfo, 0, size);
- size = sizeof(pFixedInfo->HostName);
- GetComputerNameExA(ComputerNameDnsHostname, pFixedInfo->HostName, &size);
- size = sizeof(pFixedInfo->DomainName);
- GetComputerNameExA(ComputerNameDnsDomain, pFixedInfo->DomainName, &size);
+ /* Check for DhcpHostname and DhcpDomain first */
+ regReturn = RegOpenKeyExA(HKEY_LOCAL_MACHINE,
+
"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters",
+ 0,
+ KEY_READ,
+ &hKey);
+ if (regReturn == ERROR_SUCCESS) {
+ /* Windows doesn't honor DHCP option 12 even if RFC requires it if it is
returned by DHCP server! */
+#if 0
+ type = REG_SZ;
+ size = sizeof(pFixedInfo->HostName);
+ regReturn = RegQueryValueExA(hKey,
+ "DhcpHostname",
+ NULL,
+ &type,
+ (LPBYTE)pFixedInfo->HostName,
+ &size);
+ if (regReturn == ERROR_FILE_NOT_FOUND || (regReturn == ERROR_SUCCESS &&
size < 1))
+ {
+#endif
+ type = REG_SZ;
+ size = sizeof(pFixedInfo->HostName);
+ regReturn = RegQueryValueExA(hKey,
+ "Hostname",
+ NULL,
+ &type,
+ (LPBYTE)pFixedInfo->HostName,
+ &size);
+#if 0
+ }
+#endif
+
+ type = REG_SZ;
+ size = sizeof(pFixedInfo->DomainName);
+ regReturn = RegQueryValueExA(hKey,
+ "DhcpDomain",
+ NULL,
+ &type,
+ (LPBYTE)pFixedInfo->DomainName,
+ &size);
+ if (regReturn == ERROR_FILE_NOT_FOUND || (regReturn == ERROR_SUCCESS &&
size < 1))
+ {
+ type = REG_SZ;
+ size = sizeof(pFixedInfo->DomainName);
+ regReturn = RegQueryValueExA(hKey,
+ "Domain",
+ NULL,
+ &type,
+ (LPBYTE)pFixedInfo->DomainName,
+ &size);
+ }
+ RegCloseKey(hKey);
+ }
TRACE("GetComputerNameExA: %s\n", pFixedInfo->DomainName);
Modified: trunk/reactos/dll/win32/kernel32/client/compname.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/kernel32/client/…
==============================================================================
--- trunk/reactos/dll/win32/kernel32/client/compname.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/kernel32/client/compname.c [iso-8859-1] Thu Sep 29 10:49:30
2016
@@ -137,7 +137,6 @@
NTSTATUS Status;
BOOL ret = TRUE;
DWORD HostSize;
- DWORD nBufferSize;
if ((nSize == NULL) ||
(lpBuffer == NULL && *nSize > 0))
@@ -156,27 +155,11 @@
nSize);
case ComputerNameDnsDomain:
- /* Save original buffer size for the second call if neccessery */
- nBufferSize = *nSize;
- if
(!GetComputerNameFromRegistry(L"\\Registry\\Machine\\System\\CurrentControlSet"
- L"\\Services\\Tcpip\\Parameters",
- L"DhcpDomain",
- lpBuffer,
- nSize))
- {
- /* The value is there, just the buffer is insufficient in length */
- if (GetLastError() == ERROR_MORE_DATA)
- return FALSE;
- /* Restore original buffer size for the second call */
- *nSize = nBufferSize;
- return
GetComputerNameFromRegistry(L"\\Registry\\Machine\\System\\CurrentControlSet"
-
L"\\Services\\Tcpip\\Parameters",
- L"Domain",
- lpBuffer,
- nSize);
- }
- else
- return TRUE;
+ return
GetComputerNameFromRegistry(L"\\Registry\\Machine\\System\\CurrentControlSet"
+
L"\\Services\\Tcpip\\Parameters",
+ L"Domain",
+ lpBuffer,
+ nSize);
case ComputerNameDnsFullyQualified:
ResultString.Length = 0;
@@ -212,7 +195,7 @@
RtlFreeUnicodeString(&DomainPart);
RtlInitUnicodeString(&DomainPart, NULL);
- QueryTable[0].Name = L"DhcpDomain";
+ QueryTable[0].Name = L"Domain";
QueryTable[0].Flags = RTL_QUERY_REGISTRY_DIRECT;
QueryTable[0].EntryContext = &DomainPart;
@@ -224,9 +207,7 @@
NULL,
NULL);
- if ((NT_SUCCESS(Status)) &&
- (DomainPart.Buffer != NULL) &&
- (wcslen(DomainPart.Buffer) > 0))
+ if (NT_SUCCESS(Status))
{
Status = RtlAppendUnicodeStringToString(&ResultString,
&DomainPart);
if ((!NT_SUCCESS(Status)) || (!ret))
@@ -240,36 +221,6 @@
*nSize = ResultString.Length / sizeof(WCHAR) - 1;
return TRUE;
}
- else
- {
- RtlInitUnicodeString(&DomainPart, NULL);
- QueryTable[0].Name = L"Domain";
- QueryTable[0].Flags = RTL_QUERY_REGISTRY_DIRECT;
- QueryTable[0].EntryContext = &DomainPart;
-
- Status = RtlQueryRegistryValues(RTL_REGISTRY_ABSOLUTE,
-
L"\\Registry\\Machine\\System"
-
L"\\CurrentControlSet\\Services\\Tcpip"
- L"\\Parameters",
- QueryTable,
- NULL,
- NULL);
-
- if (NT_SUCCESS(Status))
- {
- Status = RtlAppendUnicodeStringToString(&ResultString,
&DomainPart);
- if ((!NT_SUCCESS(Status)) || (!ret))
- {
- *nSize = HostSize + DomainPart.Length;
- SetLastError(ERROR_MORE_DATA);
- RtlFreeUnicodeString(&DomainPart);
- return FALSE;
- }
- RtlFreeUnicodeString(&DomainPart);
- *nSize = ResultString.Length / sizeof(WCHAR) - 1;
- return TRUE;
- }
- }
}
return FALSE;
@@ -281,9 +232,11 @@
nSize);
case ComputerNamePhysicalDnsDomain:
- return GetComputerNameExW(ComputerNameDnsDomain,
- lpBuffer,
- nSize);
+ return
GetComputerNameFromRegistry(L"\\Registry\\Machine\\System\\CurrentControlSet"
+
L"\\Services\\Tcpip\\Parameters",
+ L"Domain",
+ lpBuffer,
+ nSize);
/* XXX Redo these */
case ComputerNamePhysicalDnsFullyQualified: