Microsoft Information Protection SDK - Concepten van file-SDK-engine

De mip::FileEngine in de MIP File SDK biedt een interface voor alle bewerkingen die namens een opgegeven identiteit worden uitgevoerd. Voeg één engine toe voor elke gebruiker die zich aanmeldt bij de toepassing. De engine voert alle bewerkingen uit in de context van die identiteit.

De FileEngine heeft twee hoofdtaken: labels weergeven voor een geverifieerde gebruiker en bestandshandlers aanmaken om bestandsbewerkingen uit te voeren namens de gebruiker.

  • mip::FileEngine
  • ListSensitivityLabels(): Haalt de lijst met labels van de geladen engine op.
  • CreateFileHandler(): Hiermee maakt u een mip::FileHandler voor een specifiek bestand of een specifieke stream.

Een bestandsengine toevoegen

Zoals wordt behandeld in profiel- en engineobjecten, kan een engine twee statussen hebben: CREATED of LOADED. Als het niet een van deze twee statussen is, bestaat het niet. Als u een status wilt maken en laden, maakt u één aanroep naar FileProfile::LoadAsync. Als de engine al in de cache bestaat, is deze LOADED. Als het niet bestaat, is het CREATED en LOADED. CREATED impliceert dat de toepassing beschikt over alle informatie van de service die nodig is om de engine te laden. LOADED impliceert dat alle gegevensstructuren die nodig zijn voor het gebruik van de engine in het geheugen aanwezig zijn.

Instellingen voor bestandsengine maken

Net als bij een profiel vereist de engine ook een instellingenobject. mip::FileEngine::Settings Dit object slaat de unieke engine-id, de mip::AuthDelegate implementatie, aanpasbare clientgegevens op voor foutopsporing of telemetrie, en optioneel de landinstelling.

Hier maken we een FileEngine::Settings object met de naam engineSettings met behulp van de identiteit van de toepassingsgebruiker.

FileEngine::Settings engineSettings(
  mip::Identity(mUsername), // mip::Identity.
  authDelegateImpl,         // auth delegate object
  "",                       // Client data. Customizable by developer, stored with engine.
  "en-US",                  // Locale.
  false);                   // Load sensitive information types for driving classification.

Stel bij het maken van engineSettings op deze manier ook expliciet een unieke engineId in:

engineSettings.SetEngineId(engineId);

Door de gebruikersnaam of e-mail te gebruiken, zorgt u ervoor dat dezelfde engine telkens wordt geladen wanneer de gebruiker de service of toepassing gebruikt.

Geldig is ook het verstrekken van een aangepaste engine-id:

FileEngine::Settings engineSettings(
  "myEngineId",     // string
  authDelegateImpl, // auth delegate object
  "",               // Client data in string format. Customizable by developer, stored with engine.
  "en-US",          // Locale. Default is en-US
  false);           // Load sensitive information types for driving classification. Default is false.

Als best practice gebruikt u een eerste parameter, iddie de engine verbindt met de bijbehorende gebruiker. Een e-mailadres, UPN of Microsoft Entra object-GUID zorgt ervoor dat de id uniek is en kan worden geladen vanuit de lokale status zonder de service aan te roepen.

De bestandsengine toevoegen

Als u de engine wilt toevoegen, keert u terug naar het promise/future-patroon dat wordt gebruikt om het profiel te laden. In plaats van de belofte voor mip::FileProfilete maken, maakt u deze met behulp van mip::FileEngine.

  //auto profile will be std::shared_ptr<mip::FileProfile>
  auto profile = profileFuture.get();

  // Instantiate the AuthDelegate implementation.
  auto authDelegateImpl = std::make_shared<sample::auth::AuthDelegateImpl>(appInfo, userName, password);

  //Create the FileEngine::Settings object
  FileEngine::Settings engineSettings("UniqueID", authDelegateImpl, "");

  //Create a promise for std::shared_ptr<mip::FileEngine>
  auto enginePromise = std::make_shared<std::promise<std::shared_ptr<mip::FileEngine>>>();

  //Instantiate the future from the promise
  auto engineFuture = enginePromise->get_future();

  //Add the engine using AddEngineAsync, passing in the engine settings and the promise
  profile->AddEngineAsync(engineSettings, enginePromise);

  //get the future value and store in std::shared_ptr<mip::FileEngine>
  auto engine = engineFuture.get();

De code voegt de engine voor de geauthenticeerde gebruiker aan het profiel toe.

Vertrouwelijkheidslabels vermelden

Met behulp van de toegevoegde engine kunt u alle vertrouwelijkheidslabels weergeven die beschikbaar zijn voor de geverifieerde gebruiker door aan te roepen engine->ListSensitivityLabels().

ListSensitivityLabels() haalt de lijst met labels en kenmerken van deze labels voor een specifieke gebruiker van de service op. Het resultaat wordt opgeslagen in een vector van std::shared_ptr<mip::Label>.

Zie de mip::Label klassereferentie voor meer informatie.

ListSensitivityLabels()

std::vector<shared_ptr<mip::Label>> labels = engine->ListSensitivityLabels();

Of vereenvoudigd:

auto labels = engine->ListSensitivityLabels();

Het afdrukken van de namen laat zien dat de applicatie het beleid van de service heeft opgehaald en de labels heeft opgehaald. Als u het label wilt toepassen, hebt u de label-id nodig. De volgende code doorloopt alle labels en geeft voor elk bovenliggend en onderliggend label de name en de id weer.

//Iterate through all labels in the vector
for (const auto& label : labels) {
  //Print label name and GUID
  cout << label->GetName() << " : " << label->GetId() << endl;

  //Print child label name and GUID
  for (const auto& child : label->GetChildren()) {
    cout << "->  " << child->GetName() <<  " : " << child->GetId() << endl;
  }
}

U kunt de door GetSensitivityLabels() geretourneerde verzameling mip::Label gebruiken om alle labels weer te geven die beschikbaar zijn voor de gebruiker en vervolgens, wanneer een label is geselecteerd, de ID gebruiken om labels op een bestand toe te passen.

Volgende stappen 

Nu het profiel is geladen, wordt de engine toegevoegd en zijn labels beschikbaar, kunt u een handler toevoegen om labels te lezen, schrijven of verwijderen uit bestanden. Zie Bestandshandlers in de MIP SDK voor meer informatie.