I've got some code which pinvokes native win32. Since I upgraded to .NET 4, the code started throwing a MethodAccessException saying:
Attempt by security transparent method 'Tek.Audio.Midi.MidiDevice.GetDevices()' to call native code through method 'Tek.Native.Windows.Multimedia.midiInGetNumDevs()' failed. Methods must be security critical or security safe-critical to call native code.
Here's what's going on:
- Executable assembly's
Program.Main
method calls library1 public staticTek.Audio.Midi.MidiDevice.GetDevices()
- Library1's
GetDevices()
calls library2's public static pinvokeTek.Native.Windows.Multimedia.midiInGetNumDevs()
(yeah, bad practice, whatever)
The only security-related attributes on classes, methods and assemblies involved are AllowPartiallyTrustedCallers on library1, and I don't even know why.
It shames me to admit that I'm quite ignorant about security in .NET. What should I do to prevent this exception? And while I'm here, any good articles to get me started on .NET security?