Microsoft Information Protection SDK - Obter o estado de um ficheiro

Na API de ficheiros do MIP SDK, a mip::FileHandler::GetFileStatus() função estática permite ao programador obter o estado de um ficheiro sem necessidade de criar um Objeto do Motor de Ficheiros, autenticação e até conectividade. Tudo o que é necessário é o nome do ficheiro e a criação do mipContext, juntamente com o caminho do ficheiro e o fluxo.

Tipos de ficheiros suportados

  • Formatos de ficheiro Office baseados no OCP (Office 2010 e posteriores)
  • Formatos de ficheiro de escritório legados (Office 2007)
  • PDF
  • Suporte genérico para PFILE
  • Ficheiros que suportam Adobe XMP
  • E-mail - formato .MSG

Função GetFileStatus()

mip::FileHandler::GetFileStatus() permite ao programador obter o estado de um ficheiro. Para a lista completa, consulte a referência da API.

Neste artigo, serão abordados os seguintes métodos:

  • mip::FileHandler::GetFileStatus() Função estática
  • Objeto FileStatus contendo detalhes de rotulagem e/ou proteção de um ficheiro ou contentor
  • IsProtected() Propriedade
  • IsLabeled() Propriedade
  • ContainsProtectedObject() Propriedade

Requisitos

Criar um FileHandler para trabalhar com um arquivo específico requer:

  • Uma mipContext
  • Não é necessária criação de motor de ficheiros

Obter o estado de um ficheiro

Para usar a função estática mip::FileHandler::GetFileStatus(), o desenvolvedor terá de fornecer um caminho de ficheiro ou um fluxo de ficheiro e o mipContext para executar a função. Executar esta função não requer a criação de um motor de ficheiros, autenticação ou ligação à internet. Esta função é especialmente útil para:

  • Obter o estado de proteção de um ficheiro para cenários de desencriptação antes de criar um motor. Conhecer o estado de proteção antecipadamente pode permitir ao programador evitar a sobrecarga de criar um motor se o ficheiro já estiver protegido
  • Obter o estado de um ficheiro que pode já ter uma etiqueta antes de criar um motor para tentar ler a etiqueta (poupança de tempo)
  • Obter o estado de um ficheiro MSG que tem anexos e que pode precisar de ser analisado ou desencriptado juntamente com o próprio ficheiro MSG

O/A GetFileStatus() devolve um fileStatus objeto com as seguintes propriedades:

  • IsProtected() Propriedade - devolve um bool - O ficheiro está protegido/encriptado
  • IsLabeled() Propriedade - devolve um valor booleano - O ficheiro tem uma etiqueta
  • ContainsProtectedObject() Propriedade - devolve um bool - O Ficheiro/Container/Mensagem contém objeto protegido.

A recomendação é que as três propriedades sejam interrogadas, pois um ficheiro pode ter de zero a todas as três propriedades e permutações intermédias. Além disso, como a GetFileStatus() função não requer autenticação, nem um motor para executar, os IsProtected()métodos , IsLabeled(), e ContainsProtectedObject() refletem se está presente rotulagem ou proteção num ficheiro. Não valida se a rotulagem e/ou proteção existe dentro de um tenant ou se é utilizável por um utilizador. A validação do rótulo e/ou da proteção exigiria seguir o processo de autenticação e criação do mecanismo.

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