Author: janderwald
Date: Wed Oct 22 06:37:33 2008
New Revision: 36892
URL:
http://svn.reactos.org/svn/reactos?rev=36892&view=rev
Log:
- Convert the string using the WideCharToMultiByte function and fix passed parameters
- Always zero-terminate the converted buffer
- Remove querying NameServer / DhcpNameServer under Parameters key because it is not used
and was not working
- Initialize PrivateNSEnum CurrentName member
- Make sure that only successfully converted NameServer get copied
Modified:
trunk/reactos/dll/win32/iphlpapi/resinfo_reactos.c
Modified: trunk/reactos/dll/win32/iphlpapi/resinfo_reactos.c
URL:
http://svn.reactos.org/svn/reactos/trunk/reactos/dll/win32/iphlpapi/resinfo…
==============================================================================
--- trunk/reactos/dll/win32/iphlpapi/resinfo_reactos.c [iso-8859-1] (original)
+++ trunk/reactos/dll/win32/iphlpapi/resinfo_reactos.c [iso-8859-1] Wed Oct 22 06:37:33
2008
@@ -181,12 +181,18 @@
PWCHAR Server,
PVOID _Data ) {
PNAME_SERVER_LIST_PRIVATE Data = (PNAME_SERVER_LIST_PRIVATE)_Data;
- RtlUnicodeToMultiByteN((PCHAR)&Data->AddrString[Data->CurrentName],
- sizeof(Data->AddrString[0]),
- NULL,
- Server,
- wcslen(Server));
- Data->CurrentName++;
+
+ if (WideCharToMultiByte(CP_ACP, 0, Server, -1,
+ Data->AddrString[Data->CurrentName].String,
+ 16, NULL, NULL))
+ {
+ Data->AddrString[Data->CurrentName].String[15] = '\0';
+ Data->CurrentName++;
+ }
+ else
+ {
+ Data->AddrString[Data->CurrentName].String[0] = '\0';
+ }
}
static void CreateNameServerListEnumIfFunc( HKEY RegHandle,
@@ -207,43 +213,19 @@
}
PIPHLP_RES_INFO getResInfo() {
- DWORD i, ServerCount, ExtraServer;
- HKEY hKey;
- LONG errCode;
- PWCHAR Str;
- IP_ADDR_STRING AddrString;
+ DWORD i, ServerCount;
NAME_SERVER_LIST_PRIVATE PrivateNSEnum = { 0 };
PIPHLP_RES_INFO ResInfo;
struct sockaddr_in *AddrList;
ServerCount = CountNameServers( &PrivateNSEnum );
-
- errCode = RegOpenKeyExA(HKEY_LOCAL_MACHINE,
- "SYSTEM\\CurrentControlSet\\Services\\Tcpip\\"
- "Parameters", 0, KEY_READ, &hKey);
- if (errCode != ERROR_SUCCESS) {
- RegCloseKey( hKey );
- return NULL;
- }
-
- Str = QueryRegistryValueString( hKey, L"NameServer" );
-
- /* If NameServer is empty */
- if (!Str || *Str == L'\0')
- {
- /* Then use DhcpNameServer */
- Str = QueryRegistryValueString( hKey, L"DhcpNameServer" );
- }
-
- ExtraServer = Str ? 1 : 0;
-
- ServerCount += ExtraServer;
PrivateNSEnum.NumServers = ServerCount;
PrivateNSEnum.AddrString =
(PIP_ADDRESS_STRING)
RtlAllocateHeap( GetProcessHeap(), 0,
ServerCount * sizeof(IP_ADDRESS_STRING) );
+ PrivateNSEnum.CurrentName = 0;
ResInfo =
(PIPHLP_RES_INFO)RtlAllocateHeap
@@ -253,7 +235,6 @@
if( !ResInfo ) {
RtlFreeHeap( GetProcessHeap(), 0, PrivateNSEnum.AddrString );
- RegCloseKey( hKey );
return NULL;
}
@@ -264,30 +245,15 @@
MakeNameServerList( &PrivateNSEnum );
- if( ExtraServer ) {
- ULONG ResultSize;
-
- for( ResultSize = 0; Str[ResultSize]; ResultSize++ )
- ((PCHAR)&AddrString)[ResultSize] = Str[ResultSize];
-
- ((PCHAR)&AddrString)[ResultSize] = 0;
- ResInfo->riAddressList[0].sin_family = AF_INET;
- ResInfo->riAddressList[0].sin_addr.s_addr =
- inet_addr( (PCHAR)&AddrString );
- ResInfo->riAddressList[0].sin_port = 0;
- ConsumeRegValueString( Str );
- }
-
- for( i = ExtraServer; i < ServerCount; i++ ) {
+ for( i = 0; i < PrivateNSEnum.CurrentName; i++ ) {
/* Hmm seems that dns servers are always AF_INET but ... */
ResInfo->riAddressList[i].sin_family = AF_INET;
ResInfo->riAddressList[i].sin_addr.s_addr =
- inet_addr( (PCHAR)&PrivateNSEnum.AddrString[i - ExtraServer] );
+ inet_addr(PrivateNSEnum.AddrString[i].String );
ResInfo->riAddressList[i].sin_port = 0;
}
RtlFreeHeap( GetProcessHeap(), 0, PrivateNSEnum.AddrString );
- RegCloseKey( hKey );
return ResInfo;
}