dotnet :: nativemethods

Jan 10, 2005 03:13

В замечательной программе FxCop с версии 1.312 появилось новое правило:
MovePInvokesToNativeMethodsClass.

Оно советует распределить все объявления внешних unmanaged функций по трём классам:
SafeNativeMethods, NativeMethods и UnsafeNativeMethods.

Microsoft более менее чётко придерживается этого правила в BCL .Net Framework.

Классы различаются следующим:

SafeNativeMethods - к классу применяется аттрибут [SuppressUnmanagedCodeSecurity].
О безопасности вызовов можно не думать вообще.

NativeMethods - к классу не применяется аттрибута [SuppressUnmanagedCodeSecurity].
В этот класс обычно попадают константы и типы данных (почему methods - не знаю).

UnsafeNativeMethods - к классу применяется аттрибут [SuppressUnmanagedCodeSecurity].
О безопасности вызовов думает непосредственно производящий вызов.

Под безопасностью имеются в виду проверки "клиента" нашей библиотеки на наличие необходимых прав.

Самое интересное в этой истории - аттрибут [SuppressUnmanagedCodeSecurity].
Без FxCop я бы нескоро задумался о том, зачем он нужен.
А он, на самом деле, очень и очень полезен.

Этот аттрибут применяется к классу, содержащему методы P/Invoke или непосредственно к методу.
Он отключает полную проверку стека на permission обращения к unmanaged коду.

Да-да. Если его не применить, каждый вызов метода P/Invoke будет приводит к полному просмотру стека !
Мелочь, но производится эта проверка вовсе не мгновенно.

Так что MovePInvokesToNativeMethodsClass !

<обновляемая версия: MovePInvokesToNativeMethodsClass@npj>





Previous post Next post
Up