Tri*_*ian 9 security pinvoke .net-4.0
我有一些代码本地win32.自从我升级到.NET 4以来,代码开始抛出一个MethodAccessException:
通过安全透明方法'Tek.Audio.Midi.MidiDevice.GetDevices()'尝试通过方法'Tek.Native.Windows.Multimedia.midiInGetNumDevs()'调用本机代码失败.对于调用本机代码,方法必须是安全关键或安全性安全关键.
这是发生了什么:
Program.Main方法调用library1 public staticTek.Audio.Midi.MidiDevice.GetDevices()GetDevices()调用library2的公共静态pinvoke Tek.Native.Windows.Multimedia.midiInGetNumDevs()(是的,不好的做法,无论如何)涉及的类,方法和程序集上唯一与安全相关的属性是library1上的AllowPartiallyTrustedCallers,我甚至不知道原因.
令我感到羞耻的是,我承认我对.NET的安全性一无所知.我该怎么做才能防止这种异常?虽然我在这里,有什么好文章可以让我开始使用.NET安全性吗?
Nic*_*els 16
你有选择.最简单的方法是"选择退出"新的安全模型.
<configuration>
<runtime>
<NetFx40_LegacySecurityPolicy enabled="true" />
</runtime>
</configuration>
Run Code Online (Sandbox Code Playgroud)
或者(请记住我不是.Net 4安全专家)
你可以标记你的方法:
[SecuritySafeCritical]
Run Code Online (Sandbox Code Playgroud)
因为您可以将其与为部分信任的呼叫者设计的代码一起使用.
可悲的是,我没有一篇好文章可以寄给你,我必须通过修复破碎的代码来解决这个问题.:)