Microsoft Information Protection SDK: conceptos de perfil del SDK de directiva

Debe cargarse antes de que se puedan realizar las mip::Profile operaciones del SDK de directiva.

Los dos ejemplos siguientes muestran cómo crear el objeto profileSettings con almacenamiento local para almacenamiento de estado, así como solo en memoria.

Cargar un perfil

Ahora que el MipContext y ProfileObserver están definidos, los usaremos para crear instancias mip::PolicyProfile de . La creación mip::PolicyProfile del objeto requiere y mip::PolicyProfile::Settingsmip::MipContext .

Perfil::Configuración parámetros

El PolicyProfile::Settings constructor acepta cuatro parámetros, enumerados a continuación:

  • const std::shared_ptr<MipContext>: el mip::MipContext objeto que se inicializó para almacenar información de la aplicación, ruta de acceso de estado, etc.
  • mip::CacheStorageType: Define cómo almacenar el estado: en la memoria, en el disco o en el disco y cifrado. Para obtener más información, vea conceptos de almacenamiento en caché.
  • std::shared_ptr<mip::PolicyProfile::Observer> observer: Un puntero compartido a la implementación del Observer perfil (en PolicyProfile , y ProtectionProfileFileProfile ).

Los dos ejemplos siguientes muestran cómo crear el objeto profileSettings con almacenamiento local para almacenamiento de estado, así como solo en memoria.

Almacenar el estado solo en la 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

Configuración de perfil de lectura y escritura desde la ruta de almacenamiento en 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

A continuación, use el patrón de promesa/futuro para cargar el Profile archivo .

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

Si un perfil se carga correctamente, ProfileObserver::OnLoadSuccess nuestra implementación se mip::Profile::Observer::OnLoadSuccess notifica. El objeto resultante, en este caso a , así como el contexto, se pasan como mip::Profile parámetros a la función de observador.

El contexto es un puntero a los que hemos creado para controlar la operación asincrónica. La función simplemente establece el valor de la promesa en el objeto Perfil que se ha pasado para el primer parámetro. Cuando la función principal usa Future.get() , el resultado se puede almacenar en un nuevo objeto en la conversación de llamada.

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

Ponerla juntos

Después de haber implementado completamente los observadores y el delegado de autenticación, ahora es posible cargar por completo un perfil. El botón de seguridad de código siguiente supone que todos los encabezados necesarios ya están incluidos.

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

El resultado final es que hemos cargado correctamente el perfil y almacenado en el objeto llamado profile .

Pasos siguientes

Ahora que se ha agregado el perfil, el siguiente paso es agregar un motor al perfil.

Conceptos del motor de directivas