Microsoft Information Protection SDK - Concetti relativi al profilo di Policy SDK

Caricare mip::Profile prima di eseguire qualsiasi operazione di Policy SDK.

I due esempi seguenti illustrano come creare l'oggetto profileSettings usando l'archiviazione locale per l'archiviazione stato o solo in memoria.

Caricare un profilo

Dopo aver definito MipContext e ProfileObserver, usateli per istanziare mip::PolicyProfile. La creazione dell'oggetto mip::PolicyProfile richiede mip::PolicyProfile::Settings e mip::MipContext.

Parametri di Profile::Settings

Il PolicyProfile::Settings costruttore accetta i quattro parametri seguenti:

  • const std::shared_ptr<MipContext> mip::MipContext: oggetto inizializzato per archiviare le informazioni sull'applicazione, il percorso dello stato e così via.
  • mip::CacheStorageType: definisce come archiviare lo stato: in memoria, su disco o su disco e crittografato. Per altri dettagli, vedere i concetti relativi all'archiviazione della cache.
  • std::shared_ptr<mip::PolicyProfile::Observer> observer: puntatore condiviso all'implementazione del profilo Observer (in PolicyProfile, ProtectionProfilee FileProfile).

I due esempi seguenti illustrano come creare l'oggetto profileSettings usando l'archiviazione locale per l'archiviazione stato o solo in memoria.

Archiviare lo stato solo in memoria

mip::ApplicationInfo appInfo {clientId, "APP NAME", "1.2.3" };

std::shared_ptr<mip::MipConfiguration> mipConfiguration = std::make_shared<mip::MipConfiguration>(mAppInfo,
				                                                                                  "mip_data",
                                                                                        		  mip::LogLevel::Trace,
                                                                                                  false);

std::shared_ptr<mip::MipContext> mMipContext = mip::MipContext::Create(mipConfiguration);

PolicyProfile::Settings profileSettings(
    mMipContext,                                  // mipContext object
    mip::CacheStorageType::InMemory,              // use in memory storage
    std::make_shared<PolicyProfileObserverImpl>()); // new protection profile observer

Impostazioni del profilo di lettura/scrittura dal percorso di archiviazione su disco

mip::ApplicationInfo appInfo {clientId, "APP NAME", "1.2.3" };

std::shared_ptr<mip::MipConfiguration> mipConfiguration = std::make_shared<mip::MipConfiguration>(mAppInfo,
			                                                                                      "mip_data",
                                                                                       			  mip::LogLevel::Trace,
                                                                                                  false);

std::shared_ptr<mip::MipContext> mMipContext = mip::MipContext::Create(mipConfiguration);

PolicyProfile::Settings profileSettings(
    mipContext,                                    // mipContext object
    mip::CacheStorageType::OnDisk,                 // use on disk storage
    std::make_shared<PolicyProfileObserverImpl>());  // new protection profile observer

Usa quindi il modello promise/future per caricare il Profile.

auto profilePromise = std::make_shared<std::promise<std::shared_ptr<Profile>>>();
auto profileFuture = profilePromise->get_future();
Profile::LoadAsync(profileSettings, profilePromise);

Se l'applicazione carica correttamente un profilo, ProfileObserver::OnLoadSuccess, l'implementazione di mip::Profile::Observer::OnLoadSuccess riceve una notifica. L’SDK passa l'oggetto risultante, in questo caso un mip::Profile, e il contesto come parametri per la funzione osservatore.

Il contesto è un puntatore all'oggetto std::promise creato per gestire l'operazione asincrona. La funzione imposta il valore di Promise sull'oggetto Profile passato come primo parametro. Quando la funzione main usa Future.get(), può archiviare il risultato in un nuovo oggetto nel thread chiamante.

//get the future value and store in profile.
auto profile = profileFuture.get();

Mettere tutto insieme

Dopo aver implementato gli osservatori e il delegato di autenticazione, è possibile caricare completamente un profilo. Il frammento di codice seguente presuppone che tutte le intestazioni necessarie siano già incluse.

int main()
{
    const string userName = "MyTestUser@contoso.com";
    const string password = "P@ssw0rd!";
    const string clientId = "MyClientId";

    mip::ApplicationInfo appInfo {clientId, "APP NAME", "1.2.3" };
 
    std::shared_ptr<mip::MipConfiguration> mipConfiguration = std::make_shared<mip::MipConfiguration>(mAppInfo,
				                                                                                       "mip_data",
                                                                                        			   mip::LogLevel::Trace,
                                                                                                       false);

    std::shared_ptr<mip::MipContext> mMipContext = mip::MipContext::Create(mipConfiguration);

    PolicyProfile::Settings profileSettings(
        mMipContext,                                    // mipContext object
        mip::CacheStorageType::OnDisk,                 // use on disk storage
        std::make_shared<PolicyProfileObserverImpl>());  // new protection profile observer

    auto profilePromise = std::make_shared<promise<shared_ptr<PolicyProfile>>>();
    auto profileFuture = profilePromise->get_future();
    Profile::LoadAsync(profileSettings, profilePromise);
    auto profile = profileFuture.get();
}

Il codice carica il profilo e lo archivia nell'oggetto denominato profile.

Passaggi successivi

Dopo aver aggiunto il profilo, il passaggio successivo consiste nell'aggiungere un motore al profilo.

Concetti relativi al motore di policy