Architecture Net или что такое Microsoft.NET?




Неуправляемый код

Утверждения необходимы для того, чтобы управлять доступом к неуправляемому коду. Дело в том, что этот код не должен прямо вызываться управляемым кодом. Чтобы вызывать неуправляемый код, требуется соответствующее разрешение. Поскольку общеязыковая среда выполнения CLR просматривает стек, чтобы проверить, имеют ли все вызывающие программы разрешение на вызов неуправляемого кода, то разрешение на вызов неуправляемого кода надо предоставить всему коду. Следовательно, сборки, не относящиеся к тем, которым вы доверяете, могли бы выполнять операции с помощью вызовов интерфейса 32-разрядных Windows-приложений (API Win32) и подрывать систему безопасности .NET.
Лучше делать вызовы через интерфейсные классы сборки, которая имеет право на управляемый код. Код интерфейсного класса должен сначала выяснить, есть ли у вызывающей программы соответствующие права от общеязыковой среды выполнения CLR, и поэтому требует, чтобы вызывающая программа имела минимальный набор разрешений, необходимых для выполнения задачи (такой, например, как запись в файл). Если требование прав удовлетворено, то интерфейсный код может утвердить право на управляемый код. Тогда никакой другой сборке из цепочки вызовов право на управляемый код не требуется.
Например, когда вы просите файловые .NET-классы удалить какой-либо файл, то вначале они требуют разрешение на удаление этого файла. Если разрешение получено, то код утверждает право на вызов управляемого кода и вызывает для выполнения удаления интерфейс 32-разрядных Windows-приложений (API Win32).