Создание Windows-приложений на основе Visual C#



Использование безопасности доступа кода - часть 2


В лекции 2 мы работали с проектом BinaryReadWrite. Скопируйте всю папку проекта и переименуйте ее в Permissions. Снова поместите в папку bin\Debug какой-нибудь файл формата MP3 и назовите его music.mp3. Запустите проект и убедитесь в том, что в этой же папке появился записанный файл newmusic.mp3. Теперь добавляем пространство имен System.Security и соответствующий блок исключений:

using System; using System.IO; using System.Security; namespace BinaryReadWrite {

class Class1 {

[STAThread] static void Main(string[] args) { //Добавляем блок обработки исключений try { //Создаем новый поток Chtenie и указываем файл для чтения — music.mp3 FileStream Chtenie = new FileStream("music.mp3", FileMode.Open);

//Создаем экземпляр br класса BinaryReader и связываем его с потоком Chtenie BinaryReader br = new BinaryReader(Chtenie);

// Создаем массив типа байтов и //передаем ему размер в байтах — (например, 1000000 ) записываемого файла byte[] n = br.ReadBytes(1000000); //Закрываем поток br.Close(); //Создаем новый поток Zapis и указываем название файла для записи sozdanajamuzika.mp3 FileStream Zapis = new FileStream("newmusic.mp3", FileMode.CreateNew, FileAccess.Write); //Создаем экземпляр wr класса BinaryWriter и связываем его с потоком Zapis BinaryWriter wr = new BinaryWriter(Zapis); // Можно связывать объект wr с потоком, создавая его без названия: //BinaryWriter wr = new BinaryWriter(new FileStream("sozdanajamuzika.mp3", FileMode.CreateNew, FileAccess.Write)); //Передаем в поток массив байтов n wr.Write(n); //Закрываем поток br.Close(); } catch (SecurityException ex) { Console.WriteLine(ex.Message); }

} } }

Листинг 10.1.

В окне Solution Explorer дважды щелкаем на файл AssemblyInfo.cs и для использования атрибутов добавляем пространство имен System.Security.Permissions:

using System.Reflection; using System.Runtime.CompilerServices; using System.Security.Permissions;

В конце листинга AssemblyInfo.cs определяем минимальный набор разрешений:

// Запрос минимального набора разрешений [assembly: UIPermission(SecurityAction.RequestOptional, Window = UIPermissionWindow.SafeTopLevelWindows)] [assembly: PermissionSet(SecurityAction.RequestOptional, Name = "LocalIntranet")]

Это разрешение не было назначено политикой безопасности, поэтому генерируется исключение (рис. 10.5).

Сгенерированное исключение при определении минимального набора разрешений

увеличить изображение
Рис. 10.5.  Сгенерированное исключение при определении минимального набора разрешений

Для получения доступа следует определять другие наборы разрешений и настраивать политику безопасности. Например, данный запрос разрешений указывает, что сборка не нуждается в дополнительных разрешениях:

[assembly:PermissionSet(SecurityAction.RequestOptional, Unrestricted = false)]

На диске, прилагаемом к книге, вы найдете приложение Permissions (Code\Glava10\ Permissions).




Содержание  Назад  Вперед