Microsoft 資訊保護 SDK - 擷取檔案的狀態

在 MIP SDK 檔案 API 中 mip::FileHandler::GetFileStatus() ,靜態函式可讓開發人員擷取檔案的狀態,而不需要建立檔案引擎對象、驗證甚至連線。 只需要檔名和 mipContext 的建立,以及檔案路徑和數據流。

支援的檔案類型

  • 以 OCP 為基礎的 Office 檔案格式 (Office 2010 及更新版本)
  • 舊版 Office 檔格式 (Office 2007)
  • PDF
  • 一般 PFILE 支援
  • 支援 Adobe XMP 的檔案
  • 電子郵件 - 。MSG 格式

GetFileStatus() 函式

mip::FileHandler::GetFileStatus() 可讓開發人員擷取檔案的狀態。 如需完整清單,請參閱 API 參考

在本文中,將涵蓋下列方法:

  • mip::FileHandler::GetFileStatus() static 函式
  • FileStatus 物件,其中包含檔案或容器的標籤和或保護詳細數據
  • IsProtected() 屬性
  • IsLabeled() 屬性
  • ContainsProtectedObject() 屬性

需求

建立一個FileHandler以操作特定檔案需要:

  • 一個 mipContext
  • 不需要建立檔案引擎

擷取檔案的狀態

若要使用 mip::FileHandler::GetFileStatus() 靜態函式,開發人員必須傳入檔案路徑或檔案數據流,並傳遞 mipContext 來執行此函式。 執行此函式不需要建立檔案引擎、驗證或與因特網的連線。 此函式特別有助於:

  • 在建立引擎之前,先取得檔案的保護狀態,以用於解密情境。 事先瞭解保護狀態可讓開發人員在檔案已受到保護時略過建立引擎的額外負荷
  • 取得可能已有標籤的檔案狀態,然後再建立處理引擎以嘗試讀取標籤,以節省時間。
  • 取得一個包含附件的 MSG 檔案及其附件的狀態,該附件可能需要經過剖析或解密。

GetFileStatus() 傳回具有下列屬性的 fileStatus Object:

  • IsProtected() 屬性 - 傳回 bool - 檔案受到保護/加密
  • IsLabeled() 屬性 - 傳回 bool - 檔案已加上標籤
  • ContainsProtectedObject() 屬性 - 傳回 bool - 檔案/容器/訊息包含受保護的物件。

建議檢查所有三個屬性,因為一個檔案可能有零到全部三個屬性及其不同組合。 此外,由於 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;
    }