SDK de Microsoft Information Protection: Captura del estado de un archivo

En la API de archivos del SDK de MIP, la función estática mip::FileHandler::GetFileStatus() permite al desarrollador capturar el estado de un archivo sin necesidad de crear un objeto de motor de archivos, autenticación e incluso conectividad. Todo lo que necesita es el nombre de archivo y la creación de mipContext junto con una ruta de acceso y una secuencia de archivos.

Tipos de archivo admitidos

  • Formatos de archivo de Office basados en OCP (Office 2010 y versiones posteriores)
  • Formatos de archivo de Office heredados (Office 2007)
  • PDF
  • Compatibilidad con PFILE genérico
  • Archivos que admiten Adobe XMP
  • Correo electrónico: formato MSG

Función GetFileStatus()

mip::FileHandler::GetFileStatus() permite al desarrollador capturar el estado de un archivo. Para obtener la lista completa, consulte la referencia de API.

En este artículo, trataremos los siguientes métodos:

  • Función estática mip::FileHandler::GetFileStatus()
  • Objeto FileStatus que contiene detalles de etiquetado o protección de un archivo o contenedor
  • Propiedad IsProtected()
  • Propiedad IsLabeled()
  • Propiedad ContainsProtectedObject()

Requisitos

La creación de un FileHandler para trabajar con un archivo específico requiere lo siguiente:

  • Una operación mipContext
  • No se requiere crear ningún motor de archivos

Captura del estado de un archivo

Para usar la función estática mip::FileHandler::GetFileStatus(), el desarrollador deberá incorporar una ruta de acceso de archivo o una secuencia de archivos y mipContext para ejecutar esta función. La ejecución de esta función no requiere la creación de un motor de archivos, autenticación ni conexión a Internet. Esta función es especialmente útil para:

  • Obtener el estado de protección de un archivo para escenarios de descifrado antes de crear un motor. Conocer el estado de protección con antelación puede permitir al desarrollador omitir la sobrecarga de crear un motor si el archivo ya está protegido.
  • Obtener el estado de un archivo que puede tener ya una etiqueta antes de crear un motor para intentar leer la etiqueta (ahorro de tiempo)
  • Obtención del estado de un archivo MSG que tiene datos adjuntos y que es posible que deba analizarse o descifrarse junto con el propio archivo MSG

GetFileStatus() devuelve un objeto fileStatus con las siguientes propiedades:

  • Propiedad IsProtected(): devuelve un valor booleano para indicar que el archivo está protegido o cifrado
  • Propiedad IsLabeled(): devuelve un valor booleano para indicar que el archivo está etiquetado
  • Propiedad ContainsProtectedObject(): devuelve un valor booleano que indica que el archivo, contenedor o mensaje contiene un objeto protegido.

La recomendación es que se interrogue a las tres propiedades, puesto que un archivo puede tener ninguna o las tres propiedades, además de permutaciones entre ellas. Además, dado que la función GetFileStatus() no requiere autenticación ni la ejecución de un motor, los métodos IsProtected(), IsLabeled() y ContainsProtectedObject() reflejan si el etiquetado o la protección están presentes en un archivo. No valida si hay etiquetado o protección dentro de un inquilino o si puede usarlo un usuario. Para validar la etiqueta o la protección, se tendría que completar el proceso de autenticación y creación del motor para su validación.

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