#pragma once #include "sccsdk.h" #ifdef __cplusplus // If used by C++ code, extern "C" { // we need to export the C interface #endif /** * @brief 根据网卡 IP地址 获取网卡索引 * @param[in] pIpAddr 网卡IP地址 * @param[out] pIfIndex 网卡索引编号 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_MALLOC_MEMORY 分配内存失败 * - -ERR_ITEM_UNEXISTS 找不到合适的网卡 * - -ERR_UN_SUPPORT 系统不支持该操作 * - ERR_SUCCESS 成功 */ int GetInterfaceIfIndexByIpAddr(const TCHAR *pIpAddr, ULONG *pIfIndex); /** * @brief 根据网卡 GUDI 获取网卡名称 * @param[in] pGUID 网卡 GUID * @param[out] ifName 网卡名称 * @param[out] pConnStatus 网卡连接状态 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_MALLOC_MEMORY 分配内存失败 * - -ERR_CREATE_COMMOBJECT 创建 COM 对象失败 * - -ERR_SYS_CALL 调用 COM 接口失败 * - -ERR_ITEM_UNEXISTS GUID 不存在 * - ERR_SUCCESS 成功 */ int GetInterfaceNameByGUID(const TCHAR *pGUID, TCHAR ifName[MAX_NETCARD_NAME], int* pConnStatus); /** * @brief 根据网卡名获取网卡索引 * @param[in] pInterfaceName 网卡名称 * @param[out] pIfIndex 网卡 Index * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_ITEM_UNEXISTS 网卡不存在 * - -ERR_SYS_CALL 获取操作系统网卡适配器失败 * - -ERR_MALLOC_MEMORY 分配内存失败 * - ERR_SUCCESS 成功 */ int GetInterfaceIfIndexByName(const TCHAR *pInterfaceName, int *pIfIndex); /** * @brief 根据网卡名获取网卡 GUID * @param[in] ifIndex 网卡索引 * @param[out] pGuid 网卡 GUID * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_ITEM_UNEXISTS 网卡不存在 * - -ERR_MEMORY_STR 字符串转 GUID 结构体失败 * - -ERR_MALLOC_MEMORY 分配内存失败 * - ERR_SUCCESS 成功 */ int GetInterfaceGUIDByIfIndex(const int ifIndex, GUID *pGuid); /** * @brief 根据网卡名获取网卡 GUID * @param[in] pInterfaceName 网卡名称 * @param[out] pGuid 网卡 GUID * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_ITEM_UNEXISTS 网卡不存在 * - -ERR_MEMORY_STR 字符串转 GUID 结构体失败 * - -ERR_MALLOC_MEMORY 分配内存失败 * - ERR_SUCCESS 成功 */ int GetInterfaceGUIDByName(const TCHAR *pInterfaceName, GUID *pGuid); int WaitNetAdapterConnected(const TCHAR *pInterfaceName, int timeOutOfMs); /** * @brief 获取网卡 NetworkCategory 是否设置为 Private 模式 * @param[in] pInterfaceName 网卡名称 * @param[out] pIsPrivate 网卡属性 * - TRUE Private 模式 * - FALSE Public 模式 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_CREATE_COMMOBJECT 创建 COM 对象失败 * - -ERR_SYS_CALL 调用 COM 接口失败 * - -ERR_ITEM_UNEXISTS 当前网络接口不存在不存在 * - -ERR_MEMORY_STR 字符集转换失败 * - ERR_SUCCESS 成功 */ int GetNetConnectionNetworkCategory(const TCHAR *pInterfaceName, bool *pIsPrivate); /** * @brief 启动/停止 Windows 网络共享服务 * @param[in] ifIndex 网卡索引 * @param[in] isEnable 启动/停止 Windows 网络共享服务 * - TRUE 启动服务 * - FALSE 停止服务 * @param[in] isSetPrivate 共享连接属性 * -TRUE 私有连接 * -FALSE 公共连接 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_CREATE_COMMOBJECT 创建 COM 对象失败 * - -ERR_SYS_CALL 调用 COM 接口失败 * - -ERR_ITEM_UNEXISTS GUID 不存在 * - -ERR_NET_UNCONNECT 网络未连接 * - ERR_SUCCESS 成功 */ int SetNetIntelnetConnectionSharing(int ifIndex, bool isEnable, bool isSetPrivate); /** * @brief 获取当前网络共享服务状态 * @param[in] ifIndex 网卡名称索引 * @param[out] pIsEnable 当前网络共享服务状态 * - TRUE 启动 * - FALSE 停止 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_CREATE_COMMOBJECT 创建 COM 对象失败 * - -ERR_SYS_CALL 调用 COM 接口失败 * - -ERR_ITEM_UNEXISTS GUID 不存在 * - -ERR_NET_UNCONNECT 网络未连接 * - -ERR_CALL_COMMOBJECT 获取网络共享状态失败 * - ERR_SUCCESS 成功 */ int GetNetIntelnetConnectionSharing(int ifIndex, bool *pIsEnable); /** * @brief 设置网卡为 Private/Public 模式 * @param[in] pInterfaceName pInterfaceName 网卡名称 * @param[in] isPrivate 网卡 Category 模式 * - TRUE Private 模式 * - FALSE Public 模式 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_MEMORY_STR 字符串处理 * - -ERR_CALL_SHELL 调用系统命令行失败 * - -ERR_PROCESS_RETURN 系统调用执行结束返回失败 * - ERR_SUCCESS 成功 */ int SetNetConnectionNetworkCategory(const TCHAR *pInterfaceName, const bool isPrivate); /** * @brief 添加系统路由表项 * @param[in] pIP 目的 IP 地址 * @param[in] pMask 目的子网掩码 * @param[in] pGateway 路由网关 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_UN_SUPPORT IP地址转网络字节序网络地址失败 * - -ERR_NET_ADD_ROUTE 添加路由表项失败 * - -ERR_NET_REMOVE_ROUTE 删除路由表项失败 * - ERR_SUCCESS 成功 */ int AddRouteTable(const char *pIP, const char *pMask, const char *pGateway); /** * @brief 开启 Windows WireGuard NAT 转发功能 * @param[in] pInterfaceName 网卡名称 * @param[in] pCidrIpaddr CIDR 网络接口地址 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_MEMORY_STR 字符串处理 * - -ERR_CALL_SHELL 调用系统命令行失败 * - -ERR_PROCESS_RETURN 系统调用执行结束返回失败 * - ERR_SUCCESS 成功 */ int SetNATRule(const TCHAR *pInterfaceName, const TCHAR *pCidrIpaddr); /** * @brief 关闭 Windows WireGuard NAT 转发功能 * @param pInterfaceName 网卡名称 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_MEMORY_STR 字符串处理 * - -ERR_CALL_SHELL 调用系统命令行失败 * - -ERR_PROCESS_RETURN 系统调用执行结束返回失败 * - ERR_SUCCESS 成功 */ int RemoveNATRule(const TCHAR *pInterfaceName); #if 0 /** * @brief 设置网络接口IP地址 * @param[in] pInterfaceName 网卡名称 * @param[in] pIpaddr IP 地址 * @param[in] pNetmask 子网掩码 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_MALLOC_MEMORY 分配内存失败 * - -ERR_MEMORY_STR 字符串处理 * - -ERR_CALL_SHELL 调用系统命令行失败 * - ERR_SUCCESS 成功 */ int SetInterfaceIpAddress(const TCHAR *pInterfaceName, const TCHAR *pIpaddr, const TCHAR *pNetmask); /** * @brief 获取Windows Hyper-V 虚拟机状态, 必须开启后才能开启NAT转发功能 * @param[out] pEnabled 当前 Hyper-V 虚拟机状态, TRUE 表示开启, FALSE 表示关闭 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_MEMORY_STR 字符串处理 * - -ERR_CALL_SHELL 调用系统命令行失败 * - ERR_SUCCESS 成功 */ int GetWindowsHyperVStatus(int *pEnabled); /** * @brief 启用/禁用 Windows Hyper-V 功能 * @param[in] enabled TRUE 启用, FALSE 关闭 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_MEMORY_STR 字符串处理 * - -ERR_CALL_SHELL 调用系统命令行失败 * - -ERR_PROCESS_RETURN 系统调用执行结束返回失败 * - ERR_SUCCESS 成功 */ int EnableWindowsHyperV(bool enabled); /** * @brief 设置网卡为 Private/Public 模式 * @param[in] pInterfaceName 网卡名称 * @param[in] isPrivate * - TRUE Private 模式 * - FALSE Public 模式 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_MEMORY_STR 字符串处理 * - -ERR_CALL_SHELL 调用系统命令行失败 * - -ERR_PROCESS_RETURN 系统调用执行结束返回失败 * - ERR_SUCCESS 成功 */ int SetInterfacePrivate(const TCHAR *pInterfaceName, bool isPrivate); /** * @brief 获取网卡 NetworkCategory 是否设置为 Private 模式 * @param[in] pInterfaceName 网卡名称 * @param[out] pIsPrivateMode 网卡属性 * - TRUE Private 模式 * - FALSE Public 模式 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_MEMORY_STR 字符串处理 * - -ERR_ITEM_UNEXISTS 设备不存在 * - -ERR_CALL_SHELL 调用系统命令行失败 * - -ERR_PROCESS_RETURN 系统调用执行结束返回失败 * - ERR_SUCCESS 成功 */ int IsInterfacePrivate(const TCHAR *pInterfaceName, bool *pIsPrivateMode); /** * @brief 获取网卡接口索引编号 * @param[in] pInterfaceName 网卡名称 * @param[out] pIndex 网卡索引 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_MALLOC_MEMORY 分配内存失败 * - -ERR_MEMORY_STR 字符串处理 * - -ERR_CALL_SHELL 调用系统命令行失败 * - ERR_SUCCESS 成功 */ int GetInterfaceIndexByName(const TCHAR *pInterfaceName, int *pIndex); /** * @brief 删除接口网络地址 * @param[in] pInterfaceName 网卡名称 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_MALLOC_MEMORY 分配内存失败 * - -ERR_MEMORY_STR 字符串处理 * - -ERR_CALL_SHELL 调用系统命令行失败 * - ERR_SUCCESS 成功 */ int RemoveInterfaceIpAddress(const TCHAR *pInterfaceName); /** * @brief 设置网络接口IP地址 * @param[in] pInterfaceName 网卡名称 * @param[in] pCidrIpaddr CIDR类型IP地址 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_MALLOC_MEMORY 分配内存失败 * - -ERR_MEMORY_STR 字符串处理 * - -ERR_CALL_SHELL 调用系统命令行失败 * - ERR_SUCCESS 成功 */ int SetInterfaceIpAddressFromCIDR(const TCHAR *pInterfaceName, const TCHAR *pCidrIpaddr); /** * @brief 设置网络接口IP地址 * @param[in] pInterfaceName 网卡名称 * @param[in] pIpaddr IP 地址 * @param[in] pNetmask 子网掩码 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_MALLOC_MEMORY 分配内存失败 * - -ERR_MEMORY_STR 字符串处理 * - -ERR_CALL_SHELL 调用系统命令行失败 * - ERR_SUCCESS 成功 */ int SetInterfaceIpAddress(const TCHAR *pInterfaceName, const TCHAR *pIpaddr, const TCHAR *pNetmask); /** * @brief 获取网络连接NAT功能是否开启 * @param[in] pInterfaceName 网卡名称 * @param[out] pIsEnabled 网卡NAT当前是否开启 * - TRUE NAT 开启 * - FALSE NAT 关闭 * @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO * - -ERR_INPUT_PARAMS 输入参数错误 * - -ERR_MEMORY_STR 字符串处理 * - -ERR_ITEM_UNEXISTS 设备不存在 * - -ERR_CALL_SHELL 调用系统命令行失败 * - -ERR_PROCESS_RETURN 系统调用执行结束返回失败 * - ERR_SUCCESS 成功 */ int IsNetConnectionSharingEnabled(const TCHAR *pInterfaceName, bool *pIsEnabled); /** * @brief WireGuard 服务 Windows PowerShell 自定义命令是否安装 * @return * - TRUE 已经安装 * - FALSE 未安装 */ bool IsCustomNatPSCmdInstalled(); #endif #ifdef __cplusplus } #endif