Freigeben über


Microsoft Information Protection SDK – Konzepte der File-SDK-Engine

Das Profil ist die Stammklasse für alle Vorgänge im MIP SDK. Bevor Sie die Funktionen des File SDK nutzen können, müssen Sie ein FileProfile erstellen. Alle zukünftigen Vorgänge werden durch das Profil oder durch andere dem Profil hinzugefügte Objekte ausgeführt.

Es gibt einige Codevoraussetzungen, die erfüllt werden sollten, bevor Sie versuchen, ein Profil zu instanziieren:

  • MipContext wurde erstellt und in einem Objekt gespeichert, das für das mip::FileProfile-Objekt zugänglich ist.
  • ConsentDelegateImpl implementiert mip::ConsentDelegate.
  • Die Anwendung wurde in der Microsoft Entra-ID registriert, und die Client-ID ist hartcodiert in den Anwendungs- oder Konfigurationsdateien.
  • Eine Klasse, die mip::FileProfile::Observer erbt, wurde entsprechend implementiert.

Ein Profil laden

Nachdem ProfileObserver und ConsentDelegateImpl definiert sind, kann nun mip::FileProfile instanziiert werden. Das Erstellen des mip::FileProfile-Objekts erfordert, dass [mip::MipContext ] alle Informationen über die Einstellungen des FileProfile hat und dass mip::FileProfile::Settings sie speichert.

FileProfile::Settings Parameter

Der FileProfile::Settings-Konstruktor akzeptiert fünf Parameter, die im Folgenden aufgeführt sind:

  • 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.
  • std::shared_ptr<mip::ConsentDelegate>: Ein gemeinsam genutzter Zeiger der Klasse mip::ConsentDelegate.
  • std::shared_ptr<mip::FileProfile::Observer> observer: Ein gemeinsam genutzter Zeiger auf die Profilimplementierung Observer (in PolicyProfile, ProtectionProfile und FileProfile).

Die folgenden Beispiele zeigen, wie Sie das profileSettings-Objekt mithilfe des lokalen Speichers für den Zustandsspeicher sowie nur im Arbeitsspeicher erstellen.

Nur Speicherstatus im Arbeitsspeicher

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

FileProfile::Settings profileSettings(
    mMipContext,                                  // mipContext object
    mip::CacheStorageType::InMemory,              // use in memory storage
    std::make_shared<ConsentDelegateImpl>(),      // new consent delegate
    std::make_shared<FileProfileObserverImpl>()); // new protection profile observer

Profileinstellungen mit Lese-/Schreibzugriff vom Speicherpfad auf der Disk

Der folgende Code-Snip weist FileProfile an, alle App-Statusdaten in ./mip_app_data zu 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);

FileProfile::Settings profileSettings(
    mMipContext,                                   // mipContext object
    mip::CacheStorageType::OnDisk,                 // use on disk storage    
    std::make_shared<ConsentDelegateImpl>(),       // new consent delegate
    std::make_shared<FileProfileObserverImpl>());  // new protection profile observer

Das Profil laden

Verwenden Sie bei beiden oben beschriebenen Vorgehensweisen das Zusage-/zukünftige Muster, um das Zusage-/Zukünftige Muster in FileProfile zu laden.

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

Wenn wir ein Profil geladen haben und dieser Vorgang erfolgreich war, ProfileObserver::OnLoadSuccess, wird unsere Implementierung mip::FileProfile::Observer::OnLoadSuccess aufgerufen. Der resultierende Objekt- oder Ausnahmezeiger sowie der Kontext werden als Parameter an die Funktion ü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 FileProfile-Objekt fest, das für den ersten Parameter übergeben wurde. Wenn die Standard-Funktion Future.get() verwendet, kann das Ergebnis in einem neuen Objekt 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@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);

    FileProfile::Settings profileSettings(
        mMipContext,                                   // MipContext object
        mip::CacheStorageType::OnDisk,                 // use on disk storage        
        std::make_shared<ConsentDelegateImpl>(),       // new consent delegate
        std::make_shared<FileProfileObserverImpl>());  // new file profile observer

        auto profilePromise = std::make_shared<promise<shared_ptr<FileProfile>>>();
        auto profileFuture = profilePromise->get_future();
        FileProfile::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.