public TypeInfo(EventSource source, SchemaNaming naming, Type t) { this.toWMI = (ConvertFuncToWMI)InstrumentedAssembly.mapTypeToToWMIFunc[t]; this.toNET = (ConvertFuncToNET)InstrumentedAssembly.mapTypeToToNETFunc[t]; this.t = t; isSTA = Thread.CurrentThread.ApartmentState == ApartmentState.STA; ManagementClass eventClass = new ManagementClass(naming.NamespaceName + ":" + ManagedNameAttribute.GetMemberName(t)); PropertyInfo prop = typeof(ManagementBaseObject).GetProperty("WmiObject", BindingFlags.Instance | BindingFlags.NonPublic); ManagementObject evt = eventClass.CreateInstance(); obj = (IWbemClassObject_DoNotMarshal)prop.GetValue(evt, null); this.source = source; SetBatchSize(batchSize); IWbemClassObject_DoNotMarshal obj2; obj.Clone_(out obj2); xoa1[0] = (IWbemObjectAccess)obj2; oa1test = new ClassObjectArray(xoa1); writeDWORD1 = new WriteDWORD(xoa1[0].WriteDWORD_); writeQWORD1 = new WriteQWORD(xoa1[0].WriteQWORD_); #if xxx string code = CodeSpit.Spit(t, xoa1[0]); CSharpCodeProvider provider = new CSharpCodeProvider(); ICodeCompiler compiler = provider.CreateCompiler(); CompilerParameters parameters = new CompilerParameters(); parameters.GenerateInMemory = true; parameters.ReferencedAssemblies.Add(t.Assembly.Location); parameters.ReferencedAssemblies.Add(typeof(WriteDWORD).Assembly.Location); parameters.ReferencedAssemblies.Add(typeof(Event).Assembly.Location); CompilerResults results = compiler.CompileAssemblyFromSource(parameters, code); foreach (CompilerError err in results.Errors) { Console.WriteLine(err.ToString()); } Type dynType = results.CompiledAssembly.GetType("Hack"); MethodInfo doit = dynType.GetMethod("Func"); managedToIWbem = (ManagedToIWbem)Delegate.CreateDelegate(typeof(ManagedToIWbem), doit); #endif }
public void SetBatchSize(int batchSize) { if (!WMICapabilities.MultiIndicateSupported) { batchSize = 1; } lock (this) { if (currentIndex > 0) { source.pSink.Indicate_(currentIndex, oatest.realPointer); // Indicate(3, source.ipSink, currentIndex, oatest.realPointer); currentIndex = 0; lastFire = Environment.TickCount; } if (batchSize > 1) { batchEvents = true; this.batchSize = batchSize; xoa = new IWbemObjectAccess[batchSize]; writeDWORD = new WriteDWORD[batchSize]; writeQWORD = new WriteQWORD[batchSize]; IWbemClassObject_DoNotMarshal obj2; for (int i = 0; i < batchSize; i++) { obj.Clone_(out obj2); xoa[i] = (IWbemObjectAccess)obj2; writeDWORD[i] = new WriteDWORD(xoa[i].WriteDWORD_); writeQWORD[i] = new WriteQWORD(xoa[i].WriteQWORD_); } oatest = new ClassObjectArray(xoa); } else { batchEvents = false; } } }