NetTunnelWindows/NetTunnelSDK/network.h

318 lines
12 KiB
C

#pragma once
#include <Windows.h>
#ifdef NETTUNNELSDK_EXPORTS
#define NETWORK_API __declspec(dllexport)
#else
#define NETWORK_API __declspec(dllimport)
#endif
/**
*
* @brief 本地计算机网卡信息
*/
typedef struct {
int InterfaceIndex; ///< 网卡索引
TCHAR NetCardUUID[260]; ///< 网卡名称, Windows标识为 UUID
TCHAR NetCardName[MAX_NETCARD_NAME]; ///< 网卡名称
TCHAR NetCardDescription[132]; ///< 网卡描述
TCHAR NetCardIpaddr[MAX_IP_LEN]; ///< 网卡 IP 地址
TCHAR NetCardNetmask[MAX_IP_LEN]; ///< 网卡子网掩码
TCHAR NetCardGateway[MAX_IP_LEN]; ///< 网卡网关
TCHAR NetCardMacAddr[20]; ///< 网卡 MAC 地址
} NIC_CONTENT, *PNIC_CONTENT;
#ifdef __cplusplus // If used by C++ code,
extern "C" {
// we need to export the C interface
#endif
/**
* @brief 获取本机网卡信息
* @param[out] pInfo 网卡信息 @see NIC_CONTENT
* @param[out] pItemCounts 计算机当前操作系统中网卡总数 最大值 32
* @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO
* - -ERR_INPUT_PARAMS 输入参数错误
* - -ERR_MALLOC_MEMORY 分配内存失败
* - ERR_SUCCESS 成功
*/
TUNNEL_API int __cdecl GetAllNICInfo(PNIC_CONTENT *pInfo, int *pItemCounts);
/**
* @brief 获取当前 Internet 网卡名
* @param ifName 网卡名称
* @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO
* - -ERR_ITEM_UNEXISTS 未找到具有 Internet 连接的网卡
* - ERR_SUCCESS 成功
*/
TUNNEL_API int __cdecl GetInternetIfName(TCHAR ifName[MAX_NETCARD_NAME]);
/**
* @brief 根据网卡 GUDI 获取网卡名称
* @param[in] pGUID 网卡 GUID
* @param[out] ifName 网卡名称
* @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 成功
*/
TUNNEL_API int __cdecl GetInterfaceNameByGUID(const TCHAR *pGUID, TCHAR ifName[MAX_NETCARD_NAME]);
/**
* @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 成功
*/
TUNNEL_API int __cdecl GetInterfaceGUIDByName(const TCHAR *pInterfaceName, GUID *pGuid);
TUNNEL_API int __cdecl WaitNetAdapterConnected(const TCHAR *pInterfaceName, int timeOutOfMs);
/**
* @brief 判断当前网络适配器是否拥有 Internet 连接
* @param[in] ifIndex 网卡适配器索引
* @param[in] pRet 连接属性
* - TRUE 网卡适配器具有 Internet 连接
* - FALSE 网卡适配器无 Internet 连接
* @return 函数执行结果 0: 成功, 小于0 失败 @see USER_ERRNO
* - -ERR_INPUT_PARAMS 输入参数错误
* - -ERR_GET_IPFOWARDTBL 获取防火墙信息失败
* - ERR_SUCCESS 成功
*/
TUNNEL_API int __cdecl IsInternetConnectAdapter(int ifIndex, bool *pRet);
/**
* @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 成功
*/
TUNNEL_API int __cdecl GetNetConnectionNetworkCategory(const TCHAR *pInterfaceName, bool *pIsPrivate);
/**
* @brief 启动/停止 Windows 网络共享服务
* @param[in] pInterfaceName pInterfaceName 网卡名称
* @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 成功
*/
NETWORK_API int __cdecl SetNetConnectionSharing(const TCHAR *pInterfaceName, bool isEnable, bool isSetPrivate);
/**
* @brief 获取当前网络共享服务状态
* @param[in] pInterfaceName pInterfaceName 网卡名称
* @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_SUCCESS 成功
*/
NETWORK_API int __cdecl GetNetConnectionSharing(const TCHAR *pInterfaceName, 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 成功
*/
NETWORK_API int __cdecl SetNetConnectionNetworkCategory(const TCHAR *pInterfaceName, const bool isPrivate);
/**
* @brief 添加系统路由表项
* @param[in] ifIndex 网卡 Index
* @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_SUCCESS 成功
*/
NETWORK_API int __cdecl AddRouteTable(int ifIndex, const char *pIP, const char *pMask, const char *pGateway);
#if 0
/**
* @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 成功
*/
TUNNEL_API int __cdecl 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 成功
*/
TUNNEL_API int __cdecl EnableWindowsHyperV(bool enabled);
/**
* @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 成功
*/
TUNNEL_API int __cdecl SetNATRule(const TCHAR *pInterfaceName, const TCHAR *pCidrIpaddr);
/**
* @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 成功
*/
TUNNEL_API int __cdecl 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 成功
*/
TUNNEL_API int __cdecl 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 成功
*/
TUNNEL_API int __cdecl 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 成功
*/
TUNNEL_API int __cdecl 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 成功
*/
TUNNEL_API int __cdecl 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 成功
*/
TUNNEL_API int __cdecl 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 成功
*/
TUNNEL_API int __cdecl IsNetConnectionSharingEnabled(const TCHAR *pInterfaceName, bool *pIsEnabled);
/**
* @brief WireGuard 服务 Windows PowerShell 自定义命令是否安装
* @return
* - TRUE 已经安装
* - FALSE 未安装
*/
TUNNEL_API bool __cdecl IsCustomNatPSCmdInstalled();
#endif
#ifdef __cplusplus
}
#endif