Beste mensen. Al een geruime tijd ben ik opzoek naar de mogelijkheid om mbv code een netwerkkaart te herstarten. (of dan wel uitschakelen en weer in) Om dit voor elkaar te krijgen ben ik bezig geweest met WMI. In de volgende code gebruik ik de API : CIM_NetworkAdapter. (http://msdn.microsoft.com...mi/cim_networkadapter.asp )
Hiermee kom ik een heel eind. Alleen “werkt” de invokeMethode niet omdat zoals aangegeven in MSDN is de methode Reset niet in WMI geïmplementeerd. Ik neem aan dat dit de oorzaak is van de exception.
Dus ben ik het gaan proberen om de API aan te spreken direct via een DLL import. Uit een boek heb ik de volgende code, na wat aanpassingen, aan de praat gekregen. Het voorbeeld werkt met de API GetSystemInfo() maar werkt het zelfde als CIM_NetworkAdapter. Je vangt de informatie in een Struct af.
Nu vraag ik me af als ik deze code gebruik voor CIM_NetworkAdapter hoe ik dan de methode Reset kan aanspreken. (ook iets met een InvokeMethode ofzo?) En eigenlijke de grootste vraag: “Is dit wel de Reset methode waar ik naar opzoek ben?” Het zou zo maar kunnen dat ik op een compleet verkeerd spoor zit.
Bij voorbaat dank voor het mee denken!
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| ManagementObjectSearcher query = new ManagementObjectSearcher("SELECT * FROM CIM_NetworkAdapter");
ManagementObjectCollection queryCollection = query.Get();
foreach( ManagementObject mo in queryCollection )
{
Console.WriteLine( mo["Name"] );
if ( (string)mo["Name"] == "3Com 3CRPAG175 Wireless LAN PC Card" )
{
try
{
ManagementBaseObject inParams = mo.GetMethodParameters("Reset");
mo.InvokeMethod("Reset", inParams, null );
}
catch ( Exception e )
{
Console.WriteLine(e.ToString());
}
}
} |
Hiermee kom ik een heel eind. Alleen “werkt” de invokeMethode niet omdat zoals aangegeven in MSDN is de methode Reset niet in WMI geïmplementeerd. Ik neem aan dat dit de oorzaak is van de exception.
Dus ben ik het gaan proberen om de API aan te spreken direct via een DLL import. Uit een boek heb ik de volgende code, na wat aanpassingen, aan de praat gekregen. Het voorbeeld werkt met de API GetSystemInfo() maar werkt het zelfde als CIM_NetworkAdapter. Je vangt de informatie in een Struct af.
code:
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
32
33
34
35
36
37
38
39
40
41
| using System;
using System.Runtime.InteropServices;
class CH4_14
{
[System.Runtime.InteropServices.StructLayoutAttribute (LayoutKind.Sequential, CharSet=CharSet.Auto)]
public struct _SYSTEM_INFO
{
public int dwOemID;
public int dwPageSize;
public int lpMinimumApplicationAddress;
public int lpMaximumApplicationAddress;
public int dwActiveProcessorMask;
public int dwNumberOfProcessors;
public int dwProcessorType;
public int dwAllocationGranularity;
public short wProcessorLevel;
public short wProcessorRevision;
}
[DllImport("Kernel32.dll")]
unsafe private static extern void GetSystemInfo(uint* bufptr);
public static unsafe void Main()
{
try
{
_SYSTEM_INFO si = new _SYSTEM_INFO();
GetSystemInfo( (uint *)&si );
Console.WriteLine("Processor-type = {0}", si.dwProcessorType );
Console.WriteLine("Aantal processoren = {0}", si.dwNumberOfProcessors );
Console.WriteLine("Processor-niveau = {0}", si.wProcessorLevel );
Console.WriteLine("Processor-revisie = {0}", si.wProcessorRevision );
}
catch ( Exception e )
{
Console.WriteLine("Exception afgevangen! {0}", e );
}
}
} |
Nu vraag ik me af als ik deze code gebruik voor CIM_NetworkAdapter hoe ik dan de methode Reset kan aanspreken. (ook iets met een InvokeMethode ofzo?) En eigenlijke de grootste vraag: “Is dit wel de Reset methode waar ik naar opzoek ben?” Het zou zo maar kunnen dat ik op een compleet verkeerd spoor zit.
Bij voorbaat dank voor het mee denken!