В настоящее время я создаю управляемую оболочку для неуправляемой библиотеки DLL.Дело в том, что оболочка выполняет ТОЛЬКО вызовов из неуправляемой библиотеки DLL, но сама экспортирует очень мало методов.Из исследований, которые я сделал, это должно быть безопасно, но я хочу убедиться, что я правильно понял.По сути, это то, как я это делаю.
[SuppressUnmanagedCodeSecurity()]
internal static class SomeAPI
{
[DllImport("base.dll"]
internal static extern bool Somefunc();
[...] Other internal DllImports
}
public class Wrapper : IDisposable
{
[SecurityPermission(SecurityAction.Demand, UnmanagedCode = true)]
public Wrapper()
{
SomeAPI.SomeFunc();
}
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this);
}
[SecurityPermission(SecurityAction.Demand, UnmanagedCode = true)]
protected override void Dispose(bool disposeManagedResources)
{
SomeAPI.SomeFunc();
}
}
Каждый добавляемый мной защищенный или общедоступный метод должен иметь атрибут [SecurityPermission (SecurityAction.Demand, UnmanagedCode = true)].И я имею в виду каждый, чтобы избежать случайного пути кода, который приводит к вызову SomeAPI.
Теперь любой метод, добавленный в Wrapper, внутренний или закрытый, является "безопасным".Это предположение верно?
Извините, если мне было неясно.Я пишу обертку, чтобы она не переформатировала жесткий диск или что-то в этом роде.Оболочка будет выставлена в своем собственном управляемом dll (наряду с другими вещами).Поскольку один вызов оболочки может привести к сотням обращений к неуправляемой dll, я не хочу, чтобы служебная нагрузка CLR проверяла все эти вызовы - таким образом использование SuppressUnmanagedCodeSecurity.В документах упоминается «Используйте этот атрибут с особой осторожностью. Неправильное использование может создать слабые места безопасности». И вот, что я спрашиваю, я снова «в безопасности» с вышеуказанной методологией.