.NET 4 исключения безопасности метода, когда pinvoking

У меня есть некоторый код который pinvokes собственный win32. Так как я обновил до.NET 4, код начал бросать высказывание MethodAccessException:

Попытка безопасности прозрачный метод 'Tek. Аудио. Midi. MidiDevice. GetDevices ()' для вызова собственного кода через метод 'Tek. Собственный компонент. Windows. Multimedia.midiInGetNumDevs ()' перестал работать. Методы должны быть очень важной безопасностью или безопасностью, безопасно-очень важной для вызова собственного кода.

Вот то, что продолжается:

  • Исполняемый блок Program.Main вызовы метода library1 общедоступные помехи Tek.Audio.Midi.MidiDevice.GetDevices()
  • Library1 GetDevices() общественность library2 вызовов статический pinvoke Tek.Native.Windows.Multimedia.midiInGetNumDevs() (да, плохая практика, безотносительно)

Единственными связанными с безопасностью атрибутами на классах, методах и включенных блоках является AllowPartiallyTrustedCallers на library1, и я даже не знаю почему.

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

9
задан Uwe Keim 10 August 2013 в 09:05
поделиться

1 ответ

У вас есть выбор. Проще всего "отказаться" от новой модели безопасности.

<configuration>
  <runtime>
    <NetFx40_LegacySecurityPolicy enabled="true" />
  </runtime>
</configuration>

ИЛИ (учитывая, что я не эксперт по безопасности .Net 4)

Edit: Отказ от модели безопасности .Net 4 ненадежен и его следует избегать

Вы можете пометить свой метод:

[SecuritySafeCritical]

поскольку вы можете использовать его с кодом, предназначенным для частично доверенных абонентов.

К сожалению, у меня нет хорошей статьи, которую я мог бы вам прислать, мне пришлось разобраться в этом, как и вам, исправляя свой сломанный код. :)

.
16
ответ дан 4 December 2019 в 12:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: