Я пишу модуль для управления сервером DHCP, размещенным совместно со службой, в которой этот модуль существует.
У меня есть код, использующий API DHCP-сервера , который может создать подсеть и добавить резервирование 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 проходят, но функция возвращает false при проверке:
bool retVal = ( pInfo->SubnetState == DhcpSubnetEnabled );