//------------------------------------------------------------------------------------- // // Copyright (C) 2008 Intel Corporation // // File: WirelessConfigurationFlow.cpp // // Contents: Api code for Intel(R) Active Management Technology // (Intel� AMT) WirelessConfiguration Sample. // // Notes: This file contains the WirelessConfigurationFlow methods implementation. // //--------------------------------------------------------------------------------------- #include "WirelessConfigurationFlow.h" #include "WirelessConfigurationSample.h" #include "AMT_WiFiPortConfigurationService.h" #include "CIM_WiFiPort.h" #include "CIM_WiFiPortCapabilities.h" #include "CIM_WiFiEndpointSettings.h" #include "CIM_HostedAccessPoint.h" #include "CIM_ComputerSystem.h" #include "CIM_WiFiEndpoint.h" #include "AMT_PublicKeyCertificate.h" #include "CIM_IEEE8021xSettings.h" #include "CIM_ConcreteComponent.h" #include "CIM_CredentialContext.h" #include "CmdLineArguments.h" #include "LogicException.h" #include "AssociationTraversalTypedUtils.h" #include "AMT_PublicKeyManagementService.h" #include "CIM_SoftwareIdentity.h" #include // Include from CIM Framework #include "CimOpenWsmanClient.h" #include "CommonDefinitions.h" using namespace std; using namespace Intel::WSManagement; using namespace Intel::Manageability::Cim::Typed; using namespace Intel::Manageability::Exceptions; using namespace ExceptionNamespace; #pragma region CONSTANT const string DELETE_ALL_PROFILES_SUPPORTED_VERSION = "6.0"; string SSID = "Wireless-API"; #pragma endregion #pragma region MEMBERS unsigned int returnValue; CmdLineArguments::Format format; AMT_WiFiPortConfigurationService service; bool isServiceInitialize = false; string coreVersion; // The target machine's FW Core Version #pragma endregion #pragma region METHODS #pragma region PRIVATE_METHODS #pragma region PRINT_MESSAGE // Print success message void DisplaySuccess() { format.SetConsoleTextColor(HGREEN); cout << "Success" << endl; format.SetConsoleTextColor(LGRAY); } // Print fail message void DisplayFailure() { format.SetConsoleTextColor(HRED); cout << "Failed" << endl; format.SetConsoleTextColor(LGRAY); } #pragma endregion // Get AMT_WiFiPortConfigurationService AMT_WiFiPortConfigurationService GetServiceInstance(ICimWsmanClient* wsmanClient) { if(!isServiceInitialize) { service = AMT_WiFiPortConfigurationService(wsmanClient); service.Name("Intel(r) AMT WiFi Port Configuration Service"); service.Get(); isServiceInitialize = true; } return service; } // Get CIM_WiFiPort instance CIM_WiFiPort GetWiFiPortInstance(ICimWsmanClient* wsmanClient) { CIM_WiFiPort wpPtr(wsmanClient); wpPtr.DeviceID("WiFi Port 0"); wpPtr.Get(); return wpPtr; } // Get CIM_WiFiEndpoint instance CIM_WiFiEndpoint GetWiFiEndpointInstance(ICimWsmanClient* wsmanClient) { CIM_WiFiEndpoint wePtr(wsmanClient); wePtr.Name("WiFi Endpoint 0"); wePtr.Get(); return wePtr; } // Traversing the CIM_WiFiEndpointSettings instances std::vector> EnumerateWiFiEndpointSettings(ICimWsmanClient* wsmanClient) { CIM_WiFiEndpointSettings wifiEndpointSettings; std::vector> vecProfiles = wifiEndpointSettings.Enumerate(wsmanClient); return vecProfiles; } // Print the Encryption method type void PrintEncryptionMethod(int enc) { cout << "\tEncryption Method: " << enc << " ("; switch(enc) { case EncryptionMethodOther: cout << "Other"; break; case EncryptionMethodWEP: cout << "WEP"; break; case EncryptionMethodTKIP: cout << "TKIP"; break; case EncryptionMethodCCMP: cout << "CCMP"; break; case EncryptionMethodReserved: cout << "Reserved"; break; } cout << ")" << endl; } // Print the Authentication method type void PrintAuthMethod(int auth) { cout << "\tAuthentication Method: " << auth << " ("; switch(auth) { case AuthenticationMethodOther: cout <<"Other"; break; case AuthenticationMethodOpenSystem: cout <<"OpenSystem"; break; case AuthenticationMethodSharedKey: cout <<"SharedKey"; break; case AuthenticationMethodWPAPSK: cout <<"WPAPSK"; break; case AuthenticationMethodWPAIEEE802_1x: cout <<"WPAIEEE802_1x"; break; case AuthenticationMethodWPA2PSK: cout <<"WPA2PSK"; break; case AuthenticationMethodWPA2IEEE802_1x: cout <<"WPA2IEEE802_1x"; break; case AuthenticationMethodDMTFReserved: cout <<"DMTFReserved"; break; } cout << ")" << endl; } // Print the Encryption method type void PrintAuthProtocol802_1x(int auth) { cout << "\tAuthentication Protocol: " << auth << " ("; switch(auth) { case AuthenticationMethods802_1xEAP_TLS: cout <<"802.1x EAP TLS"; break; case AuthenticationMethods802_1xEAP_TTLS: cout <<"802.1x EAP TTLS"; break; case AuthenticationMethods802_1xPEAPv0: cout <<"802.1x PEAPv0"; break; case AuthenticationMethods802_1xPEAPv1: cout <<"802.1x PEAPv1"; break; case AuthenticationMethods802_1xEAP_FAST_MSCHAPv2: cout <<"802.1x EAP FAST MSCHAPv2"; break; case AuthenticationMethods802_1xEAP_FAST_GTC: cout <<"802.1x EAP FAST GTC"; break; case AuthenticationMethods802_1xEAP_MD5: cout <<"802.1x EAP MD5"; break; case AuthenticationMethods802_1xEAP_PSK: cout <<"802.1x EAP PSK"; break; case AuthenticationMethods802_1xEAP_SIM: cout <<"802.1x EAP SIM"; break; case AuthenticationMethods802_1xEAP_AKA: cout <<"802.1x EAP AKA"; break; case AuthenticationMethods802_1xEAP_FAST_TLS: cout <<"802.1x EAP FAST TLS"; break; case AuthenticationMethods802_1xDMTF_Reserved: cout <<"802.1x DMTF Reserved "; break; } cout << ")" << endl; } #pragma endregion #pragma region MAIN_METHODS // Update profile void UpdateProfile(ICimWsmanClient* wsmanClient, string profileName, unsigned short profilePriority, bool verbose) { cout << "Updating Wireless Profile... "; CIM_WiFiEndpointSettings wesObj; std::vector> vecProfiles; // Retrieve the CIM_WiFiEndpointSettings instances vecProfiles = EnumerateWiFiEndpointSettings(wsmanClient); std::vector> ::iterator itr; for(itr = vecProfiles.begin() ;itr != vecProfiles.end(); itr++) { wesObj = *((CIM_WiFiEndpointSettings*)(*itr).get()); if(wesObj.ElementName().compare(profileName) == 0) break; } if(itr == vecProfiles.end()) { DisplayFailure(); cout << "Error: Can't update profile " << profileName << " since it does not exist." << endl; return; } CIM_WiFiEndpointSettings wifiSettings(wsmanClient); wifiSettings.AuthenticationMethod(wesObj.AuthenticationMethod()); wifiSettings.BSSType(wesObj.BSSType()); wifiSettings.ElementName(wesObj.ElementName()); wifiSettings.EncryptionMethod(wesObj.EncryptionMethod()); wifiSettings.InstanceID(wesObj.InstanceID()); wifiSettings.PSKPassPhrase(PskPassPhrase); string content = "1"; Base64 base(content); wifiSettings.PSKValue(base); wifiSettings.Priority(profilePriority); wifiSettings.SSID(SSID); AMT_WiFiPortConfigurationService service; // Retrieve the AMT_WiFiPortConfigurationService instance service = GetServiceInstance(wsmanClient); AMT_WiFiPortConfigurationService::UpdateWiFiSettings_INPUT input; AMT_WiFiPortConfigurationService::UpdateWiFiSettings_OUTPUT output; input.WiFiEndpointSettings(wesObj.Reference()); input.WiFiEndpointSettingsInput(wifiSettings); returnValue = service.UpdateWiFiSettings(input, output); if(returnValue != PT_STATUS_SUCCESS) { throw LogicException("Failed to invoke UpdateWiFiSettings, returnValue = ", returnValue); } DisplaySuccess(); if(verbose) { cout << endl << "Update Wireless Profile with the following parameters:" << endl; if(wifiSettings.ElementNameExists()) cout << "\tElement Name: " << wifiSettings.ElementName() << endl; if(wifiSettings.SSIDExists()) cout << "\tSSID: " << wifiSettings.SSID() << endl; if(wifiSettings.PriorityExists()) cout << "\tPriority: " << (int)wifiSettings.Priority() << endl; if(wifiSettings.AuthenticationMethodExists()) PrintAuthMethod(wifiSettings.AuthenticationMethod()); if(wifiSettings.EncryptionMethodExists()) PrintEncryptionMethod(wifiSettings.EncryptionMethod()); } } // Function delete all profiles. // This function will use delete all User Profiles & delete all IT profiles. void DeleteAllProfiles(ICimWsmanClient* wsmanClient, bool verbose) { GetCoreVersion(wsmanClient); if(Version(coreVersion) > Version(DELETE_ALL_PROFILES_SUPPORTED_VERSION) || Version(coreVersion) == Version(DELETE_ALL_PROFILES_SUPPORTED_VERSION)) { cout << endl << "Delete All Profiles... "; AMT_WiFiPortConfigurationService service; // Retrieve the WiFiPortConfigurationService service = GetServiceInstance(wsmanClient); // try deleting all User Profiles returnValue = service.DeleteAllUserProfiles(); if(returnValue != PT_STATUS_SUCCESS) { throw LogicException("Failed to invoke DeleteAllUserProfiles, returnValue = ", returnValue); } // try deleting all IT Profiles returnValue = service.DeleteAllITProfiles(); if(returnValue != PT_STATUS_SUCCESS) { throw LogicException("Failed to invoke DeleteAllITProfiles, returnValue = ", returnValue); } DisplaySuccess(); } else { cout << endl << "Delete All Profiles is not supported in FW versions lower than 6.0"; DisplayFailure(); } } // add a specific profile based on the parameters // mentioned in the h file // Authentication Method WPAPSK void AddProfile(ICimWsmanClient* wsmanClient, string profileName, EncryptionMethods encryptionMethod, unsigned short profilePriority, bool verbose) { cout << endl << "Adding Wireless Profile... "; CIM_WiFiEndpoint wifiEndpoint; // Retrieve the CIM_WiFiEndpoint instance wifiEndpoint = GetWiFiEndpointInstance(wsmanClient); CIM_WiFiEndpointSettings wifiSettings(wsmanClient); wifiSettings.AuthenticationMethod(AuthenticationMethodWPA2PSK); wifiSettings.ElementName(profileName); wifiSettings.EncryptionMethod(encryptionMethod); wifiSettings.InstanceID(InstanceIDIT + profileName); wifiSettings.PSKPassPhrase(PskPassPhrase); string content = "1"; Base64 base(content); wifiSettings.PSKValue(base); wifiSettings.Priority(profilePriority); wifiSettings.SSID(SSID); AMT_WiFiPortConfigurationService service; // Retrieve the AMT_WiFiPortConfigurationService instance service = GetServiceInstance(wsmanClient); AMT_WiFiPortConfigurationService::AddWiFiSettings_INPUT input; AMT_WiFiPortConfigurationService::AddWiFiSettings_OUTPUT output; input.WiFiEndpoint(wifiEndpoint.Reference()); input.WiFiEndpointSettingsInput(wifiSettings); returnValue = service.AddWiFiSettings(input, output); if(returnValue != PT_STATUS_SUCCESS) { throw LogicException("Failed to invoke AddWiFiSettings, returnValue = ", returnValue); } DisplaySuccess(); if(verbose) { cout << endl << "Adding a Wireless Profile with the following parameters:" << endl; if(wifiSettings.ElementNameExists()) cout << "\tElement Name: " << wifiSettings.ElementName() << endl; if(wifiSettings.SSIDExists()) cout << "\tSSID: " << wifiSettings.SSID() << endl; if (wifiSettings.PriorityExists()) cout << "\tPriority: " << (int)wifiSettings.Priority() << endl; if(wifiSettings.AuthenticationMethodExists()) PrintAuthMethod(wifiSettings.AuthenticationMethod()); if(wifiSettings.EncryptionMethodExists()) PrintEncryptionMethod(wifiSettings.EncryptionMethod()); } cout << endl; } // Print the WIFI capabilities that this machine supports void WiFiCapabilities(ICimWsmanClient* wsmanClient, bool verbose) { cout << "Wireless Capabilities... "; CIM_WiFiPortCapabilities WiFiPortCapabilities(wsmanClient); WiFiPortCapabilities.InstanceID("Intel(r) AMT:WiFi Port 0 Capabilities"); WiFiPortCapabilities.Get(); DisplaySuccess(); if(verbose) { cout << endl << "Supported Features:" << endl; for(unsigned int i = 0; i < WiFiPortCapabilities.SupportedPortTypes().size(); i++) { switch(WiFiPortCapabilities.SupportedPortTypes()[i]) { case SupportedCapabilitiesP802_11a: cout <<"\t802.11a" << endl; break; case SupportedCapabilitiesP802_11b: cout <<"\t802.11b" << endl; break; case SupportedCapabilitiesP802_11g: cout <<"\t802.11g" << endl; break; case SupportedCapabilitiesP802_11n: cout <<"\t802.11n" << endl; break; default: printf("\tUnknown\n"); break; } } } cout << endl; } // Authentication mode WPA IEEE802.1x // 802.1x settings - EAP TLS // Authentication Method EAP TLS void AddProfile802_1x(ICimWsmanClient* wsmanClient, string profileName, EncryptionMethods encryptionMethod, bool verbose) { cout << "Adding Wireless Profile... "; CIM_WiFiEndpoint wifiEndpoint = GetWiFiEndpointInstance(wsmanClient); // WifiEndPoint settings CIM_WiFiEndpointSettings wifiSettings(wsmanClient); wifiSettings.AuthenticationMethod(AuthenticationMethodWPAIEEE802_1x); wifiSettings.ElementName(profileName); wifiSettings.EncryptionMethod(encryptionMethod); wifiSettings.InstanceID(InstanceIDIT + profileName); wifiSettings.Priority(Priority802_11x); wifiSettings.SSID(SSID); // 802.1x settings CIM_IEEE8021xSettings settings802_1x(wsmanClient); settings802_1x.AuthenticationProtocol(AuthenticationMethods802_1xEAP_TLS); settings802_1x.ElementName(profileName); settings802_1x.InstanceID(profileName); settings802_1x.Username(UserWireless); // Managed certificate object. AMT_PublicKeyManagementService publicKeyManagementService(wsmanClient); // Add public key. AMT_PublicKeyManagementService::AddCertificate_INPUT addCertificate_INPUT; AMT_PublicKeyManagementService::AddCertificate_OUTPUT addCertificate_OUTPUT; addCertificate_INPUT.CertificateBlob(Base64("MIICdDCCAd2gAwIBAgIBATANBgkqhkiG9w0BAQsFADAZMRcwFQYDVQQDFA5EZW1vIFN1YiBDQSAjMTAeFw0xMTExMjgwNzI2MDhaFw0xMjExMjcwNzI2MDhaMBgxFjAUBgNVBAMTDWR1dC5pbnRlbC5jb20wgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOqGOUQJZhvo57WSyg6tu4SdakCo7k4tXcVyWxOte6hS7CHHmQCrmcOBtJLeG6ALOG0PeypYNT8iQVIYkNGGJQdwSNaAKmK/b8BWrXnqmJkb7EQaHL3HoHPV0K0Hi4zibqhaxdZ4NyK45GKU6G+I/u90Pi0O3ef3yqwbfeCAGXS5AgMBAAGjgcwwgckwCQYDVR0TBAIwADALBgNVHQ8EBAMCB4AwEgYDVR0lAQH/BAgwBgYEWhUOCDAdBgNVHQ4EFgQU9rDsvUcGs/235QA660xH3kjptNMwWgYDVR0jBFMwUYAUd3fG6KXZZ5TrPh4g5li5enIxdUOhNqQ0MDIxFTATBgNVBAMTDERlbW8gUm9vdCBDQTELMAkGA1UEBhMCSUwxDDAKBgNVBAsTA0ZUTIIBATAgBgNVHR8EGTAXMBWgE6ARhg9odHRwOi8vc29tZS51cmwwDQYJKoZIhvcNAQELBQADgYEAl2r/DMnx5mi1DiiWHIc6iDC843k8el7gLDTS3zl+JH+nbTNSeAOY352vT2aY/pVLKA6+DykxFbyG/bYdHmRCr/F7OkXMOwX8Ik0bT5/SPKPzSFoGEubyau2uRURT5pUUws97Bkj5fXMakolqauRReHMG9bNvI4FswrIaqZCo1eg=")); publicKeyManagementService.AddCertificate(addCertificate_INPUT, addCertificate_OUTPUT); // Add private key. AMT_PublicKeyManagementService::AddKey_INPUT addKey_INPUT; AMT_PublicKeyManagementService::AddKey_OUTPUT addKey_OUTPUT; addKey_INPUT.KeyBlob(Base64("MIICWwIBAAKBgQDqhjlECWYb6Oe1ksoOrbuEnWpAqO5OLV3FclsTrXuoUuwhx5kAq5nDgbSS3hugCzhtD3sqWDU/IkFSGJDRhiUHcEjWgCpiv2/AVq156piZG+xEGhy9x6Bz1dCtB4uM4m6oWsXWeDciuORilOhviP7vdD4tDt3n98qsG33ggBl0uQIDAQABAoGAbcKD6qO7djR6vTAGAPiuWlKR99EYNt5klJQArCT1SsIEYYrYwMePH0EFEfeBVlXqAqDMM/U0dmfBynpUzLrLeNo49TGKuTIgADpykXT3IXU90Z3HAoA/XSr3ozdjP2+/d8UEYgMW2tnttu/aIJJ7ZIgQhXf6LeIWKP6YcZjo2AECQQD/NfOrueTInpPe9RGtFSJrC+g62+jeVXP0+sHR9fHsvCM3kNn6wEeOR23s8Qr3FEehJ8RA1PrPA7M3uLJINmvxAkEA6z/lAy4INNZcuP/AtztuTtzUXRyBhUEjlM9j8H0+Y+DuEGjgHehiTe4kWdXeygm2Wg5q3t01kfl9/cyGE+B9SQJARkUXs9f6e5bWRlSaKlsgX/MmXVaBtv42cGS/C0258CIZXEphCp741N8sEEqKZ1/JHUFy0xsReACfzx7mz+VUMQJAeLpcrAoWmg8cnLBb1W0BiiVYMsSrT5iDSx43mrabqyRG6FL6GT8mG/pH23aflC3x0Duv6tm5YUWZvAMXF+JQSQJAD02ZRno3bkmRmpZgq4bWJgKd9ko8iL+425xwwH++eBAKdvrbnvEE3FVNkR4Z/t1OnrR0NjUWrPk42Ln4kHDPQg==")); publicKeyManagementService.AddKey(addKey_INPUT, addKey_OUTPUT); AMT_WiFiPortConfigurationService service; // Retrieve the AMT_WiFiPortConfigurationService instance service = GetServiceInstance(wsmanClient); AMT_WiFiPortConfigurationService::AddWiFiSettings_INPUT input; AMT_WiFiPortConfigurationService::AddWiFiSettings_OUTPUT output; // Fill the input structure with the Wifi settings, 802.1x settings and // client certificate settings input.WiFiEndpoint(wifiEndpoint.Reference()); input.WiFiEndpointSettingsInput(wifiSettings); input.IEEE8021xSettingsInput(settings802_1x); input.ClientCredential(addCertificate_OUTPUT.CreatedCertificate()); // invoke the actual add profile function returnValue = service.AddWiFiSettings(input, output); if(returnValue != PT_STATUS_SUCCESS) { throw LogicException("Failed to invoke AddWiFiSettings, returnValue = ", returnValue); } DisplaySuccess(); // print the profile that was added in case verbose mode specified if(verbose) { cout << "Adding a Wireless Profile with the following parameters:" << endl; if(wifiSettings.ElementNameExists()) cout << "\tElement Name: " << wifiSettings.ElementName() << endl; if(wifiSettings.SSIDExists()) cout << "\tSSID: " << wifiSettings.SSID() << endl; if(wifiSettings.PriorityExists()) cout << "\tPriority: " << (int)wifiSettings.Priority() << endl; PrintAuthMethod(AuthenticationMethodWPAIEEE802_1x); PrintEncryptionMethod(encryptionMethod); cout << "\t802.1x Settings:" << endl; cout << "\t"; PrintAuthProtocol802_1x(settings802_1x.AuthenticationProtocol()); cout << "\t\tUsername: " << settings802_1x.Username() << endl; CimReference r; AMT_PublicKeyCertificate createdCertificate(wsmanClient); createdCertificate.Get(addCertificate_OUTPUT.CreatedCertificate()); cout << "\tCertificate Settings:" << endl; cout << "\t\tInstanceID:" << createdCertificate.InstanceID() << endl; if(createdCertificate.ElementNameExists()) cout << "\t\tElement Name:" << createdCertificate.ElementName() << endl; if(createdCertificate.SubjectExists()) cout << "\t\tSubject:" << createdCertificate.Subject() << endl; } cout << endl; } // Enumerate all profiles and print each of them void EnumerateProfiles(ICimWsmanClient* wsmanClient, int &numOfProfiles, bool verbose) { cout << "Enumerate Profiles... "; std::vector> vecProfiles; // Retrieve the CIM_WiFiEndpointSettings instances vecProfiles = EnumerateWiFiEndpointSettings(wsmanClient); DisplaySuccess(); if(vecProfiles.size() > 0) { for(unsigned int i=0; i > vecConcreteComp = AssociationTraversalTypedUtils::EnumerateAssociated(wsmanClient, wesObj.Reference(), "CIM_IEEE8021xSettings" ,"CIM_ConcreteComponent"); // Expecting 1 instance if(vecConcreteComp.size() > 0) { CIM_IEEE8021xSettings set802_1x = *(static_cast(vecConcreteComp[0].get())); if(verbose) { cout << "\t802.1x Settings:" << endl; if(set802_1x.ElementNameExists()) cout << "\t\tElement Name: " << set802_1x.ElementName() << endl; if(set802_1x.AuthenticationProtocolExists()) { cout << "\t"; PrintAuthProtocol802_1x(set802_1x.AuthenticationProtocol()); } if(set802_1x.UsernameExists()) cout << "\t\tUsername: " << set802_1x.Username() << endl; } // Find the association between 802.1x to public key certificate // Traverse the AMT_PublicKeyCertificate vector > vecCredentialCont = AssociationTraversalTypedUtils::EnumerateAssociated(wsmanClient, set802_1x.Reference(), "AMT_PublicKeyCertificate", "CIM_CredentialContext"); // Expecting 1 instance if(vecCredentialCont.size() > 0) { AMT_PublicKeyCertificate cert = *(static_cast(vecCredentialCont[0].get())); if(verbose) { cout << "\tCertificate Settings:" << endl; cout << "\t\tInstanceID:" << cert.InstanceID() << endl; if(cert.ElementNameExists()) cout << "\t\tElement Name:" << cert.ElementName() << endl; if(cert.SubjectExists()) cout << "\t\tSubject:" << cert.Subject() << endl; } } } } } else { if(verbose) { cout << endl << "No Profiles Available" << endl; } } numOfProfiles = vecProfiles.size(); } // delete a profile corresponding to the given profileName void DeleteProfile(ICimWsmanClient* wsmanClient, string profileName, bool verbose) { // Determine whether to delete all profiles or delete a specific profile bool deleteAll = (profileName.compare("") == 0); if(deleteAll) cout << "Delete All Profiles... "; else cout << endl << "Delete Profile "<< profileName << "... "; std::vector > vecProfiles; // Retrieve the CIM_WiFiEndpointSettings instances vecProfiles = EnumerateWiFiEndpointSettings(wsmanClient); if(vecProfiles.size() == 0) { cout << "No profiles exist." << endl << endl; return; } int profilesDeleted = 0; std::vector > ::iterator itr; for(itr = vecProfiles.begin() ; itr!=vecProfiles.end() ; itr++) { CIM_WiFiEndpointSettings wesObj = *((CIM_WiFiEndpointSettings*)(*itr).get()); // if delete all instances is specified it will always enter this loop if(deleteAll || (wesObj.InstanceID().compare(InstanceIDIT + profileName) == 0)) { wesObj.Delete(); profilesDeleted++; } } if (profilesDeleted > 0) { DisplaySuccess(); } else if (!deleteAll) { cout << endl << "No profiles exist corresponding with ElementName " << profileName << endl; } cout << endl; } // Get the local profile synchronization void GetLocalProfileSynch(ICimWsmanClient* wsmanClient, bool verbose) { cout << "Get Local Profile Synchronization... "; AMT_WiFiPortConfigurationService service; // Retrieve the AMT_WiFiPortConfigurationService instance service = GetServiceInstance(wsmanClient); DisplaySuccess(); string s = ""; if(service.localProfileSynchronizationEnabledExists()) { switch(service.localProfileSynchronizationEnabled()) { case LocalSynchronizationDisabled: s = "Local Synchronization Disabled"; break; case LocalUserProfileSynchronization: s = "Local User Profile Synchronization"; break; case LocalAdminProfileSynchronization: s = "Local Admin Profile Synchronization"; break; case UnrestrictedSynchronization: s = "Unrestricted Synchronization"; break; default: s = "Local Synchronization Reserved"; break; } } else { s = "Local Profile Synchronization Unspecified"; } if(verbose) { cout << s << endl; } } // Set the local profile synchronization void SetLocalProfileSynch(ICimWsmanClient* wsmanClient, unsigned int syncType, bool verbose) { cout << "Set Local Profile Synchronization... "; AMT_WiFiPortConfigurationService service; // Retrieve the AMT_WiFiPortConfigurationService instance service = GetServiceInstance(wsmanClient); // Set the value we want to update service.localProfileSynchronizationEnabled(syncType); // Update the data service.Put(); DisplaySuccess(); } /***************************************************************************** * Function that returns the AMT's core version. * Arguments: * fwCoreVersion - [out] core version. ****************************************************************************/ void GetCoreVersion(ICimWsmanClient* wsmanClient) { if (coreVersion.empty()) { try { CIM_SoftwareIdentity softwareIdentity(wsmanClient); CIM_SoftwareIdentity::CimKeys keys; keys.InstanceID("AMT FW Core Version"); softwareIdentity.Get(keys); coreVersion = softwareIdentity.VersionString().c_str(); } catch (...) { cout << "\nError: Get Core Version Failed." << endl; throw; } } } #pragma endregion #pragma endregion