C#でICS設定などをする

2 of 41234Next»
ICS設定

[手順]

  1. INetSharingManagerのタイプを取得
  2. INetSharingManagerのインスタンスを取得
  3. INetSharingMgr.EnumEveryConnectionでネットワークデバイスのEnumerableを取得
  4. get_NetConnectionProps()で各デバイスの素性を調べ、パブリック(WAN向け)とプライベート(LAN向け)を探し出す
  5. INetSharingConfiguration.EnableSharingでパブリックとプライベートデバイスにICSを設定

[メモ]
  • 参照設定としてCOMのNetConLib 1.0を、コードにusing NETCONLib;を入れて、少しでも苦労を減らす
  • INetConnectionPropsインスタンスからはGUID以外にもNameやDeviceNameが取れるが、GUIDはWMIのSettingIDと対応するので、WMIとの連携動作に使える

[コード]

ここでは予めパブリックとプライベートネットワーク接続のGUIDがわかっているとします。(別途WMIでネットワークデバイスのリストを作成、ユーザーに選んでもらいGUIDを得ている)

using NETCONLib;

// Create list of connections
Type NetSahringMgrType = Type.GetTypeFromProgID("HNetCfg.HNetShare.1");
INetSharingManager NetSharingMgr = Activator.CreateInstance(NetSahringMgrType) as INetSharingManager;
INetSharingEveryConnectionCollection everyConn = NetSharingMgr.EnumEveryConnection as INetSharingEveryConnectionCollection;

Dictionary<Guid, INetSharingConfiguration> ConnPropList = new Dictionary<Guid, INetSharingConfiguration>();
foreach (INetConnection aConn in everyConn)
{
    INetConnectionProps aConnProp = NetSharingMgr.get_NetConnectionProps(aConn) as INetConnectionProps;
    INetSharingConfiguration aConnConfig = NetSharingMgr.get_INetSharingConfigurationForINetConnection(aConn) as INetSharingConfiguration;
    Guid GUIDofConn = new Guid(aConnProp.Guid);
    ConnPropList.Add(GUIDofConn, aConnConfig);
    //System.Diagnostics.Debug.WriteLine(string.Format("Name      : {0}", aConnProp.Name));
    //System.Diagnostics.Debug.WriteLine(string.Format("DeviceName: {0}", aConnProp.DeviceName));
    //System.Diagnostics.Debug.WriteLine(string.Format("SettingID : {0}", aConnProp.Guid));
}

// Enable ICS on specified NIC
ConnPropList[PublicSettingID].EnableSharing(tagSHARINGCONNECTIONTYPE.ICSSHARINGTYPE_PUBLIC);
ConnPropList[PrivateSettingID].EnableSharing(tagSHARINGCONNECTIONTYPE.ICSSHARINGTYPE_PRIVATE);

// Release COM objects
foreach (INetSharingConfiguration aSharingConn in ConnPropList.Values)
{
    System.Runtime.InteropServices.Marshal.ReleaseComObject(aSharingConn);
}
System.Runtime.InteropServices.Marshal.ReleaseComObject(everyConn);
System.Runtime.InteropServices.Marshal.ReleaseComObject(NetSharingMgr);
[参考]
2 of 41234Next»

— posted by mu at 03:13 pm  

この記事に対するコメントはありません

T: Y: ALL: Online:
ThemeSwitch
  • Basic
Created in 0.1469 sec.
prev
2012.10
next
  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31