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

来源:互联网 发布:js 定义全局变量赋值 编辑:程序博客网 时间:2024/05/16 07:35

寻找正在连接中的网络连接,并开启网络连接的网络连接共享功能。

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

[cpp] view plain copy
  1. #include <Windows.h>  
  2. #include <NetCon.h>  
  3. #include <locale>  
  4. #include <stdio.h>  
  5. #pragma comment(lib,"Iphlpapi.lib")  
  6. #pragma comment(lib,"Rpcrt4.lib")//GUID  
  7. //启用、禁用网卡  
  8. #pragma comment(lib,"ole32.lib")  
  9.   
  10. int main(int argc, char* argv[])  
  11. {  
  12.     INetConnectionManager *pManager=NULL;  
  13.     INetConnection *pConnection=NULL;  
  14.     IEnumNetConnection *pEnum=NULL;  
  15.     ULONG           celtFetched;  
  16.     INetSharingManager *pNetSharingManager=NULL;  
  17.     INetConnectionProps *pProps=NULL;  
  18.     INetSharingConfiguration *pConfiguration=NULL;  
  19.     NETCON_PROPERTIES*   properties=NULL;  
  20.     NETCON_MEDIATYPE   mediatype;  
  21.   
  22.     setlocale(LC_CTYPE, "");  
  23.     CoInitialize(NULL);  
  24.     CoCreateInstance(CLSID_ConnectionManager, NULL, CLSCTX_SERVER, IID_INetConnectionManager, (void**)&pManager);  
  25.     if(pManager == NULL)  
  26.     {  
  27.         printf("获取接受失败,Error:%d\n",GetLastError());  
  28.         return 0;  
  29.     }  
  30.     pManager->EnumConnections(NCME_DEFAULT, &pEnum);  
  31.   
  32.     while(  pEnum->Next(1, &pConnection, &celtFetched) == S_OK   )  
  33.     {  
  34.         pConnection->GetProperties(&properties);  
  35.   
  36.         if(properties->Status == NCS_CONNECTED)  
  37.         {  
  38.             if(properties->dwCharacter & NCCF_INCOMING_ONLY == 1)  
  39.             {  
  40.                 wprintf(L"\"%S\"正处于连接状态,但是此连接无法共享!确保至少有2个网络连接!\n",properties->pszwName);  
  41.                 break;  
  42.             }  
  43.             CoCreateInstance(CLSID_NetSharingManager, NULL, CLSCTX_SERVER, IID_INetSharingManager, (void**)&pNetSharingManager);  
  44.             if(pNetSharingManager == NULL)  
  45.             {  
  46.                 printf("获取接受失败,Error:%d\n",GetLastError());  
  47.                 break;  
  48.             }  
  49.             wprintf(L"发现\"%s\"正处于连接状态。尝试开启共享...\n",properties->pszwName);  
  50.   
  51.             if(properties->MediaType >= NCM_DIRECT && properties->MediaType <=NCM_PPPOE)  
  52.             {  
  53.                 pNetSharingManager->get_INetSharingConfigurationForINetConnection(pConnection,  
  54.                     &pConfiguration);  
  55.                 if(pConfiguration && SUCCEEDED(pConfiguration->EnableSharing(ICSSHARINGTYPE_PUBLIC)))  
  56.                 {  
  57.                     wprintf(L"成功设置\"%s\"为共享状态!\n",properties->pszwName);  
  58.                     break;  
  59.                 }  
  60.             }  
  61.             wprintf(L"设置\"%s\"共享状态失败!Error:%d\n",properties->pszwName,GetLastError());  
  62.         }  
  63.     }  
  64.   
  65.   
  66.     if(pManager) pManager->Release();  
  67.     if(pConnection) pConnection->Release();  
  68.     if(pEnum) pEnum->Release();  
  69.     if(pNetSharingManager) pNetSharingManager->Release();  
  70.     if(pConfiguration) pConfiguration->Release();  
  71.     CoUninitialize();  
  72.     return 0;  
  73. }  
原创粉丝点击