Compartilhar via


Como proteger arquivos com Apagamento Seletivo (HTML)

[ Este artigo destina-se aos desenvolvedores do Windows 8.x e do Windows Phone 8.x que escrevem aplicativos do Windows Runtime. Se você estiver desenvolvendo para o Windows 10, consulte documentação mais recente]

Você pode usar o apagamento seletivo para identificar arquivos protegidos no seu aplicativo, os quais podem ser revogados quando um usuário do aplicativo perde o direito de ver dados do seu aplicativo. Este é um cenário comum nas empresas que permitem aos usuários usar seus próprios dispositivos para trabalhar. Quando o funcionário deixa o emprego, os arquivos da empresa existentes no dispositivo pessoal do funcionário podem ser removidos.

Por exemplo, um funcionário traz seu tablet pessoal para o escritório e o utiliza para enviar emails comerciais. O aplicativo de email pode usar o Apagamento Seletivo para proteger todos os arquivos usados para armazenar, localmente, os emails da empresa. Esse recurso associa tais arquivos à empresa usando um identificador de empresa, como "sample.com". Se o usuário deixar de ser funcionário, na próxima vez que ele abrir o aplicativo de email da empresa, o aplicativo poderá determinar que esse usuário não é um funcionário e, então, dizer ao Apagamento Seletivo para revogar o acesso a todos os arquivos protegidos para o identificador de empresa. Quando o aplicativo tenta acessar um arquivo e determina que ele foi revogado, o aplicativo pode excluir o arquivo.

Pré-requisitos

  • O código de exemplo neste tópico pressupõe que as seguintes variáveis globais foram definidas.

    var appRootFolder = Windows.Storage.ApplicationData.current;
    var enterpriseIdentity = "example.com";
    var accessDeniedHResult = -2147024891;  // Access Denied (0x80070005)
    

Proteja arquivo ou pasta usando o Apagamento Seletivo

Você pode usar o método protectAsync para proteger um arquivo ou uma pasta com Apagamento Seletivo. Ele identifica o arquivo como protegido para o seu identificador de empresa (por exemplo, "example.com"), como mostrado no exemplo de código anterior. Se você proteger uma pasta usando o método protectAsync, todos os arquivos nessa pasta herdarão a mesma proteção.

// Add a folder and protect it using Selective Wipe.
function addFolder(folderName) {
    appRootFolder.localFolder.createFolderAsync(folderName).then(
        function (newFolder) {
            protectItem(newFolder);
        });
}

// Add a file and protect it using Selective Wipe.
function addFile(fileName, folder) {
    folder.createFileAsync(fileName).then(
        function (newFile) {
            Windows.Security.EnterpriseData.
                FileRevocationManager.getStatusAsync(newFile).then(
                    function (status) {
                        if (status != Windows.Security.EnterpriseData.
                                FileProtectionStatus.Protected) {
                            protectItem(newFile, enterpriseIdentity);
                        }
                    });
        },
        function (err) {
            // Handle error. For example, file already exists.
        });
}

function protectItem(item, enterpriseIdentity) {
    Windows.Security.EnterpriseData.FileRevocationManager.
        protectAsync(item, enterpriseIdentity).then(
            function (status) {
                return status;
            });
}

Revogue o acesso a arquivos e pastas protegidos

Quando o aplicativo determina que um usuário não é mais válido, você pode revogar rapidamente o acesso a todos os arquivos e pastas protegidos para uma identidade de empresa usando o método revoke, como ilustrado no exemplo a seguir. O arquivo não será excluído pelo método revoke. O método revoke coloca o arquivo em um estado de inacessibilidade. É possível adicionar código ao aplicativo para excluir um arquivo que esteja inacessível e tenha sido revogado; veja o próximo exemplo.

function initializeApp(userName) {
    if (getUserStatus(userName) == "Not Found") {
        Windows.Security.EnterpriseData.FileRevocationManager.revoke(enterpriseIdentity);
    }
}

Obtenha o status de um arquivo

Use o método getStatusAsync para determinar o status de proteção Apagamento Seletivo de um arquivo ou pasta. Isso dirá se o arquivo está ou não protegido, se está protegido por outro usuário no computador etc. Um uso comum do método getStatusAsync é determinar quando um arquivo protegido deve ser excluído. Por exemplo, quando um arquivo protegido é revogado, qualquer tentativa de acesso ao conteúdo do arquivo resultará em uma exceção "Acesso negado". Ao encontrar essa exceção, você pode usar o método getStatusAsync para determinar se o arquivo foi revogado pelo Apagamento Seletivo e, sendo este o caso, excluir o arquivo; veja o exemplo a seguir.

function getFileContents(filePath) {
    var stream;
    var file;

    Windows.Storage.StorageFile.getFileFromPathAsync(filePath).then(
        function (f) {
            file = f;
            file.openReadAsync().then(
                function (s) {
                    stream = s;
                    return stream;
                },
                function (err) {
                    if (err.number == accessDeniedHResult) {
                        // Delete file if it has been revoked.
                        selectiveWipeCleanup(file);
                    }
                });
        });

    return null;
}

// Delete items revoked by Selective Wipe.
function selectiveWipeCleanup(file) {
    Windows.Security.EnterpriseData.FileRevocationManager.
        getStatusAsync(file).then(
            function (status) {
                if (status == 
                    Windows.Security.EnterpriseData.FileProtectionStatus.revoked) {
                        file.deleteAsync();
                }
        });

}

Copie um arquivo protegido

Quando você copia um arquivo usando o método copyAsync ou copyAndReplaceAsync, a proteção Apagamento Seletivo do arquivo copiado não é aplicada automaticamente à nova cópia do arquivo. Isso se aplica a arquivos para os quais você usa o recurso "salvar como" um novo arquivo. Nesse caso, é possível copiar a proteção Apagamento Seletivo do arquivo original usando o método copyProtectionAsync, como ilustrado no próximo exemplo.

function copyFile(file, newFolder) {
    file.copyAsync(newFolder).then(
        function (newFile) {
            Windows.Security.EnterpriseData.FileRevocationManager.
                copyProtectionAsync(file, newFile);
        },
        function (err) {
            // Handle error. For example, copy already exists.
        });
}

Exemplo completo

Tópicos relacionados

Exemplo FileRevocationManager

Windows.Security.EnterpriseData namespace

Protegendo aplicativos