您的位置:首页 > 理论基础 > 计算机网络

寻找正在连接中的网络连接

2017-11-19 10:32 423 查看
寻找正在连接中的网络连接,并开启网络连接的网络连接共享功能。

注意:要设置为管理员权限启动工程。否则EnableSharing会失败。

[cpp] view
plain copy

#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;  

}  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: