Freigeben über


Microsoft Information Protection-SDK – Konzepte des Policy-SDK-Profils

Das mip::Profile muss geladen werden, bevor irgendwelche Policy-SDK-Vorgänge ausgeführt werden können.

In den beiden folgenden Beispielen wird gezeigt, wie Sie das profileSettings-Objekt erstellen, indem Sie entweder den lokalen Speicher für die Speicherung des Zustands oder nur den Arbeitsspeicher verwenden.

Ein Profil laden

Da MipContext und ProfileObserver jetzt definiert sind, werden wir sie verwenden, um mip::PolicyProfile zu instanziieren. Damit das mip::PolicyProfile-Objekt erstellt werden kann, werden mip::PolicyProfile::Settings und mip::MipContext benötigt.

Profil - Einstellungsparameter

Der PolicyProfile::Settings-Konstruktor akzeptiert vier Parameter, die im Folgenden aufgeführt sind:

  • const std::shared_ptr<MipContext>: Das mip::MipContext Objekt, das initialisiert wurde, um Anwendungsinformationen, Statuspfad usw. zu speichern.
  • mip::CacheStorageType: Legt fest, wie der Status zu speichern ist: Im Speicher, auf der Festplatte, oder auf der Festplatte und verschlüsselt. Weitere Details finden Sie in den Cachespeicherkonzepten.
  • std::shared_ptr<mip::PolicyProfile::Observer> observer: Ein gemeinsam genutzter Zeiger auf die Profilimplementierung Observer (in PolicyProfile, ProtectionProfile und FileProfile).

In den beiden folgenden Beispielen wird gezeigt, wie Sie das Profileinstellungen-Objekt erstellen, indem Sie entweder den lokalen Speicher für die Statusspeicherung oder ausschließlich den Arbeitsspeicher verwenden.

Zustand nur im Arbeitsspeicher speichern

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

Profileinstellungen mit Lese-/Schreibzugriff vom Speicherpfad auf der 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

Verwenden Sie als Nächstes das Zusage-/zukünftige Muster, um in Profile zu laden.

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

Wenn ein Profil erfolgreich geladen wurde, ProfileObserver::OnLoadSuccess, wird unsere Implementierung von mip::Profile::Observer::OnLoadSuccess darüber benachrichtigt. Das resultierende Objekt, in diesem Fall ein mip::Profile, sowie der Kontext, werden als Parameter an die Beobachterfunktion übergeben.

Der Kontext ist ein Zeiger auf den std::promise, den wir erstellt haben, um den asynchronen Vorgang zu behandeln. Die Funktion legt einfach den Wert der Zusage auf das Profile-Objekt fest, das für den ersten Parameter übergeben wurde. Wenn die Standard-Funktion Future.get() verwendet, kann das Ergebnis in einem neuen Objekt im aufrufenden Thread gespeichert werden.

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

Zusammenführung

Nachdem die Beobachter und der Authentifizierungsdelegat vollständig implementiert wurden, ist es jetzt möglich, ein Profil vollständig zu laden. Im folgenden Code-Snip wird davon ausgegangen, dass alle erforderlichen Header bereits enthalten sind.

int main()
{
    const string userName = "MyTestUser@consoto.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();
}

Als Endergebnis haben wir das Profil erfolgreich geladen und im profilegenannten Objekt gespeichert haben.

Nächste Schritte

Nachdem das Profil hinzugefügt wurde, besteht der nächste Schritt darin, dem Profil eine Engine hinzuzufügen.

Richtlinien-Enginekonzepte