mirror of
https://github.com/reactos/reactos.git
synced 2025-08-06 07:23:13 +00:00
[IPHLPAPI] Retrieve DHCP information from the registry
This commit is contained in:
parent
fa7890f39d
commit
3fe4b41f20
3 changed files with 88 additions and 37 deletions
|
@ -8,35 +8,94 @@
|
|||
|
||||
#include "iphlpapi_private.h"
|
||||
|
||||
DWORD APIENTRY DhcpRosGetAdapterInfo(DWORD AdapterIndex,
|
||||
PBOOL DhcpEnabled,
|
||||
PDWORD DhcpServer,
|
||||
time_t *LeaseObtained,
|
||||
time_t *LeaseExpires);
|
||||
|
||||
DWORD getDhcpInfoForAdapter(DWORD AdapterIndex,
|
||||
PBOOL DhcpEnabled,
|
||||
PDWORD DhcpServer,
|
||||
time_t *LeaseObtained,
|
||||
time_t *LeaseExpires)
|
||||
DWORD
|
||||
getDhcpInfoForAdapter(
|
||||
DWORD AdapterIndex,
|
||||
PIP_ADAPTER_INFO ptr)
|
||||
{
|
||||
DWORD Status, Version = 0;
|
||||
const char *ifname = NULL;
|
||||
HKEY hKeyInterfaces = NULL, hKeyInterface = NULL;
|
||||
DWORD dwValue, dwSize, dwType;
|
||||
DWORD ret = ERROR_SUCCESS;
|
||||
|
||||
Status = DhcpCApiInitialize(&Version);
|
||||
if (Status != ERROR_SUCCESS)
|
||||
ptr->DhcpEnabled = 0;
|
||||
ptr->LeaseObtained = 0;
|
||||
ptr->LeaseExpires = 0;
|
||||
strcpy(ptr->DhcpServer.IpAddress.String, "");
|
||||
|
||||
ifname = getInterfaceNameByIndex(AdapterIndex);
|
||||
if (!ifname)
|
||||
return ERROR_OUTOFMEMORY;
|
||||
|
||||
ret = RegOpenKeyExW(HKEY_LOCAL_MACHINE,
|
||||
L"SYSTEM\\CurrentControlSet\\Services\\Tcpip\\Parameters\\Interfaces",
|
||||
0,
|
||||
KEY_READ,
|
||||
&hKeyInterfaces);
|
||||
if (ret != ERROR_SUCCESS)
|
||||
goto done;
|
||||
|
||||
ret = RegOpenKeyExA(hKeyInterfaces,
|
||||
ifname,
|
||||
0,
|
||||
KEY_READ,
|
||||
&hKeyInterface);
|
||||
if (ret != ERROR_SUCCESS)
|
||||
goto done;
|
||||
|
||||
dwSize = sizeof(ptr->DhcpEnabled);
|
||||
ret = RegQueryValueExW(hKeyInterface,
|
||||
L"EnableDHCP",
|
||||
NULL,
|
||||
&dwType,
|
||||
(PBYTE)&ptr->DhcpEnabled,
|
||||
&dwSize);
|
||||
if (ret != ERROR_SUCCESS)
|
||||
ptr->DhcpEnabled = 0;
|
||||
|
||||
if (ptr->DhcpEnabled != 0)
|
||||
{
|
||||
/* We assume that the DHCP service isn't running yet */
|
||||
*DhcpEnabled = FALSE;
|
||||
*DhcpServer = htonl(INADDR_NONE);
|
||||
*LeaseObtained = 0;
|
||||
*LeaseExpires = 0;
|
||||
return ERROR_SUCCESS;
|
||||
dwSize = sizeof(ptr->LeaseObtained);
|
||||
ret = RegQueryValueExW(hKeyInterface,
|
||||
L"LeaseObtainedTime",
|
||||
NULL,
|
||||
&dwType,
|
||||
(PBYTE)&dwValue,
|
||||
&dwSize);
|
||||
if (ret == ERROR_SUCCESS)
|
||||
ptr->LeaseObtained = (time_t)dwValue;
|
||||
|
||||
dwSize = sizeof(dwValue);
|
||||
ret = RegQueryValueExW(hKeyInterface,
|
||||
L"LeaseTerminatesTime",
|
||||
NULL,
|
||||
&dwType,
|
||||
(PBYTE)&dwValue,
|
||||
&dwSize);
|
||||
if (ret == ERROR_SUCCESS)
|
||||
ptr->LeaseExpires = (time_t)dwValue;
|
||||
|
||||
dwSize = sizeof(ptr->DhcpServer.IpAddress.String);
|
||||
ret = RegQueryValueExA(hKeyInterface,
|
||||
"DhcpServer",
|
||||
NULL,
|
||||
&dwType,
|
||||
(PBYTE)&ptr->DhcpServer.IpAddress.String,
|
||||
&dwSize);
|
||||
if (ret != ERROR_SUCCESS)
|
||||
strcpy(ptr->DhcpServer.IpAddress.String, "");
|
||||
}
|
||||
ret = ERROR_SUCCESS;
|
||||
|
||||
Status = DhcpRosGetAdapterInfo(AdapterIndex, DhcpEnabled, DhcpServer,
|
||||
LeaseObtained, LeaseExpires);
|
||||
done:
|
||||
if (hKeyInterface)
|
||||
RegCloseKey(hKeyInterface);
|
||||
|
||||
DhcpCApiCleanup();
|
||||
if (hKeyInterfaces)
|
||||
RegCloseKey(hKeyInterfaces);
|
||||
|
||||
return Status;
|
||||
if (ifname)
|
||||
consumeInterfaceName(ifname);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue