Как использовать WMI добавить таблицу маршрутов с C#
Я хочу использовать Win32_IP4RouteTable для добавления таблицы маршрутов
код:
ManagementClass wmiclass = new ManagementClass("Win32_IP4RouteTable");
ManagementObject route = wmiclass.CreateInstance();
route["Destination"] = "145.63.20.102";
route["NextHop"] = "172.16.213.2";
route["Mask"] = "255.255.255.255";
route["Metric1"] = 20;
route.Put();//or route.Put(new PutOptions() { Type =
PutType.UpdateOrCreate });
Я получаю исключение для метода Put():
`System.Management.Management:Invalid parameter`
Как я могу использовать метод Put для создания нового элемента
2 ответа
Вы можете использовать библиотеку ORMi для этого. Это легкая ORM для WMI.
1) Определите свой класс:
[WMIClass("Win32_IP4RouteTable")]
public class RouteTable
{
public string Destination{ get; set; }
public string NextHop{ get; set; }
public string Mask{ get; set; }
public string Metric1{ get; set; }
}
ПРИМЕЧАНИЕ. Кажется, что есть некоторые свойства, которые могут потребоваться, поэтому вы получаете "Неверный параметр". Если это так, то просто добавьте необходимые предложения к RouteTable
учебный класс.
2) Используйте библиотеку:
WMIHelper helper = new WMIHelper("root\\CimV2");
RouteTable route = new RouteTable
{
Destination = "145.63.20.102",
NextHop = "172.16.213.2",
Mask = "255.255.255.255",
Metric1 = "20"
};
helper.AddInstance(route);
И это все.
Как это, спасибо за @Jimi `
[DllImport("Iphlpapi.dll")]
[return: MarshalAs(UnmanagedType.U4)]
public static extern int CreateIpForwardEntry(ref MIB_IPFORWARDROW pRoute);
public static int createIpForwardEntry(UInt32 destIPAddress, UInt32 destMask, UInt32 nextHopIPAddress, UInt32 ifIndex, int metric)
{
MIB_IPFORWARDROW mifr = new MIB_IPFORWARDROW();
mifr.dwForwardDest = destIPAddress;
mifr.dwForwardMask = destMask;
mifr.dwForwardNextHop = nextHopIPAddress;
mifr.dwForwardIfIndex = ifIndex;
mifr.dwForwardPolicy = Convert.ToUInt32(0);
mifr.dwForwardType = Convert.ToUInt32(3);
mifr.dwForwardProto = Convert.ToUInt32(3);
mifr.dwForwardAge = Convert.ToUInt32(0);
mifr.dwForwardNextHopAS = Convert.ToUInt32(0);
mifr.dwForwardMetric1 = metric;
mifr.dwForwardMetric2 = -1;
mifr.dwForwardMetric3 = -1;
mifr.dwForwardMetric4 = -1;
mifr.dwForwardMetric5 = -1;
return CreateIpForwardEntry(ref mifr);
}
`