我正在编写一个模块来管理与该模块所在的服务位于同一位置的 DHCP 服务器。
我有使用 DHCP Server API 的代码它能够创建子网并添加 DHCP 保留。我似乎无法做的实际上是启用/激活子网范围。
我假设 DhcpSetSubnetInfo( )
会通过将 DHCP_SUBNET_INFO
结构的 SubnetState
字段设置为 DhcpSubnetEnabled< 来完成这项工作
然而这似乎没有效果。
扫描 DHCP 服务器 API 的其余部分,我看不到任何其他配置子网/范围的方法。
有没有人设法做到这一点?
感谢您的帮助。
尼克。
编辑:
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 );
最佳答案
您是否尝试过使用如上所述设置的 DhcpSubnetEnabled
标志调用 DhcpCreateSubnet
?可能您的代码已经这样做了 - 发布未能创建和启用子网的部分。
确保您也检查所有 Windows API 调用是否有错误。同样,一些代码将有助于确定可能失败的原因。
关于c++ - 如何通过 DhcpSAPI 启用 DHCP 子网,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4245783/