Утверждение разрешений Метод Assert Утвердить) позволяет
вам требовать разрешение, даже если у вас
нет соответствующих грав доступа. Вам также
может потребоваться утвердить разрешение
еще и потому, что, хотя ваша сборка и
обладает нужным правом, но другие вызовы из
цепочки вызовов егоне имеют. Утверждать вы
можете только те разрешения, которые
предоставлены вашейсборкой. Если бы это
было не так, то обойти защиту общеязыковой
среды выполненияСЬК было бы очень легко.
fileIOPerm->Deny() ;
Но прочитать файл не удается! Утверждение действует только в вызванном методе. Метод ReadFileWithAssert может читать файл потому, что утверждает разрешение во время своего выполнения, а затем пытается выполнить чтение. Метод Assert (Утвердить) останавливает просмотр стека разрешений, и потому выше стекового фрейма разрешения не проверяются, так что выполнение действия будет продолжено, но самих разрешений метод не выдает. Поэтому если код, расположенный ниже стекового фрейма (такой, как ReadFile), пытается требовать разрешение, в котором было отказано (так делает конструктор Filelnfo), то будет запущено исключение SecurityException11. Аналогично, Deny (Запретить) не дает выполнять действие тем вызывающим программам, которые расположены выше в стековом фрейме, а не на текущем уровне .static void ReadFileWithAssert(FilelOPermission *f)
He забывайте, что Assert (Утвердить)
применяется только к операциям ввода-вывода,
выполняемым в данной программе для
указанного файла, который передается
конструктоpy FilelOPermission. Вызов Assert (Утвердить)
действует до тех пор, пока не завершится
выполнение кода, в котором он находится.
Следовательно, попытка выполнить ReadFile
будет неудачной, если она делается после
завершения ReadFileWithAssert. RevertAssert удаляет все
текущие запросы Assert (Утвердить).
|