Click here to Skip to main content
15,885,278 members
Articles / Programming Languages / C#

How To: (Almost) Everything In WMI via C# - Part 3: Hardware

Rate me:
Please Sign up or sign in to vote.
4.67/5 (44 votes)
3 Apr 2007CPOL3 min read 296.2K   12.7K   145  
An Extensible Framework for enumerating WMI Class Properties
using System;
using System.Management;
using System.Collections.Generic;
using System.Text;

namespace baileysoft.Wmi
{
    class Connection
    {
        ManagementScope connectionScope;
        ConnectionOptions options;

        #region "properties"
        public ManagementScope GetConnectionScope
        {
            get { return connectionScope; }
        }
        public ConnectionOptions GetOptions
        {
            get { return options; }
        }
        #endregion
              
        #region "static helpers"
        public static ConnectionOptions SetConnectionOptions()
        {
            ConnectionOptions options = new ConnectionOptions();
            options.Impersonation = ImpersonationLevel.Impersonate;
            options.Authentication = AuthenticationLevel.Default;
            options.EnablePrivileges = true;
            return options;
        }

        public static ManagementScope SetConnectionScope(string machineName,
                                                   ConnectionOptions options)
        {
            ManagementScope connectScope = new ManagementScope();
            connectScope.Path = new ManagementPath(@"\\" + machineName + @"\root\CIMV2");
            connectScope.Options = options;

            try
            {
                connectScope.Connect();
            }
            catch (ManagementException e)
            {
                Console.WriteLine("An Error Occurred: " + e.Message.ToString());
            }
            return connectScope;
        }
        #endregion

        #region "constructors"
        public Connection()
        {
            EstablishConnection(null, null, null, Environment.MachineName);
        }

        public Connection(string userName,
                          string password,
                          string domain,
                          string machineName)
        {
            EstablishConnection(userName, password, domain, machineName);
        }
        #endregion

        #region "private helpers"
        private void EstablishConnection(string userName, string password, string domain, string machineName)
        {
            options = Connection.SetConnectionOptions();
            if (domain != null || userName != null)
            {
                options.Username = domain + "\\" + userName;
                options.Password = password;
            }
            connectionScope = Connection.SetConnectionScope(machineName, options);
        }
        #endregion
      
   }
}

By viewing downloads associated with this article you agree to the Terms of Service and the article's licence.

If a file you wish to view isn't highlighted, and is a text file (not binary), please let us know and we'll add colourisation support for it.

License

This article, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)


Written By
Software Developer
United States United States
I'm a professional .NET software developer and proud military veteran. I've been in the software business for 20+ years now and if there's one lesson I have learned over the years, its that in this industry you have to be prepared to be humbled from time to time and never stop learning!

Comments and Discussions