Правило FxCop .NET Framework CA1401 Правило PInvokesShouldNotBeVisible - почему существует это правило? - PullRequest
5 голосов
/ 07 августа 2010

Это правило указывает, что P / Invokes не должны быть обнародованы. Мой вопрос почему? Вызывающий может легко создать собственное объявление в своей сборке, чтобы сделать точно такой же вызов. Вызывающий может просто написать библиотеку C для вызова API. Какую пользу, безопасность или иное, можно получить, сделав эти декларации внутренними?

1 Ответ

11 голосов
/ 07 августа 2010

Что ж, в модели безопасности .NET ваша сборка может иметь разрешение на выполнение P / Invokes, а вызывающая сторона - нет.(AllowPartiallyTrustedCallersAttribute, который позволяет коду, выполняющемуся как частично доверенное, вызывать сборку, которая полностью доверяет, существует для того, чтобы включить это.)

Что, по сути, то, что вы хотите, когда библиотека, которую вы пишете, существует для обеспечения безопаснойдоступ или ограниченный доступ к некоторому системному средству, к которому вы не хотите, чтобы приложения-песочницы одного или другого типа имели произвольный доступ.

С другой стороны, это вежливость и безопасность.P / Invoces де-факто небезопасны, поскольку их неправильный вызов может привести к всевозможным интересным способам сбоя, с которыми вы обычно не сталкиваетесь в удобном мире .NET.Обернуть вокруг них некоторую проверку ошибок и общий код безопасности вместе с такими вещами, как перетаскивание входных данных в формат Win32 API (или чего-либо еще), перевод его кодов ошибок в соответствующие исключения .NET и т. Д., И т. Д., ПростоВежливость к будущим пользователям вашей библиотеки, IMO.

...