c++ - 如何通过 DhcpSAPI 启用 DHCP 子网

标签 c++ visual-c++ winapi dhcp

我正在编写一个模块来管理与该模块所在的服务位于同一位置的 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/

相关文章:

c++ - iostream 的二进制版本

c++ - 如何将两个 double 据类型元素转换为一个点数据类型

c++ - 二分匹配

visual-c++ - 当消耗数GB的内存时,vc++ 64位程序在新的运算符上崩溃

c++ - 计算未返回正确的值

c# - C# 新手-想添加 WndProc

c++ - C++ EXE 的计划任务不起作用

c++ - 为什么不能重载三元运算符?

visual-studio-2008 - 带有 Visual C++ Express 版本的 GUI 应用程序

c++ - 提高或降低串行端口上的 RTS (C++)