Windows Dev Center

Language: HTML | XAML

So wird’s gemacht: Schützen von Dateien per selektive Zurücksetzung (XAML)

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:
    
    ApplicationData appRootFolder = ApplicationData.Current;
    string enterpriseIdentity = "example.com";
    int 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.
private async Task<StorageFolder> AddFolder(string folderName)
{
    StorageFolder newFolder = await appRootFolder.LocalFolder.CreateFolderAsync(folderName);

    var status = await ProtectItem(newFolder, enterpriseIdentity);

    return newFolder;
}

// Add a file and protect it using Selective Wipe.
private async Task<StorageFile> AddFile(string fileName, StorageFolder folder)
{
    StorageFile newFile = await folder.CreateFileAsync(fileName);

    var status = 
        await Windows.Security.EnterpriseData.FileRevocationManager.
            GetStatusAsync(newFile);

    if (status != Windows.Security.EnterpriseData.FileProtectionStatus.Protected)
    {
        status = await ProtectItem(newFile, enterpriseIdentity);
    }

    return newFile;
}

private async Task<Windows.Security.EnterpriseData.FileProtectionStatus> 
    ProtectItem(IStorageItem item, string enterpriseIdentity)
{
    var status = 
        await Windows.Security.EnterpriseData.FileRevocationManager.
            ProtectAsync(item, enterpriseIdentity);

    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.


private void InitializeApp(string userName)
{
    if (GetUserStatus(userName) == AppUserStatus.NotFound)
    {
        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.


private async Task<IRandomAccessStream> GetFileContents(string filePath)
{
    IRandomAccessStream stream = null;
    StorageFile file = null;

    try
    {
        file = await StorageFile.GetFileFromPathAsync(filePath);
        stream = await file.OpenReadAsync();
    }
    catch (UnauthorizedAccessException e)
    {
        if (e.HResult == AccessDeniedHResult)
        {
            // Delete file if it has been revoked.
            SelectiveWipeCleanup(file);
        }

        return null;
    }

    return stream;
}

// Delete items revoked by Selective Wipe.
private async void SelectiveWipeCleanup(StorageFile file)
{
    var status = await Windows.Security.EnterpriseData.FileRevocationManager.GetStatusAsync(file);
    if (status == Windows.Security.EnterpriseData.FileProtectionStatus.Revoked)
    {
        await 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.


public async Task<bool> CopyFile(StorageFile file, StorageFolder newFolder) 
{
    bool result = false;

    try
    {
        var newFile = await file.CopyAsync(newFolder);
        result = await 
            Windows.Security.EnterpriseData.FileRevocationManager.
            CopyProtectionAsync(file, newFile);
        }
    catch (Exception e) 
    {
        // Handle exception. For example, copy already exists.
    }

    return result;
}


Vollständiges Beispiel

Verwandte Themen

FileRevocationManager-Beispiel
Windows.Security.EnterpriseData namespace
Sichern von Apps

 

 

Anzeigen:
© 2015 Microsoft