Microsoft 信息保护 SDK - 提取文件状态

在 MIP SDK 文件 API 中,mip::FileHandler::GetFileStatus() 静态函数允许开发人员提取文件状态,而无需创建文件引擎对象、身份验证甚至连接。 只需要文件名、创建 mipContext 以及文件路径和文件流。

支持的文件类型

  • 基于 OPC 的 Office 文件格式(Office 2010 及更高版本)
  • 旧版 Office 文件格式(Office 2007)
  • PDF
  • 通用 PFILE 支持
  • 支持 Adobe XMP 的文件
  • 电子邮件 - .MSG 格式

GetFileStatus() 函数

mip::FileHandler::GetFileStatus() 允许开发人员提取文件状态。 有关完整列表,请参阅 API 参考

本文将介绍以下方法:

  • mip::FileHandler::GetFileStatus() 静态函数
  • 包含文件或容器的标签和保护详细信息的 FileStatus 对象
  • IsProtected() 属性
  • IsLabeled() 属性
  • ContainsProtectedObject() 属性

要求

要创建要用于特定文件的 FileHandler,需要满足以下条件:

  • 执行 mipContext 操作
  • 无需创建文件引擎

提取文件状态

若要使用 mip::FileHandler::GetFileStatus() 静态函数,开发人员需要传入文件路径或文件流以及 mipContext 来执行此函数。 执行该函数不需要创建文件引擎、身份验证或连接到 Internet。 此函数特别适用于:

  • 在创建引擎之前,获取用于解密方案的文件的保护状态。 提前了解保护状态可以让开发人员避免创建引擎的开销(如果文件已受到保护)
  • 在创建引擎以尝试读取标签之前,获取可能已有标签的文件的状态(节省时间)
  • 获取具有附件且可能需要连同 MSG 文件本身一起分析或解密的 MSG 文件的状态

GetFileStatus() 返回包含以下属性的 fileStatus 对象:

  • IsProtected() 属性 - 返回布尔值 - 文件受保护/加密
  • IsLabeled() 属性 - 返回布尔值 - 文件带标签
  • ContainsProtectedObject() 属性 - 返回布尔值 - 文件/容器/消息包含受保护的对象。

建议对这三个属性进行询问,因为文件可能有零到三个属性和不同的排列。 此外,由于 GetFileStatus() 函数不需要身份验证或引擎即可执行,因此 IsProtected()IsLabeled() 以及 ContainsProtectedObject() 方法反映文件中是否存在标签或保护。 它不会验证标签和保护是否存在于租户中,或是否可供用户使用。 验证标签和或保护需要通过身份验证和引擎创建过程进行验证。

    if (options.count("getfilestatus")) {
      auto fileStatus = GetFileStatus(filePath, fileStream, mipContext);
      if (fileStatus->IsProtected()) {
        cout << "File is protected" << endl;
      } 
      if (fileStatus->IsLabeled()) {
        cout << "File is labeled" << endl;
      } 
      if (fileStatus->ContainsProtectedObjects()) {
        cout << "File contains protected objects" << endl;
      }    
      GetLabel(fileHandler);
      return EXIT_SUCCESS;
    }
    if (options.GetFileStatus) {
      var fileStatus = FileHandler.GetFileStatus(options.FilePath, mipContext);
      if (fileStatus.IsProtected()) {
        Console.WriteLine("The file is protected.");
      }
      if (fileStatus.IsLabeled()) {
        Console.WriteLine("The file is labeled.");
      }
      if (fileStatus.ContainsProtectedObjects()) {
        Console.WriteLine("The file contains protected objects.");
      }
      return true;
    }
 if (options.count("getfilestatus")) {
      auto fileStatus = GetFileStatus(filePath, fileStream, mipContext);
      if (fileStatus->IsProtected()) {
        cout << "File is protected" << endl;
      } 
      if (fileStatus->IsLabeled()) {
        cout << "File is labeled" << endl;
      } 
      if (fileStatus->ContainsProtectedObjects()) {
        cout << "File contains protected objects" << endl;
      }    
      GetLabel(fileHandler);
      return EXIT_SUCCESS;
    }