306 lines
13 KiB
C#

//----------------------------------------------------------------------------
//
// 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
}
}