Я пишу модуль для управления сервером DHCP, совместно расположенный с сервисом, в котором существует этот модуль.Как включить подсеть DHCP через DhcpSAPI
У меня есть код на месте, используя DHCP Server API, который может создать подсеть и добавить резервирование DHCP. То, что я, похоже, не в состоянии сделать, это включить/активировать область подсети.
Я предполагал, что DhcpSetSubnetInfo()
бы сделать работу с SubnetState
полем DHCP_SUBNET_INFO
структуры, чтобы DhcpSubnetEnabled
однако это, кажется, не имеет никакого эффекта.
Сканирование через остальную часть API-интерфейса DHCP-сервера Я не вижу других способов настройки подсетей/областей.
Неужели кому-то это удалось?
Благодарим за помощь.
Ник.
Edit:
static bool enableSubnet(
const std::wstring& server,
DWORD dwSubnet
)
{
LPDHCP_SUBNET_INFO pInfo = NULL;
DWORD res = DhcpGetSubnetInfo(
server.c_str(),
dwSubnet,
&pInfo
);
if (res != ERROR_SUCCESS)
{
DhcpRpcFreeMemory(pInfo);
return false;
}
if (pInfo->SubnetState == DhcpSubnetEnabled)
{
DhcpRpcFreeMemory(pInfo);
return true;
}
DHCP_SUBNET_INFO info(*pInfo);
info.SubnetState = DhcpSubnetDisabled;
res = DhcpCreateSubnet(server.c_str(), dwSubnet, &info);
DhcpRpcFreeMemory(pInfo);
if (res != ERROR_SUCCESS)
{
return false;
}
res = DhcpGetSubnetInfo(
server.c_str(),
dwSubnet,
&pInfo
);
if (res != ERROR_SUCCESS)
{
DhcpRpcFreeMemory(pInfo);
return false;
}
bool retVal = (pInfo->SubnetState == DhcpSubnetEnabled);
if (!retVal)
{
std::wcerr << L"Failed to enable subnet";
}
DhcpRpcFreeMemory(pInfo);
return retVal;
}
отладки кода, все функции DhcpXX проходят, но функция возвращает ложь при проверке:
bool retVal = (pInfo->SubnetState == DhcpSubnetEnabled);
Эй, Стив, я отредактировал исходное сообщение, чтобы включить код. Если, подсеть не существует первоначально, то она будет разрешена. Я также попытался использовать DhcpSetSubnetInfo() в существующей подсети. Все еще не удалось включить его ... Мне интересно, просто ли это невозможно! – Nick