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