Microsoft Information Protection SDK – Policy SDK-koncept

Läs in mip::Profile innan du utför några åtgärder i Policy SDK.

Följande två exempel visar hur du skapar objektet profileSettings genom att använda lokal lagring för tillståndslagring eller endast i minnet.

Ladda en profil

När du har definierat MipContext och ProfileObserveranvänder du dem för att instansiera mip::PolicyProfile. För att skapa mip::PolicyProfile objektet krävs mip::PolicyProfile::Settings och mip::MipContext.

Profil::Inställningsparametrar

Konstruktorn PolicyProfile::Settings accepterar följande fyra parametrar:

  • const std::shared_ptr<MipContext>: Objektet mip::MipContext som initierades för att lagra programinformation, tillståndssökväg osv.
  • mip::CacheStorageType: Definierar hur du lagrar tillstånd: I minne, på disk eller på disk och krypterad. Mer information finns i begreppen cachelagring.
  • std::shared_ptr<mip::PolicyProfile::Observer> observer: En delad pekare till profilimplementeringen Observer (i PolicyProfile, ProtectionProfileoch FileProfile).

Följande två exempel visar hur du skapar objektet profileSettings genom att använda lokal lagring för tillståndslagring eller enbart i minnet.

Lagra endast tillstånd i minnet

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

Läs-/skrivprofilinställningar från lagringssökväg på disk

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

Använd sedan mönstret promise/future för att läsa in Profile.

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

Om applikationen laddar en profil korrekt, ProfileObserver::OnLoadSuccess, meddelas implementeringen av mip::Profile::Observer::OnLoadSuccess. SDK:t skickar det resulterande objektet, i det här fallet en mip::Profile, och kontexten som parametrar till observatörsfunktionen.

kontexten är en pekare till den std::promise som skapades för att hantera den asynkrona åtgärden. Funktionen anger värdet för löftet till det profilobjekt som skickades in för den första parametern. När huvudfunktionen använder Future.get()kan den lagra resultatet i ett nytt objekt i den anropande tråden.

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

Sammanfoga

När du har implementerat observatörerna och autentiseringsdelegaten kan du läsa in en profil fullständigt. Följande kodfragment förutsätter att alla nödvändiga huvuden redan ingår.

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();
}

Koden läser in profilen och lagrar den i objektet med namnet profile.

Nästa steg

Nu när profilen har lagts till är nästa steg att lägga till en motor i profilen.

Principmotorbegrepp