如何获取当前正在联网的网络连接并设置共享, 然后选择可共享该网络的连接

pinyinzach 2013-08-29 08:46:39
有这样的c函数或api吗,具体怎么用,参数都是什么,举个例子
...全文
330 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
woshinia 2013-08-30
  • 打赏
  • 举报
回复
寻找正在连接中的网络连接,并开启网络连接的网络连接共享功能。 注意:要设置为管理员权限启动工程。否则EnableSharing会失败。
 view plaincopy
#include <Windows.h>  
#include <NetCon.h>  
#include <locale>  
#include <stdio.h>  
#pragma comment(lib,"Iphlpapi.lib")  
#pragma comment(lib,"Rpcrt4.lib")//GUID  
//启用、禁用网卡  
#pragma comment(lib,"ole32.lib")  
  
int main(int argc, char* argv[])  
{  
    INetConnectionManager *pManager=NULL;  
    INetConnection *pConnection=NULL;  
    IEnumNetConnection *pEnum=NULL;  
    ULONG           celtFetched;  
    INetSharingManager *pNetSharingManager=NULL;  
    INetConnectionProps *pProps=NULL;  
    INetSharingConfiguration *pConfiguration=NULL;  
    NETCON_PROPERTIES*   properties=NULL;  
    NETCON_MEDIATYPE   mediatype;  
  
    setlocale(LC_CTYPE, "");  
    CoInitialize(NULL);  
    CoCreateInstance(CLSID_ConnectionManager, NULL, CLSCTX_SERVER, IID_INetConnectionManager, (void**)&pManager);  
    if(pManager == NULL)  
    {  
        printf("获取接受失败,Error:%d\n",GetLastError());  
        return 0;  
    }  
    pManager->EnumConnections(NCME_DEFAULT, &pEnum);  
         
    while(  pEnum->Next(1, &pConnection, &celtFetched) == S_OK   )  
    {         
        pConnection->GetProperties(&properties);  
          
        if(properties->Status == NCS_CONNECTED)  
        {  
            if(properties->dwCharacter & NCCF_INCOMING_ONLY == 1)  
            {  
                wprintf(L"\"%S\"正处于连接状态,但是此连接无法共享!确保至少有2个网络连接!\n",properties->pszwName);  
                break;  
            }  
            CoCreateInstance(CLSID_NetSharingManager, NULL, CLSCTX_SERVER, IID_INetSharingManager, (void**)&pNetSharingManager);  
            if(pNetSharingManager == NULL)  
            {  
                printf("获取接受失败,Error:%d\n",GetLastError());  
                break;  
            }  
            wprintf(L"发现\"%s\"正处于连接状态。尝试开启共享...\n",properties->pszwName);  
              
            if(properties->MediaType >= NCM_DIRECT && properties->MediaType <=NCM_PPPOE)  
            {  
                pNetSharingManager->get_INetSharingConfigurationForINetConnection(pConnection,  
                    &pConfiguration);  
                if(pConfiguration && SUCCEEDED(pConfiguration->EnableSharing(ICSSHARINGTYPE_PUBLIC)))  
                {  
                    wprintf(L"成功设置\"%s\"为共享状态!\n",properties->pszwName);  
                    break;  
                }         
            }  
            wprintf(L"设置\"%s\"共享状态失败!Error:%d\n",properties->pszwName,GetLastError());  
        }  
    }  
  
  
    if(pManager) pManager->Release();  
    if(pConnection) pConnection->Release();  
    if(pEnum) pEnum->Release();  
    if(pNetSharingManager) pNetSharingManager->Release();  
    if(pConfiguration) pConfiguration->Release();  
    CoUninitialize();  
    return 0;  
}  
whizer 2013-08-30
  • 打赏
  • 举报
回复
什么是正在联网的网络连接? windows上面配置的网络链接吗?

3,882

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧