. NET 4 Methode Sicherheitsausnahme beim pinvoking

8

Ich habe einen Code, der native win32 pinvokiert. Seit ich auf .NET 4 aktualisiert habe, begann der Code eine MethodAccessException zu sagen:

  

Versuch durch die Sicherheitsmethode 'Tek.Audio.Midi.MidiDevice.GetDevices ()', um den systemeigenen Code über die Methode 'Tek.Native.Windows.Multimedia.midiInGetNumDevs ()' aufzurufen. Methoden müssen sicherheitskritisch oder sicherheitsrelevant sein, um systemeigenen Code aufrufen zu können.

Hier ist was los ist:

  • Die Methode Program.Main der ausführbaren Assembly ruft library1 public static Tek.Audio.Midi.MidiDevice.GetDevices() auf
  • Library1s GetDevices() ruft bibliothek2 's öffentlichen statischen pinvoke Tek.Native.Windows.Multimedia.midiInGetNumDevs() (yeah, schlechte Praxis, was auch immer)

Die einzigen sicherheitsrelevanten Attribute für die beteiligten Klassen, Methoden und Assemblies sind AllowPartiallyTrustedCallers in library1, und ich weiß nicht einmal warum.

Es ist mir eine Schande, zuzugeben, dass ich in .NET ziemlich unsicher bin. Was soll ich tun, um diese Ausnahme zu verhindern? Und während ich hier bin, irgendwelche guten Artikel, um mich mit .NET Sicherheit zu beginnen?

    
Trillian 15.07.2010, 13:54
quelle

1 Antwort

15

Sie haben Wahlmöglichkeiten. Am einfachsten wäre es, das neue Sicherheitsmodell zu deaktivieren.

%Vor%

ODER (bedenkt, dass ich kein .Net 4 Sicherheitsexperte bin)

Bearbeiten: Das Deaktivieren des Sicherheitsmodells .Net 4 ist unzuverlässig und sollte vermieden werden

Sie können Ihre Methode markieren:

%Vor%

, da Sie den Code für teilweise vertrauenswürdige Anrufer verwenden können.

Leider habe ich keinen guten Artikel, den ich Ihnen schicken kann. Ich musste das herausfinden, indem Sie meinen kaputten Code reparierten. :)

    
Nick Daniels 15.07.2010, 14:21
quelle

Tags und Links