- Fix epic naming fail (DhcpEnabled -> EnableDHCP

[DHCPCSVC]: Verify that the length is correct
[TCPIP]: Make sure DHCP is enabled before reading IP information

svn path=/trunk/; revision=48221
This commit is contained in:
Cameron Gutman
2010-07-24 00:25:59 +00:00
parent 66b4c2ff3e
commit 869cdbce37
3 changed files with 74 additions and 59 deletions
+3 -3
View File
@@ -147,7 +147,7 @@ cleanup:
BOOL PrepareAdapterForService( PDHCP_ADAPTER Adapter ) {
HKEY AdapterKey;
DWORD Error = ERROR_SUCCESS, DhcpEnabled;
DWORD Error = ERROR_SUCCESS, DhcpEnabled, Length;
Adapter->DhclientState.config = &Adapter->DhclientConfig;
strncpy(Adapter->DhclientInfo.name, (char*)Adapter->IfMib.bDescr,
@@ -156,9 +156,9 @@ BOOL PrepareAdapterForService( PDHCP_ADAPTER Adapter ) {
AdapterKey = FindAdapterKey( Adapter );
if( AdapterKey )
{
Error = RegQueryValueEx(AdapterKey, "DhcpEnabled", NULL, NULL, (LPBYTE)&DhcpEnabled, NULL);
Error = RegQueryValueEx(AdapterKey, "EnableDHCP", NULL, NULL, (LPBYTE)&DhcpEnabled, &Length);
if (Error != ERROR_SUCCESS)
if (Error != ERROR_SUCCESS || Length != sizeof(DWORD))
DhcpEnabled = 1;
CloseHandle(AdapterKey);
+1 -1
View File
@@ -423,7 +423,7 @@ InstallNetDevice(
goto cleanup;
}
dwValue = 1;
rc = RegSetValueExW(hKey, L"DhcpEnabled", 0, REG_DWORD, (const BYTE*)&dwValue, sizeof(DWORD));
rc = RegSetValueExW(hKey, L"EnableDHCP", 0, REG_DWORD, (const BYTE*)&dwValue, sizeof(DWORD));
if (rc != ERROR_SUCCESS)
{
DPRINT("RegSetValueExW() failed with error 0x%lx\n", rc);
+70 -55
View File
@@ -955,6 +955,7 @@ BOOLEAN BindAdapter(
UNICODE_STRING IPAddress = RTL_CONSTANT_STRING(L"IPAddress");
UNICODE_STRING Netmask = RTL_CONSTANT_STRING(L"SubnetMask");
UNICODE_STRING Gateway = RTL_CONSTANT_STRING(L"DefaultGateway");
UNICODE_STRING EnableDhcp = RTL_CONSTANT_STRING(L"EnableDHCP");
UNICODE_STRING RegistryDataU;
ANSI_STRING RegistryDataA;
@@ -1033,77 +1034,91 @@ BOOLEAN BindAdapter(
return FALSE;
}
RegistryDataU.MaximumLength = 16 + sizeof(WCHAR);
RegistryDataU.Buffer = (PWCHAR)KeyValueInfo->Data;
Status = ZwQueryValueKey(ParameterHandle,
&IPAddress,
&EnableDhcp,
KeyValuePartialInformation,
KeyValueInfo,
sizeof(KEY_VALUE_PARTIAL_INFORMATION) + 16 * sizeof(WCHAR),
sizeof(KEY_VALUE_PARTIAL_INFORMATION) + sizeof(ULONG),
&Unused);
if (NT_SUCCESS(Status))
if (NT_SUCCESS(Status) && KeyValueInfo->DataLength == sizeof(ULONG) && (*(PULONG)KeyValueInfo->Data) != 0)
{
RegistryDataU.Length = KeyValueInfo->DataLength;
RegistryDataU.MaximumLength = 16 + sizeof(WCHAR);
RegistryDataU.Buffer = (PWCHAR)KeyValueInfo->Data;
RtlUnicodeStringToAnsiString(&RegistryDataA,
&RegistryDataU,
TRUE);
Status = ZwQueryValueKey(ParameterHandle,
&IPAddress,
KeyValuePartialInformation,
KeyValueInfo,
sizeof(KEY_VALUE_PARTIAL_INFORMATION) + 16 * sizeof(WCHAR),
&Unused);
if (NT_SUCCESS(Status))
{
RegistryDataU.Length = KeyValueInfo->DataLength;
AddrInitIPv4(&IF->Unicast, inet_addr(RegistryDataA.Buffer));
RtlUnicodeStringToAnsiString(&RegistryDataA,
&RegistryDataU,
TRUE);
RtlFreeAnsiString(&RegistryDataA);
AddrInitIPv4(&IF->Unicast, inet_addr(RegistryDataA.Buffer));
RtlFreeAnsiString(&RegistryDataA);
}
else
{
IF->Unicast = DefaultMask;
}
Status = ZwQueryValueKey(ParameterHandle,
&Netmask,
KeyValuePartialInformation,
KeyValueInfo,
sizeof(KEY_VALUE_PARTIAL_INFORMATION) + 16 * sizeof(WCHAR),
&Unused);
if (NT_SUCCESS(Status))
{
RegistryDataU.Length = KeyValueInfo->DataLength;
RtlUnicodeStringToAnsiString(&RegistryDataA,
&RegistryDataU,
TRUE);
AddrInitIPv4(&IF->Netmask, inet_addr(RegistryDataA.Buffer));
RtlFreeAnsiString(&RegistryDataA);
}
else
{
IF->Netmask = DefaultMask;
}
Status = ZwQueryValueKey(ParameterHandle,
&Gateway,
KeyValuePartialInformation,
KeyValueInfo,
sizeof(KEY_VALUE_PARTIAL_INFORMATION) + 16 * sizeof(WCHAR),
&Unused);
if (NT_SUCCESS(Status))
{
RegistryDataU.Length = KeyValueInfo->DataLength;
RtlUnicodeStringToAnsiString(&RegistryDataA,
&RegistryDataU,
TRUE);
AddrInitIPv4(&Router, inet_addr(RegistryDataA.Buffer));
RtlFreeAnsiString(&RegistryDataA);
if (!AddrIsUnspecified(&Router)) RouterCreateRoute(&DefaultMask, &DefaultMask, &Router, IF, 1);
}
}
else
{
IF->Unicast = DefaultMask;
}
Status = ZwQueryValueKey(ParameterHandle,
&Netmask,
KeyValuePartialInformation,
KeyValueInfo,
sizeof(KEY_VALUE_PARTIAL_INFORMATION) + 16 * sizeof(WCHAR),
&Unused);
if (NT_SUCCESS(Status))
{
RegistryDataU.Length = KeyValueInfo->DataLength;
RtlUnicodeStringToAnsiString(&RegistryDataA,
&RegistryDataU,
TRUE);
AddrInitIPv4(&IF->Netmask, inet_addr(RegistryDataA.Buffer));
RtlFreeAnsiString(&RegistryDataA);
}
else
{
IF->Netmask = DefaultMask;
}
Status = ZwQueryValueKey(ParameterHandle,
&Gateway,
KeyValuePartialInformation,
KeyValueInfo,
sizeof(KEY_VALUE_PARTIAL_INFORMATION) + 16 * sizeof(WCHAR),
&Unused);
if (NT_SUCCESS(Status))
{
RegistryDataU.Length = KeyValueInfo->DataLength;
RtlUnicodeStringToAnsiString(&RegistryDataA,
&RegistryDataU,
TRUE);
AddrInitIPv4(&Router, inet_addr(RegistryDataA.Buffer));
RtlFreeAnsiString(&RegistryDataA);
if (!AddrIsUnspecified(&Router)) RouterCreateRoute(&DefaultMask, &DefaultMask, &Router, IF, 1);
}
ZwClose(ParameterHandle);
}