306 lines
13 KiB
C#
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
|
|
}
|
|
}
|