//---------------------------------------------------------------------------- // // Copyright (c) Intel Corporation, 2011 - 2012 All Rights Reserved. // // File: GeneralInfoSample.cs // // Contents: Sample code for Intel(R) Active Management Technology // (Intel® AMT) GeneralInfo Sample. // // Notes: This sample demonstrates how to use various commands of // the GeneralInfo service. // //---------------------------------------------------------------------------- using System; using System.Management; using Utils; using Common.Utils; using System.Runtime.InteropServices; namespace GeneralInfo { public class GeneralInfoSample { #region CONSTANTS // function options private const string GET_HOST_NAME = "Get the host name"; private const string GET_ADMIN_ACL_STATUS = "Get the administrator's ACL status"; private const string GET_ADMIN_NET_ACL_STATUS = "Get the administrator's network ACL status"; private const string GET_CODE_VERSIONS = "Get the code versions"; private const string GET_PROVISIONING_MODE = "Get the provisioning mode"; private const string GET_PROVISIONING_STATE = "Get the provisioning state"; private const string GET_PASSWORD_MODEL = "Get the password model"; private const string GET_ENABLED_INTERFACES = "Get the enabled interfaces"; private const string GET_SECURITY_PARAMETERS = "Get the security parameters"; private const string GET_CONFIG_SERVER_INFO = "Get the configuration server's information"; private const string GET_CORE_VERSION = "Get the core version"; private const string GET_AUDIT_PROVISIONING_RECORD = "Get the audit provisioning record"; private const string GET_PRIVACY_LEVAL = "Get the privacy level"; // function option flags private const string GET_HOST_NAME_FLAG = "hostname"; private const string GET_ADMIN_ACL_STATUS_FLAG = "adminaclstatus"; private const string GET_ADMIN_NET_ACL_STATUS_FLAG = "adminnetaclstatus"; private const string GET_CODE_VERSIONS_FLAG = "codeversions"; private const string GET_PROVISIONING_MODE_FLAG = "provisioningmode"; private const string GET_PROVISIONING_STATE_FLAG = "provisioningstate"; private const string GET_PASSWORD_MODEL_FLAG = "passwordmodel"; private const string GET_ENABLED_INTERFACES_FLAG = "enabledinterfaces"; private const string GET_SECURITY_PARAMETERS_FLAG = "securityparameters"; private const string GET_CONFIG_SERVER_INFO_FLAG = "configserverinfo"; private const string GET_CORE_VERSION_FLAG = "coreversion"; private const string GET_AUDIT_PROVISIONING_RECORD_FLAG = "auditprovrecord"; private const string GET_PRIVACY_LEVAL_FLAG = "privacylevel"; // Exit Codes Types private enum exitCodes { EXIT_SUCCESS = 0, EXIT_FAILURE, EXIT_USAGE, EXIT_COMMUNICATION_ERROR, EXIT_ARGUMENT_ERROR, } #endregion CONSTANTS #region PRIVATE_DATA_MEMBERS //WSMan Client. // private WsmanConnection wsmanClient = null; //user parameters private static CmdLineArguments Params = new CmdLineArguments(); #endregion #region PRIVATE_METHODS private static void GetOsAdminCridentials(out string username, out string password) { try { // Get the OOB_Service object on which the method will be invoked. using (ManagementClass oob_service = new ManagementClass(@"ROOT\Intel_ME:OOB_Service")) { // Execute the method. ManagementBaseObject outParam = oob_service.InvokeMethod("GetLocalAdminCredentials", null, null); // The return value of the function (Username: $$OsAdmin, Password: random password) if (outParam != null) { username = outParam["Username"].ToString(); password = outParam["Password"].ToString(); } else { username = null; password = null; } } } catch { throw new Exception("OsAdmin credentials not found. Please check that you are running the sample from local and that WMI provider is installed."); } } #endregion #region MAIN [DllImport("kernel32.dll", CallingConvention = CallingConvention.StdCall)] [return: MarshalAs(UnmanagedType.Bool)] public static extern bool SetDefaultDllDirectories(int directoryFlags); static int Main(string[] args) { // set default dll lookup directory to system SetDefaultDllDirectories(0x00000800); //LOAD_LIBRARY_SEARCH_SYSTEM32 exitCodes exitCode = exitCodes.EXIT_SUCCESS; GeneralInfoApi api = null; int i = 0; int flag = 0; // Add command line argument options. Params.init_functions(); // Add options to activate. Params.AddArg(GET_HOST_NAME_FLAG, false, false, GET_HOST_NAME); Params.AddArg(GET_ADMIN_ACL_STATUS_FLAG, false, false, GET_ADMIN_ACL_STATUS); Params.AddArg(GET_ADMIN_NET_ACL_STATUS_FLAG, false, false, GET_ADMIN_NET_ACL_STATUS); Params.AddArg(GET_CODE_VERSIONS_FLAG, false, false, GET_CODE_VERSIONS); Params.AddArg(GET_PROVISIONING_MODE_FLAG, false, false, GET_PROVISIONING_MODE); Params.AddArg(GET_PROVISIONING_STATE_FLAG, false, false, GET_PROVISIONING_STATE); Params.AddArg(GET_PASSWORD_MODEL_FLAG, false, false, GET_PASSWORD_MODEL); Params.AddArg(GET_ENABLED_INTERFACES_FLAG, false, false, GET_ENABLED_INTERFACES); Params.AddArg(GET_SECURITY_PARAMETERS_FLAG, false, false, GET_SECURITY_PARAMETERS); Params.AddArg(GET_CONFIG_SERVER_INFO_FLAG, false, false, GET_CONFIG_SERVER_INFO); Params.AddArg(GET_CORE_VERSION_FLAG, false, false, GET_CORE_VERSION); Params.AddArg(GET_AUDIT_PROVISIONING_RECORD_FLAG, false, false, GET_AUDIT_PROVISIONING_RECORD); Params.AddArg(GET_PRIVACY_LEVAL_FLAG, false, false, GET_PRIVACY_LEVAL); // Creates usage string. string assembly = System.Reflection.Assembly.GetExecutingAssembly().GetName().Name; string usage = string.Empty; // If no params were given, just print the usage. if (args.Length == 0) { usage = Params.CreateUsage(assembly, false, true, true); Console.WriteLine("\n" + usage); return (int)exitCodes.EXIT_SUCCESS; } try { try { // Verify command line arguments. Params.Parse(args); } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine(Params.CreateUsage(assembly, false, true, true)); return 0; } //IWebProxy proxy = Params.GetWebProxy(); string username; string password; if (Params.Selected(CmdLineArguments.OPT_LOCAL)) { GetOsAdminCridentials(out username, out password); } else { username = Params[CmdLineArguments.OPT_USER]; password = Params[CmdLineArguments.OPT_PASS]; } //Create the WSMan Connection Object. //Check if TLS option is selected or not. //Convert password to secure string to comply with wsman dll which supports passwords in SecureString //format only. if (Params.Selected(CmdLineArguments.OPT_SECURE) == false) api = new GeneralInfoApi(Params[CmdLineArguments.OPT_HOST], Params[CmdLineArguments.OPT_USER], Params[CmdLineArguments.OPT_PASS].ConvertToSecureString(), Params.Selected(CmdLineArguments.OPT_KRB), Params.GetWebProxy(), Params.Selected(CmdLineArguments.ACCEPT_SELF_SIGNED_CERTIFICATE)); else api = new GeneralInfoApi(Params[CmdLineArguments.OPT_HOST], Params[CmdLineArguments.OPT_USER], Params[CmdLineArguments.OPT_PASS].ConvertToSecureString(), Params[CmdLineArguments.OPT_CERT], Params.Selected(CmdLineArguments.OPT_KRB), Params.GetWebProxy(), Params.Selected(CmdLineArguments.ACCEPT_SELF_SIGNED_CERTIFICATE));//Params[OPT_HOST], Params[OPT_USER], Params[OPT_PASS]); // Executing users choices. while (i < args.Length) { switch (args[i]) { //get privacy Level case "-" + GET_PRIVACY_LEVAL_FLAG: api.GetPrivacyLevel(); flag = 1; break; //get Provisioning record case "-" + GET_AUDIT_PROVISIONING_RECORD_FLAG: api.GetAuditProvisionRecord(); //to do flag = 1; break; //get Host name case "-" + GET_HOST_NAME_FLAG: api.GetHostName(); flag = 1; break; //get admin ACL Status case "-" + GET_ADMIN_ACL_STATUS_FLAG: api.GetAdminAclStatus(); flag = 1; break; //get admin Net ACL Status case "-" + GET_ADMIN_NET_ACL_STATUS_FLAG: api.GetAdminNetAclStatus(); flag = 1; break; //get code versions case "-" + GET_CODE_VERSIONS_FLAG: api.GetCodeVersions(); flag = 1; break; //get provisioning mode case "-" + GET_PROVISIONING_MODE_FLAG: api.GetProvisioningMode(); flag = 1; break; //get provisioning state case "-" + GET_PROVISIONING_STATE_FLAG: api.GetProvisioningState(); flag = 1; break; //get password Model case "-" + GET_PASSWORD_MODEL_FLAG: api.GetPasswordModel(); flag = 1; break; //get enabled interfaces case "-" + GET_SECURITY_PARAMETERS_FLAG: api.GetSecurityParameters(Params.Selected(CmdLineArguments.OPT_WIRELESS)); flag = 1; break; //get enabled interfaces case "-" + GET_ENABLED_INTERFACES_FLAG: api.GetEnabledInterfaces(); flag = 1; break; //get config server info case "-" + GET_CONFIG_SERVER_INFO_FLAG: api.GetConfigServerInfo(); flag = 1; break; //get core version case "-" + GET_CORE_VERSION_FLAG: api.GetCoreVersion(); flag = 1; break; default: i++; break; } //end switch if (flag == 1) break; } //end while } //end try catch (Exception e) { //Check for the Type of Exception created during execution. exitCode = (exitCodes)Params.catchType(e, null); } finally { api?.Dispose(); } return (int)exitCode; } #endregion MAIN } }