Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / fx / src / Wmi / managed / System / Management / MethodSet.cs / 1305376 / MethodSet.cs
using System; using System.Collections; using System.Runtime.InteropServices; using WbemClient_v1; namespace System.Management { //CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC// ////// ///Represents the set of methods available in the collection. ////// //CCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCCC// public class MethodDataCollection : ICollection, IEnumerable { private ManagementObject parent; private class enumLock { } //used to lock usage of BeginMethodEnum/NextMethod internal MethodDataCollection(ManagementObject parent) : base() { this.parent = parent; } // //ICollection // ///using System; /// using System.Management; /// /// // This sample demonstrates enumerate all methods in a ManagementClass object. /// class Sample_MethodDataCollection /// { /// public static int Main(string[] args) { /// ManagementClass diskClass = new ManagementClass("win32_logicaldisk"); /// MethodDataCollection diskMethods = diskClass.Methods; /// foreach (MethodData method in diskMethods) { /// Console.WriteLine("Method = " + method.Name); /// } /// return 0; /// } /// } ///
///Imports System /// Imports System.Management /// /// ' This sample demonstrates enumerate all methods in a ManagementClass object. /// Class Sample_MethodDataCollection /// Overloads Public Shared Function Main(args() As String) As Integer /// Dim diskClass As New ManagementClass("win32_logicaldisk") /// Dim diskMethods As MethodDataCollection = diskClass.Methods /// Dim method As MethodData /// For Each method In diskMethods /// Console.WriteLine("Method = " & method.Name) /// Next method /// Return 0 /// End Function /// End Class ///
////// ///Represents the number of objects in the ///. /// public int Count { get { int i = 0; IWbemClassObjectFreeThreaded inParameters = null, outParameters = null; string methodName; int status = (int)ManagementStatus.Failed; lock(typeof(enumLock)) { try { status = parent.wbemObject.BeginMethodEnumeration_(0); if (status >= 0) { methodName = ""; // Condition primer to branch into the while loop. while (methodName != null && status >= 0 && status != (int)tag_WBEMSTATUS.WBEM_S_NO_MORE_DATA) { methodName = null; inParameters = null; outParameters = null; status = parent.wbemObject.NextMethod_(0, out methodName, out inParameters, out outParameters); if (status >= 0 && status != (int)tag_WBEMSTATUS.WBEM_S_NO_MORE_DATA) i++; } parent.wbemObject.EndMethodEnumeration_(); // Ignore status. } } catch (COMException e) { ManagementException.ThrowWithExtendedInfo(e); } } // lock if ((status & 0xfffff000) == 0x80041000) { ManagementException.ThrowWithExtendedInfo((ManagementStatus)status); } else if ((status & 0x80000000) != 0) { Marshal.ThrowExceptionForHR(status); } return i; } } ///The number of objects in the ///. /// ///Indicates whether the object is synchronized. ////// public bool IsSynchronized { get { return false; } } ////// if the object is synchronized; /// otherwise, . /// ///Represents the object to be used for synchronization. ////// public object SyncRoot { get { return this; } } ///The object to be used for synchronization. ////// ///Copies the ///into an array. /// /// The array to which to copy the collection. /// The index from which to start. public void CopyTo(Array array, int index) { //Use an enumerator to get the MethodData objects and attach them into the target array foreach (MethodData m in this) array.SetValue(m, index++); } ///Copies the ///into an array. /// /// The destination array to which to copy theCopies the ///to a specialized /// array. objects. /// The index in the destination array from which to start the copy. public void CopyTo(MethodData[] methodArray, int index) { CopyTo((Array)methodArray, index); } // // IEnumerable // IEnumerator IEnumerable.GetEnumerator() { return (IEnumerator)(new MethodDataEnumerator(parent)); } /// /// ///Returns an enumerator for the ///. /// ///Each call to this method /// returns a new enumerator on the collection. Multiple enumerators can be obtained /// for the same method collection. However, each enumerator takes a snapshot /// of the collection, so changes made to the collection after the enumerator was /// obtained are not reflected. ///An public MethodDataEnumerator GetEnumerator() { return new MethodDataEnumerator(parent); } //Enumerator class ///to enumerate through the collection. /// ///Represents the enumerator for ////// objects in the . /// public class MethodDataEnumerator : IEnumerator { private ManagementObject parent; private ArrayList methodNames; //can't use simple array because we don't know the size... private IEnumerator en; //Internal constructor //Because WMI doesn't provide a "GetMethodNames" for methods similar to "GetNames" for properties, //We have to walk the methods list and cache the names here. //We lock to ensure that another thread doesn't interfere in the Begin/Next sequence. internal MethodDataEnumerator(ManagementObject parent) { this.parent = parent; methodNames = new ArrayList(); IWbemClassObjectFreeThreaded inP = null, outP = null; string tempMethodName; int status = (int)ManagementStatus.Failed; lock(typeof(enumLock)) { try { status = parent.wbemObject.BeginMethodEnumeration_(0); if (status >= 0) { tempMethodName = ""; // Condition primer to branch into the while loop. while (tempMethodName != null && status >= 0 && status != (int)tag_WBEMSTATUS.WBEM_S_NO_MORE_DATA) { tempMethodName = null; status = parent.wbemObject.NextMethod_(0, out tempMethodName, out inP, out outP); if (status >= 0 && status != (int)tag_WBEMSTATUS.WBEM_S_NO_MORE_DATA) methodNames.Add(tempMethodName); } parent.wbemObject.EndMethodEnumeration_(); // Ignore status. } } catch (COMException e) { ManagementException.ThrowWithExtendedInfo(e); } en = methodNames.GetEnumerator(); } if ((status & 0xfffff000) == 0x80041000) { ManagementException.ThrowWithExtendedInfo((ManagementStatus)status); } else if ((status & 0x80000000) != 0) { Marshal.ThrowExceptionForHR(status); } } ///using System; /// using System.Management; /// /// // This sample demonstrates how to enumerate all methods in /// // Win32_LogicalDisk class using MethodDataEnumerator object. /// /// class Sample_MethodDataEnumerator /// { /// public static int Main(string[] args) /// { /// ManagementClass diskClass = new ManagementClass("win32_logicaldisk"); /// MethodDataCollection.MethodDataEnumerator diskEnumerator = /// diskClass.Methods.GetEnumerator(); /// while(diskEnumerator.MoveNext()) /// { /// MethodData method = diskEnumerator.Current; /// Console.WriteLine("Method = " + method.Name); /// } /// return 0; /// } /// } ///
///Imports System /// Imports System.Management /// /// ' This sample demonstrates how to enumerate all methods in /// ' Win32_LogicalDisk class using MethodDataEnumerator object. /// /// Class Sample_MethodDataEnumerator /// Overloads Public Shared Function Main(args() As String) As Integer /// Dim diskClass As New ManagementClass("win32_logicaldisk") /// Dim diskEnumerator As _ /// MethodDataCollection.MethodDataEnumerator = _ /// diskClass.Methods.GetEnumerator() /// While diskEnumerator.MoveNext() /// Dim method As MethodData = diskEnumerator.Current /// Console.WriteLine("Method = " & method.Name) /// End While /// Return 0 /// End Function /// End Class ///
///object IEnumerator.Current { get { return (object)this.Current; } } /// /// ///Returns the current ///in the /// enumeration. The current public MethodData Current { get { return new MethodData(parent, (string)en.Current); } } ///item in the collection. /// ///Moves to the next element in the ///enumeration. public bool MoveNext () { return en.MoveNext(); } /// if the enumerator was successfully advanced to the next method; if the enumerator has passed the end of the collection. /// public void Reset() { en.Reset(); } }//MethodDataEnumerator // //Methods // ///Resets the enumerator to the beginning of the ///enumeration. /// /// The name of the method requested. ///Returns the specified ///from the . A public virtual MethodData this[string methodName] { get { if (null == methodName) throw new ArgumentNullException ("methodName"); return new MethodData(parent, methodName); } } ///instance containing all information about the specified method. /// /// The name of the method to remove from the collection. ///Removes a ///from the . /// public virtual void Remove(string methodName) { if (parent.GetType() == typeof(ManagementObject)) //can't remove methods from instance throw new InvalidOperationException(); int status = (int)ManagementStatus.Failed; try { status = parent.wbemObject.DeleteMethod_(methodName); } catch (COMException e) { ManagementException.ThrowWithExtendedInfo(e); } if ((status & 0xfffff000) == 0x80041000) { ManagementException.ThrowWithExtendedInfo((ManagementStatus)status); } else if ((status & 0x80000000) != 0) { Marshal.ThrowExceptionForHR(status); } } //This variant takes only a method name and assumes a void method with no in/out parameters ////// Removing ///objects from the /// can only be done when the class has no /// instances. Any other case will result in an exception. /// ///Adds a ///to the . /// /// The name of the method to add. ///Adds a ///to the . This overload will /// add a new method with no parameters to the collection. /// public virtual void Add(string methodName) { Add(methodName, null, null); } //This variant takes the full information, i.e. the method name and in & out param objects ///Adding ///objects to the can only /// be done when the class has no instances. Any other case will result in an /// exception. /// /// The name of the method to add. /// TheAdds a ///to the . This overload will add a new method with the /// specified parameter objects to the collection. holding the input parameters to the method. /// The holding the output parameters to the method. /// /// public virtual void Add(string methodName, ManagementBaseObject inParameters, ManagementBaseObject outParameters) { IWbemClassObjectFreeThreaded wbemIn = null, wbemOut = null; if (parent.GetType() == typeof(ManagementObject)) //can't add methods to instance throw new InvalidOperationException(); if (inParameters != null) wbemIn = inParameters.wbemObject; if (outParameters != null) wbemOut = outParameters.wbemObject; int status = (int)ManagementStatus.Failed; try { status = parent.wbemObject.PutMethod_(methodName, 0, wbemIn, wbemOut); } catch (COMException e) { ManagementException.ThrowWithExtendedInfo(e); } if ((status & 0xfffff000) == 0x80041000) { ManagementException.ThrowWithExtendedInfo((ManagementStatus)status); } else if ((status & 0x80000000) != 0) { Marshal.ThrowExceptionForHR(status); } } }//MethodDataCollection } // File provided for Reference Use Only by Microsoft Corporation (c) 2007. // Copyright (c) Microsoft Corporation. All rights reserved.Adding ///objects to the can only be /// done when the class has no instances. Any other case will result in an /// exception.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- Point3DIndependentAnimationStorage.cs
- TraceShell.cs
- SQLBinaryStorage.cs
- ByteStreamGeometryContext.cs
- SizeChangedEventArgs.cs
- TimeoutHelper.cs
- PageFunction.cs
- TextBoxRenderer.cs
- ToolZone.cs
- ObjectAssociationEndMapping.cs
- DbParameterCollection.cs
- DataGridViewCellFormattingEventArgs.cs
- ResourceContainer.cs
- GlobalProxySelection.cs
- WizardForm.cs
- TreePrinter.cs
- AnnotationResource.cs
- StateChangeEvent.cs
- FilterQuery.cs
- BindingList.cs
- XmlHierarchyData.cs
- GroupByExpressionRewriter.cs
- RelatedEnd.cs
- HideDisabledControlAdapter.cs
- BStrWrapper.cs
- TripleDES.cs
- Int64KeyFrameCollection.cs
- SqlCacheDependencyDatabase.cs
- JsonXmlDataContract.cs
- PolicyManager.cs
- Schema.cs
- Console.cs
- SourceFilter.cs
- XsltContext.cs
- HGlobalSafeHandle.cs
- PersistenceException.cs
- GlyphInfoList.cs
- PermissionSet.cs
- SHA1.cs
- MdImport.cs
- InstanceDataCollection.cs
- ListItemConverter.cs
- DPTypeDescriptorContext.cs
- GifBitmapDecoder.cs
- Enum.cs
- EditingCommands.cs
- Tablet.cs
- InputReferenceExpression.cs
- AttachInfo.cs
- ISFClipboardData.cs
- XmlSchemaProviderAttribute.cs
- LZCodec.cs
- EventItfInfo.cs
- GreenMethods.cs
- CompositeDataBoundControl.cs
- RenderingEventArgs.cs
- DbProviderManifest.cs
- sqlinternaltransaction.cs
- BitmapEncoder.cs
- HttpCapabilitiesEvaluator.cs
- XPathArrayIterator.cs
- FreeFormDesigner.cs
- ConnectionProviderAttribute.cs
- ObjectHandle.cs
- EntityKey.cs
- ElementProxy.cs
- HuffModule.cs
- XmlSchema.cs
- DetailsViewDeleteEventArgs.cs
- StylusTip.cs
- DependencySource.cs
- BitSet.cs
- AnchoredBlock.cs
- AnnotationResource.cs
- WeakReadOnlyCollection.cs
- PrtTicket_Public_Simple.cs
- QilNode.cs
- ComboBoxItem.cs
- StructuredProperty.cs
- CommandField.cs
- DesignerActionListCollection.cs
- StringArrayConverter.cs
- VisualStyleTypesAndProperties.cs
- TableLayoutSettingsTypeConverter.cs
- SQLInt32Storage.cs
- XmlSerializer.cs
- validation.cs
- InkCanvasInnerCanvas.cs
- StackOverflowException.cs
- ServicePointManager.cs
- OutputCacheProviderCollection.cs
- TemplateBindingExpression.cs
- CorrelationResolver.cs
- OleDbFactory.cs
- CompiledQuery.cs
- WpfXamlLoader.cs
- HwndHost.cs
- IxmlLineInfo.cs
- SafeIUnknown.cs
- bidPrivateBase.cs