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

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

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

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


你可能感兴趣的:(寻找正在连接中的网络连接,并开启网络连接的网络连接共享功能)