Microsoft 信息保护 SDK - 策略 SDK 配置文件概念

mip::Profile必须先加载 ,然后才能执行任何策略 SDK 操作。

以下两个示例显示了如何使用状态存储和内存中的本地存储创建 profileSettings 对象。

加载配置文件

定义 MipContextProfileObserver 后,我们将使用它们来实例化 mip::PolicyProfile 。 创建 对象 mip::PolicyProfile 需要 mip::PolicyProfile::Settingsmip::MipContext

配置文件::设置参数

构造函数 PolicyProfile::Settings 接受下面列出的四个参数:

  • const std::shared_ptr<MipContext>mip::MipContext 已初始化以存储应用程序信息、状态路径等的对象。
  • mip::CacheStorageType:定义如何存储状态:在内存中、磁盘上或磁盘上并加密。 有关详细信息,请参阅缓存 存储概念
  • std::shared_ptr<mip::PolicyProfile::Observer> observer:指向 、 和 (ObserverPolicyProfileProtectionProfile 中的配置文件实现 FileProfile) 。

以下两个示例显示了如何使用状态存储和内存中的本地存储创建 profileSettings 对象。

仅在内存中存储状态

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

从磁盘上的存储路径读取/写入配置文件设置

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

接下来,使用 promise/future 模式加载 Profile

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

如果成功加载了配置文件 ProfileObserver::OnLoadSuccess ,将通知 我们的 mip::Profile::Observer::OnLoadSuccess 实现。 生成的对象(本例中为 )以及上下文作为参数传递到 mip::Profile 观察器函数。

上下文 指向为 处理异步操作而创建的 的指针。 函数只需将 promise 的值设置到为第一个参数传入的 Profile 对象。 当主函数使用 Future.get() 时,结果可以存储在调用线程的新对象中。

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

放在一起

在完全实现观察和身份验证委托后,现在可以完全加载配置文件。 下面的代码提示假定已包含所有必要的标头。

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

最终结果是,我们已成功加载配置文件并存储在名为 的 对象中 profile

下一步

添加配置文件后,下一步是将引擎添加到配置文件。

策略引擎概念