So wird’s gemacht: Schützen von Dateien per selektive Zurücksetzung (HTML)
[ Dieser Artikel richtet sich an Windows 8.x- und Windows Phone 8.x-Entwickler, die Windows-Runtime-Apps schreiben. Wenn Sie für Windows 10 entwickeln, finden Sie weitere Informationen unter neueste Dokumentation]
Sie können die selektive Zurücksetzung zum Identifizieren von geschützten Dateien in Ihrer App verwenden, die gesperrt werden können, wenn ein Benutzer der App nicht mehr zum Zugreifen auf die App-Daten berechtigt ist. Dies ist ein häufiger Fall für Unternehmen, die es ihren Mitarbeitern gestatten, eigene Geräte zur Arbeit mitzubringen. Wenn ein Mitarbeiter das Unternehmen verlässt, können die Unternehmensdateien auf seinem persönlichen Gerät entfernt werden.
Angenommen, ein Mitarbeiter nimmt seinen eigenen Tablet PC mit ins Büro und nutzt diesen für geschäftliche E-Mails. Von der E-Mail-App können dann alle Dateien, die zum lokalen Speichern von Unternehmens-E-Mails auf dem Tablet PC verwendet werden, per selektiver Zurücksetzung geschützt werden. Die Dateien werden dabei mithilfe eines Unternehmensbezeichners wie "sample.com" dem Unternehmen zugeordnet. Wenn der Benutzer kein Mitarbeiter des Unternehmens mehr ist, kann dies beim nächsten Öffnen der App für die Unternehmens-E-Mails ermittelt werden. Per selektiver Zurücksetzung können dann alle Dateien gesperrt werden, die mit dem Unternehmensbezeichner geschützt sind. Wenn die App versucht, auf eine Datei zuzugreifen, und erkennt, dass sie gesperrt wurde, kann die Datei von der App dann gelöscht werden.
Voraussetzungen
Im Beispielcode dieses Themas wird vorausgesetzt, dass die folgenden globalen Variablen festgelegt wurden:
var appRootFolder = Windows.Storage.ApplicationData.current; var enterpriseIdentity = "example.com"; var accessDeniedHResult = -2147024891; // Access Denied (0x80070005)
Schützen einer Datei oder eines Ordners per selektiver Zurücksetzung
Sie können die protectAsync-Methode zum Schützen einer Datei oder eines Ordners per selektiver Zurücksetzung verwenden. So wird die Datei als mit Ihrem Unternehmensbezeichner geschützt identifiziert, z. B. mit "example.com", wie im vorherigen Codebeispiel gezeigt. Wenn Sie einen Ordner mithilfe der protectAsync-Methode schützen, erben alle Dateien in diesem Ordner diesen Schutz.
// 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;
});
}
Sperren des Zugriffs auf geschützte Dateien und Ordner
Wenn die App ermittelt, dass ein Benutzer nicht mehr "gültig" ist, können Sie den Zugriff auf alle Dateien und Ordner, die per Unternehmensidentität geschützt sind, schnell sperren. Verwenden Sie dafür die im folgenden Beispiel veranschaulichte revoke-Methode. Die Datei wird von der revoke-Methode nicht gelöscht. Die revoke-Methode versetzt die Datei in einen Zustand, in dem nicht darauf zugegriffen werden kann. Im nächsten Beispiel ist dargestellt, wie Sie der App Code hinzufügen können, um eine Datei zu löschen, für die kein Zugriff besteht und die gesperrt wurde.
function initializeApp(userName) {
if (getUserStatus(userName) == "Not Found") {
Windows.Security.EnterpriseData.FileRevocationManager.revoke(enterpriseIdentity);
}
}
Abrufen des Status einer Datei
Mithilfe der getStatusAsync-Methode können Sie für eine Datei oder einen Ordner den Schutzstatus in Bezug auf die selektive Zurücksetzung ermitteln. So finden Sie heraus, ob eine Datei geschützt ist, ob eine Datei von einem anderen Benutzer auf dem Computer geschützt ist usw. Die getStatusAsync-Methode wird häufig genutzt, um zu bestimmen, wann eine geschützte Datei gelöscht werden soll. Wenn eine geschützte Datei gesperrt wird, führt der Versuch, auf den Inhalt der Datei zuzugreifen, zu einer Ausnahme vom Typ "Zugriff verweigert". Bei Auftreten dieser Ausnahme können Sie mithilfe der getStatusAsync-Methode ermitteln, ob die Datei per selektiver Zurücksetzung gesperrt wurde, und die Datei dann löschen, wenn dies der Fall ist. Dies wird im folgenden Beispiel veranschaulicht.
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();
}
});
}
Kopieren einer geschützten Datei
Wenn Sie eine Datei mit der Methode copyAsync oder copyAndReplaceAsync kopieren, wird der Schutz per selektiver Zurücksetzung für die kopierte Datei nicht automatisch auf die neue Kopie der Datei angewendet. Dies gilt für Dateien, die Sie mithilfe von "Speichern unter" als neue Datei speichern. In diesem Fall können Sie den Schutz per selektiver Zurücksetzung wie im folgenden Beispiel mit der copyProtectionAsync-Methode aus der Originaldatei kopieren.
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.
});
}
Vollständiges Beispiel
Verwandte Themen
FileRevocationManager-Beispiel