Saturday, March 25, 2017

Gethrforexception Ioexception While Ssl

Klasse SSLSocket Diese Klasse erweitert Socket s und bietet einen sicheren Socket mit Protokollen wie Secure Sockets Layer (SSL) oder IETF Transport Layer Security (TLS) Protokolle. Solche Sockets sind normale Strom-Sockets, aber sie fügen eine Ebene von Sicherheits-Schutz über das zugrunde liegende Netzwerk-Transport-Protokoll, wie TCP. Diese Schutzmaßnahmen umfassen: Integritätsschutz. SSL schützt vor Modifikationen von Meldungen durch einen aktiven Wiretapper. Authentifizierung. In den meisten Modi bietet SSL Peer-Authentifizierung. Server werden in der Regel authentifiziert, und Clients authentifiziert werden, wie von Servern verlangt. Vertraulichkeit (Datenschutz). In den meisten Modi verschlüsselt SSL Daten, die zwischen Client und Server gesendet werden. Dies schützt die Vertraulichkeit der Daten, so dass passive Wiretappers nicht sehen, sensible Daten wie finanzielle Informationen oder persönliche Informationen von vielen Arten. Diese Arten von Schutz werden durch eine Cipher-Suite spezifiziert, die eine Kombination von kryptographischen Algorithmen ist, die von einer gegebenen SSL-Verbindung verwendet werden. Während des Verhandlungsprozesses müssen sich die beiden Endpunkte auf eine Ciphersuite einigen, die in beiden Umgebungen verfügbar ist. Wenn es keine solche Suite gemeinsam gibt, kann keine SSL-Verbindung aufgebaut werden, und es können keine Daten ausgetauscht werden. Die verwendete Chiffre-Suite wird durch einen Verhandlungsprozess namens Handshaking etabliert. Das Ziel dieses Prozesses besteht darin, eine Sitzung zu erstellen oder wieder zu verbinden, die viele Verbindungen im Laufe der Zeit schützen kann. Nachdem der Handshake abgeschlossen ist, können Sie auf Session-Attribute zugreifen, indem Sie die getSession-Methode verwenden. Der erste Handshake auf dieser Verbindung kann auf drei Arten initiiert werden: Aufruf von startHandshake, der explizit Handshakes initiiert, oder jeder Versuch, Anwendungsdaten auf diesem Socket zu lesen oder zu schreiben, verursacht einen impliziten Handshake oder einen Aufruf von getSession, eine Sitzung einzurichten Wenn es keine aktuell gültige Sitzung gibt und ein impliziter Handshake durchgeführt wird. Wenn das Handshaking aus irgendeinem Grund fehlschlägt, wird die SSLSocket geschlossen und es können keine weiteren Kommunikationen durchgeführt werden. Es gibt zwei Gruppen von Chiffre-Suiten, die Sie bei der Verwaltung von Chiffre-Suiten kennen sollten: Unterstützte Chiffre-Suiten: Alle Suiten, die von der SSL-Implementierung unterstützt werden. Diese Liste wird mit getSupportedCipherSuites gemeldet. Enabled Chiffre Suiten, die möglicherweise weniger als die volle Reihe von unterstützten Suiten. Diese Gruppe wird mit der Methode setEnabledCipherSuites festgelegt und mit der Methode getEnabledCipherSuites abgefragt. Zunächst wird ein Standardsatz von Chiffre-Suiten auf einem neuen Socket aktiviert, der die minimale vorgeschlagene Konfiguration darstellt. Implementierungsvorgaben erfordern, dass nur Cipher Suites, die Server authentifizieren und die Vertraulichkeit gewährleisten, standardmäßig aktiviert werden. Nur wenn beide Seiten ausdrücklich mit nicht authentifizierten und nicht-privaten (unverschlüsselten) Kommunikationen einverstanden sind, wird eine solche Ziphersuite ausgewählt. Wenn SSLSocket s zuerst erstellt werden, wird kein Handshaking durchgeführt, sodass Anwendungen zunächst ihre Kommunikationseinstellungen festlegen können: welche Chiffre-Suiten zu verwenden sind, ob der Socket im Client - oder Server-Modus sein soll usw. Allerdings wird die Sicherheit immer durch die Zeit bereitgestellt, die Werden Anwendungsdaten über die Verbindung gesendet. Sie können sich registrieren lassen, um die Benachrichtigung über die Benachrichtigung über den Handshake zu erhalten. Dies beinhaltet die Verwendung von zwei zusätzlichen Klassen. HandshakeCompletedEvent-Objekte werden an HandshakeCompletedListener-Instanzen übergeben, die von Benutzern dieser API registriert werden. SSLSockets werden von SSLSocketFactorys erstellt oder durch Annehmen einer Verbindung von einem SSLServerSocket. Ein SSL-Socket muss sich für den Client - oder Server-Modus entscheiden. Dies bestimmt, wer den Handshaking-Prozess beginnt, sowie welche Nachrichten von jeder Partei gesendet werden sollen. Jede Verbindung muss über einen Client und einen Server verfügen, oder der Handshake funktioniert nicht ordnungsgemäß. Sobald das erste Handshaking gestartet wurde, kann ein Socket nicht zwischen Client - und Server-Modi wechseln, auch nicht bei Neuverhandlungen. Konstruktor-Übersicht Wird nur von Unterklassen verwendet. Konstruiert einen nicht initialisierten, nicht verbundenen TCP-Socket. Wird nur von Unterklassen verwendet. Erstellt eine TCP-Verbindung zu einem benannten Host an einem angegebenen Port. Dies fungiert als SSL-Client. Wenn es einen Sicherheitsmanager gibt, wird seine checkConnect-Methode mit der Host-Adresse und dem Port als Argumente aufgerufen. Dies könnte zu einer SecurityException führen. Parameter: host - Name des zu verbindenden Hosts oder null für die Loopbackadresse. Port - Nummer des Servers Port Throws: IOException - wenn ein IO-Fehler beim Erstellen der Socket SecurityException auftritt - wenn ein Sicherheitsmanager vorhanden ist und seine checkConnect-Methode den Vorgang nicht zulässt. UnknownHostException - wenn der Host nicht bekannt ist IllegalArgumentException - wenn der Portparameter außerhalb des angegebenen Bereichs gültiger Portwerte liegt, der zwischen 0 und 65535 einschließlich liegt. Siehe auch: SecurityManager. checkConnect (java. lang. String, int) Wird nur von Unterklassen verwendet. Erstellt eine TCP-Verbindung zu einem Server an einer bestimmten Adresse und einem Port. Dies fungiert als SSL-Client. Wenn es einen Sicherheitsmanager gibt, wird seine checkConnect-Methode mit der Host-Adresse und dem Port als Argumente aufgerufen. Dies könnte zu einer SecurityException führen. Parameter: address - der Host-Port des Servers - sein Port Throws: IOException - wenn beim Erstellen des Socket SecurityException ein IO-Fehler auftritt - wenn ein Security Manager existiert und seine checkConnect-Methode den Vorgang nicht zulässt. IllegalArgumentException - wenn der Portparameter außerhalb des angegebenen Bereichs gültiger Portwerte liegt, der zwischen 0 und 65535 einschließlich liegt. NullPointerException - wenn Adresse null ist. Siehe auch: SecurityManager. checkConnect (java. lang. String, int) Wird nur von Unterklassen verwendet. Erstellt eine SSL-Verbindung zu einem benannten Host an einem bestimmten Port, wobei die Client-Seite der Verbindung eine gegebene Adresse und einen Port verbindet. Dies fungiert als SSL-Client. Wenn es einen Sicherheitsmanager gibt, wird seine checkConnect-Methode mit der Host-Adresse und dem Port als Argumente aufgerufen. Dies könnte zu einer SecurityException führen. Parameter: host - Name des zu verbindenden Hosts oder null für die Loopbackadresse. Port - Nummer des Servers Port clientAddress - die Clients, an die der Socket gebunden ist, oder null für die anyLocal-Adresse. ClientPort - die Clients, an die der Socket gebunden ist, oder null für einen vom System ausgewählten freien Port. Throws: IOException - wenn ein IO-Fehler beim Erstellen des Socket SecurityException auftritt - wenn ein Sicherheitsmanager vorhanden ist und seine checkConnect-Methode den Vorgang nicht zulässt. UnknownHostException - wenn der Host nicht bekannt ist IllegalArgumentException - wenn der Portparameter oder ClientPort-Parameter außerhalb des angegebenen Bereichs gültiger Portwerte liegt, der zwischen 0 und 65535 einschließlich liegt. Siehe auch: SecurityManager. checkConnect (java. lang. String, int) Wird nur von Unterklassen verwendet. Erstellt eine SSL-Verbindung zu einem Server an einer bestimmten Adresse und einem TCP-Port, wobei die Client-Seite der Verbindung eine gegebene Adresse und einen Port verbindet. Dies fungiert als SSL-Client. Wenn es einen Sicherheitsmanager gibt, wird seine checkConnect-Methode mit der Host-Adresse und dem Port als Argumente aufgerufen. Dies könnte zu einer SecurityException führen. Parameter: address - der Server-Host-Port - sein Port clientAddress - die Clients, an die der Socket gebunden ist, oder null für die anyLocal-Adresse. ClientPort - die Clients, an die der Socket gebunden ist, oder null für einen vom System ausgewählten freien Port. Throws: IOException - wenn ein IO-Fehler beim Erstellen des Socket SecurityException auftritt - wenn ein Sicherheitsmanager vorhanden ist und seine checkConnect-Methode den Vorgang nicht zulässt. IllegalArgumentException - wenn der Portparameter oder der ClientPort-Parameter außerhalb des angegebenen Bereichs gültiger Portwerte liegt, der zwischen 0 und 65535 einschließlich liegt. NullPointerException - wenn Adresse null ist. Siehe auch: SecurityManager. checkConnect (java. lang. String, int) Methoden-Detail getSupportedCipherSuites Gibt die Namen der Chiffre-Suiten zurück, die für diese Verbindung aktiviert werden können. Normalerweise wird nur eine Teilmenge davon standardmäßig aktiviert, da diese Liste auch Chiffre-Suiten enthalten kann, die nicht die Anforderungen an die Servicequalität für diese Vorgaben erfüllen. Solche Chiffrier-Suiten könnten in speziellen Anwendungen nützlich sein. GetEnabledCipherSuites Gibt die Namen der SSL-Chiffresuiten zurück, die derzeit für diese Verbindung aktiviert sind. Wenn eine SSLSocket zuerst erstellt wird, unterstützen alle aktivierten Verschlüsselungs-Suites eine minimale Dienstgüte. Daher kann dieser Wert in einigen Umgebungen leer sein. Selbst wenn eine Suite aktiviert ist, kann sie nie verwendet werden. (Z. B. der Peer unterstützt dies nicht), die erforderlichen Zertifikate (und privaten Schlüssel) für die Suite sind nicht verfügbar oder eine anonyme Suite ist aktiviert, aber die Authentifizierung ist erforderlich setEnabledCipherSuites Legt die für diese Verbindung aktivierten Chiffre-Suiten fest Nach dem erfolgreichen Aufruf dieser Methode sind nur die im Parameter suites aufgelisteten Suites aktiviert. Weitere Informationen dazu finden Sie unter getEnabledCipherSuites (). Weitere Informationen finden Sie unter getSupportedCipherSuites () Parameter: suites - Namen aller Chiffre-Suiten, die Throws aktivieren sollen: IllegalArgumentException - wenn eine oder mehrere der vom Parameter angegebenen Ziffern nicht unterstützt werden oder wenn der Parameter null ist GetSupportedCipherSuites () getSupportedCipherSuites () getSupportedProtocols Gibt die Namen der Protokolle zurück, die für die Verwendung auf einer SSL-Verbindung aktiviert werden können. Rückgabewert: ein Array mit unterstützten Protokollen getEnabledProtocols Gibt die Namen der Protokollversionen zurück, die derzeit für diese Funktion aktiviert sind Verbindung. SetEnabledProtocols Legt die für diese Verbindung aktivierten Protokollversionen fest. Die Protokolle müssen von getSupportedProtocols () als unterstützt aufgelistet worden sein. Nach einem erfolgreichen Aufruf dieser Methode werden nur Protokolle aktiviert, die im Parameter protocols aufgelistet sind. Parameter: protocols - Namen aller zu aktivierenden Protokolle. Throws: IllegalArgumentException - wenn eines oder mehrere der vom Parameter angegebenen Protokolle nicht unterstützt wird oder wenn der Parameter protocols null ist. Siehe auch: getEnabledProtocols () getSession Gibt die von dieser Verbindung verwendete SSL-Sitzung zurück. Diese können langlebig sein und entsprechen häufig einer gesamten Login-Session für einige Benutzer. Die Sitzung spezifiziert eine bestimmte Chiffre-Suite, die von allen Verbindungen in dieser Sitzung aktiv genutzt wird, sowie die Identitäten der Sitzungen Client und Server. Diese Methode wird den ersten Handshake auslösen, wenn nötig und dann blockieren, bis der Handshake hergestellt wurde. Wenn während des ersten Handshakes ein Fehler auftritt, gibt diese Methode ein ungültiges Sitzungsobjekt zurück, das eine ungültige Chiffre-Suite von SSLNULLWITHNULLNULL meldet. GetHandshakeSession Gibt die SSLSession zurück, die während eines SSLTLS-Handshakes erstellt wird. TLS-Protokolle können Parameter aushandeln, die bei der Verwendung einer Instanz dieser Klasse erforderlich sind, aber bevor die SSLSession vollständig initialisiert und über getSession zur Verfügung gestellt wurde. Beispielsweise kann die Liste der gültigen Signaturalgorithmen den Typ der Zertifikate beschränken, die während TrustManager-Entscheidungen verwendet werden können, oder die maximalen TLS-Fragmentpaketgrößen können geändert werden, um die Netzwerkumgebung besser zu unterstützen. Diese Methode bietet einen frühen Zugriff auf die zu erstellende SSLSession. Abhängig davon, wie weit der Handshake fortgeschritten ist, sind einige Daten möglicherweise noch nicht verfügbar. Wenn z. B. ein Remoteserver eine Zertifikatkette sendet, aber diese Kette noch nicht verarbeitet wurde, wird die Methode getPeerCertificates von SSLSession eine SSLPeerUnverifiedException auslösen. Sobald diese Kette verarbeitet wurde, gibt getPeerCertificates den richtigen Wert zurück. Im Gegensatz zu getSession (). Initiiert diese Methode den initialen Handshake nicht und blockiert erst, wenn das Handshaking beendet ist. Rückgabewert: null, wenn diese Instanz momentan nicht handgeschrieben wird oder wenn der aktuelle Handshake nicht weit genug fortgeschritten ist, um eine grundlegende SSLSession zu erstellen. Andernfalls gibt diese Methode die SSLSession zurück, die derzeit ausgehandelt wird. Throws: UnsupportedOperationException - wenn der zugrunde liegende Provider den Vorgang nicht implementiert. Seit: 1.7 Siehe auch: SSLEngine. SSLSession. ExtendedSSLSession. X509ExtendedKeyManager. X509ExtendedTrustManager addHandshakeCompletedListener Registriert einen Ereignis-Listener, um Benachrichtigungen zu empfangen, dass ein SSL-Handshake auf dieser Verbindung abgeschlossen wurde. RemoveHandshakeCompletedListener Entfernt einen zuvor registrierten Handshake-Abschluss-Listener. StartHandshake Startet einen SSL-Handshake auf dieser Verbindung. Häufige Gründe sind unter anderem die Verwendung neuer Verschlüsselungsschlüssel, die Änderung von Verschlüsselungssuiten oder die Initiierung einer neuen Sitzung. Um die vollständige erneute Authentifizierung zu erzwingen, könnte die aktuelle Sitzung vor dem Starten dieses Handshakens ungültig werden. Wenn Daten bereits auf der Verbindung gesendet wurden, fährt sie bei diesem Handshake weiter. Wenn der Handshake beendet ist, wird dies mit einem Ereignis signalisiert. Diese Methode ist synchron für den ersten Handshake auf einer Verbindung und kehrt zurück, wenn der ausgehandelte Handshake abgeschlossen ist. Einige Protokolle unterstützen möglicherweise nicht mehrere Handshakes auf einem vorhandenen Socket und können eine IOException auslösen. SetUseClientMode Konfiguriert das Socket für den Client - (oder Server-) Modus beim Handshaking. Diese Methode muss aufgerufen werden, bevor ein Handshake auftritt. Sobald der Handshake begonnen hat, kann der Modus für die Lebensdauer dieser Buchse nicht zurückgesetzt werden. Server authentifizieren sich normalerweise, und Clients sind nicht dazu verpflichtet. Parameter: mode - true, wenn der Socket seinen Handshake im Clientmodus starten soll. Throws: IllegalArgumentException - wenn nach dem ersten Handshake ein Moduswechsel versucht wird. Siehe auch: getUseClientMode () getUseClientMode Gibt true zurück, wenn der Socket so eingestellt ist, dass er beim Handshaking den Client-Modus verwendet. Rückgabewerte: true, wenn der Socket Handshake im Client-Modus durchführen sollte. Siehe auch: setUseClientMode (boolean) setNeedClientAuth Konfiguriert den Socket, um eine Client-Authentifizierung zu erfordern. Diese Option ist nur für Sockets im Server-Modus nützlich. Eine Sockets-Clientauthentifizierungseinstellung ist eine der folgenden: Clientauthentifizierung erforderlich Clientauthentifizierung angefordert keine Clientauthentifizierung gewünscht Im Gegensatz zu setWantClientAuth (boolean). Wenn diese Option gesetzt ist und der Client sich dafür entscheidet, keine Authentifizierungsinformationen über sich selbst bereitzustellen, werden die Verhandlungen angehalten und die Verbindung wird fallengelassen. Das Aufrufen dieser Methode überschreibt alle vorherigen Einstellungen, die durch diese Methode oder setWantClientAuth (boolean) vorgenommen wurden. GetNeedClientAuth Gibt true zurück, wenn das Socket eine Client-Authentifizierung erfordert. Diese Option ist nur für Sockets im Server-Modus nützlich. SetWantClientAuth Konfiguriert das Socket, um die Clientauthentifizierung anzufordern. Diese Option ist nur für Sockets im Server-Modus nützlich. Eine Sockets-Clientauthentifizierungseinstellung ist eine der folgenden: Clientauthentifizierung erforderlich Clientauthentifizierung angefordert keine Clientauthentifizierung gewünscht Im Gegensatz zu setNeedClientAuth (boolean). Wenn diese Option gesetzt ist und der Client sich dafür entscheidet, keine Authentifizierungsinformationen über sich selbst bereitzustellen, werden die Verhandlungen fortgesetzt. Das Aufrufen dieser Methode überschreibt alle vorherigen Einstellungen, die mit dieser Methode durchgeführt werden, oder setNeedClientAuth (boolean). GetWantClientAuth Gibt true zurück, wenn der Socket Client-Authentifizierung anfordert. Diese Option ist nur für Sockets im Server-Modus nützlich. SetEnableSessionCreation Steuert, ob neue SSL-Sitzungen von diesem Socket eingerichtet werden können. Wenn Session-Kreationen nicht erlaubt sind und es keine existierenden Sessions gibt, gibt es kein erfolgreiches Handshaking. Parameter: flag - true gibt an, dass Sitzungen erstellt werden können. Dies ist die Standardeinstellung. False bedeutet, dass eine bestehende Sitzung wieder aufgenommen werden muss. Siehe auch: getEnableSessionCreation () getEnableSessionCreation Gibt true zurück, wenn neue SSL-Sitzungen durch diesen Socket erstellt werden können. Rückgabewert: true bedeutet, dass Sitzungen erstellt werden können. Dies ist die Standardeinstellung. False bedeutet, dass eine bestehende Sitzung wieder aufgenommen werden muss. Siehe auch: setEnableSessionCreation (boolean) getSSLParameters Gibt die für diesen SSLSocket gültigen SSLParameter zurück. Die Ciphersuite und Protokolle der zurückgegebenen SSLParameter sind immer nicht-null. Rückgabewerte: die für diese SSLSocket gültigen SSLParameter. Seit: 1.6 setSSLParameters Wendet SSLParameter auf diesen Socket an. Dies bedeutet: Wenn params. getCipherSuites () nicht null ist, wird setEnabledCipherSuites () mit diesem Wert aufgerufen, wenn params. getProtocols () nicht null ist, setEnabledProtocols () wird mit diesem Wert aufgerufen, wenn params. getNeedClientAuth () oder params. GetWantClientAuth () gibt true zurück. SetNeedClientAuth (true) und setWantClientAuth (true) werden aufgerufen, andernfalls wird setWantClientAuth (false) aufgerufen. Parameter: params - die Parameter Throws: IllegalArgumentException - wenn setEnabledCipherSuites () oder der setEnabledProtocols () - Aufruf fehlschlägt Seit: 1.6 Einen Fehler oder eine Funktion übergeben Weitere Informationen zu API-Referenz - und Entwicklerdokumentationen finden Sie unter Java SE-Dokumentation. Diese Dokumentation enthält detaillierte, entwicklerbezogene Beschreibungen mit konzeptionellen Übersichten, Definitionen von Begriffen, Workarounds und Arbeitsbeispielen. Copyright x00a9 1993, 2016, Oracle und seine Tochtergesellschaften. Alle Rechte vorbehalten. Die Verwendung unterliegt den Lizenzbestimmungen. Weitere Informationen finden Sie in der Dokumentation zur Umverteilungsrichtlinie. Scripting auf dieser Seite Tracks Traffic Traffic, aber nicht den Inhalt in irgendeiner Weise ändern. Ich habe einige IO-Code, der einen Stream liest innerhalb eines try..catch. Es fängt IOException und ruft System. Runtime. InteropServices. Marshal. GetHRForException () innerhalb des Fangs, in einem Versuch, verschiedene Aktionen auf der Grundlage der HResult zu nehmen. So etwas wie dieses: Aber diesen Code in ASP mit trustmedium ausführen, bekomme ich diese Ausnahme: Ein paar Fragen: Ich denke, die Ausnahme ist aufgetreten, weil GetHRForException ruft in nicht verwalteten Code, der nicht in Medium Vertrauen erlaubt ist. Korrigieren Diese Ausnahme wird geworfen, nicht zum Zeitpunkt der Ausführung von GetHRForException, aber zum Zeitpunkt der Methode wird JITed - Correct (Der stacktrace zeigt meine Methode, aber ich bin 99 sicher, dass eine IO-Ausnahme nicht aufgetreten ist) Wenn ja, Gibt es eine Möglichkeit für mich, das Verhalten in einer partiellen Vertrauensumgebung zu variieren, so dass ich nicht die GetHRForException (unmanaged Code) aufrufen, wo es nicht erlaubt ist Mit anderen Worten, wie kann ich dem JIT erlauben, zum Zeitpunkt der Kompilierung erfolgreich zu sein, während auch Auswertung zur Laufzeit, ob der Code GetHRForException () aufrufen sollte So etwas wie dies: Ich denke, es gibt einen Laufzeitmechanismus für den Test, wenn Berechtigungen verfügbar sind, aber havent in der Lage, es zu finden. BEARBEITEN. Ist dieser Blog-Artikel die Antwort ShawnFa von Microsoft sagt, dass Sie nicht versuchen können. Catch (SecurityException) um eine Methode, die durch einen LinkDemand geschützt ist. Wenn MethodA () MethodB () aufruft und MethodB () mit LinkDemand für vollständige Vertrauenswürdigkeit markiert wird, wird der LinkDemand überprüft, wobei MethodA Jited ist. Daher muss ich die Marshal. GetHRForException in eine separate Methode extrahieren, um die SecurityException zu vermeiden. Ist das korrekt Auf meinen Code angewendet, kann MethodA () der Code sein, der Read aufruft und dann im catch versucht, GetHRForException () aufzurufen. GetHRForException ist MethodB (). Der LinkDemand wird ausgewertet, wenn MethodA () JITd ist. (Dieser LinkDemand schlägt in meinem Medium vertrauen ASP-Szenario). Wenn ich die Methode GetHRForException in eine neue Methode MethodC () verschieben und MethodC () nur bedingt aufrufen muss, nachdem eine imperative permission. Demand () erfolgreich ist, sollte ich die SecurityException an der JIT-Zeit vermeiden können, da MethodC () sein wird JITd nur, nachdem die Berechtigung. Demain () erfolgreich ist. Gesendet am Jul 12 09 um 14:20 Die Methode erforderlich ist, SecurityPermission. IsUnrestricted (). Es gibt eine true oder false, die angibt, ob die Berechtigung erlaubt ist oder nicht. Es erfordert keine Berechtigung, ebenso wie SecurityPermission. Demand (). Ich benutze IsUnresticted mit SecurityPermissionFlag. UnmanagedCode, um zu sehen, ob die Assembly darf nicht verwalteten Code aufrufen, und rufen Sie den nicht verwalteten Code nur, wenn erlaubt. Es gibt einen zusätzlichen Twist. Der JIT-Compiler prüft beim Kompilieren einer Methode nach CodeAccessPermission LinkDemands auf einer beliebigen Methode, die als die zu kompilierende Methode bezeichnet wird. Marshal. GetHRForException () ist mit einem LinkDemand markiert. Daher wird meine Methode, die Marshal. GetHRForException () aufruft, eine uncatchable SecurityException zum Zeitpunkt der JIT-Kompilierung werfen, wenn sie in einer beschränkten Umgebung wie ASP mit mittlerer Vertrauenswürdigkeit ausgeführt wird. Daher muss man die Methode, die Marshal. GetHRForException () in diesem Fall aufruft, niemals JIT aufrufen, was bedeutet, dass ich Marshal. GetHRForException () in eine separate Methode in meinem Code auflösen muss, der aufgerufen wird (und somit JITted) nur dann, wenn UnmanagedCode ist uneingeschränkt. Heres einige Beispiel-Code: beantwortet Jul 20 09 at 17:56 Ja - mittlere Vertrauen wird nicht zulassen, Anrufe in nicht verwalteten Code. Die einzige Vertrauensstufe, die es zulässt, ist volles Vertrauen. Es hängt davon ab, ob. CAS-Anforderungen können zur Laufzeit stattfinden, aber die Hosting-Umgebung kann auch auf eine Wanderung gehen und für Dinge, die es nicht tun kann. Sie können testen, um festzustellen, ob Sie einen nicht verwalteten Code anrufen können, indem Sie eine CAS-Anfrage mit einer Instanz von SecurityPermission verwenden. Der Code, um eine CAS-Nachfrage sieht aus wie dies beantwortet werden. Dies deckt Teil b von Q3 ab. Aber was ist mit Teil a Wie bekomme ich die JIT-Kompilierung zum Erfolg Kann ich meine Methode mit einem Sicherheitsattribut oder markieren. Denken Sie daran, meine Theorie ist, dass der SecurityPermission-Fehler nicht zur Laufzeit geschieht, es geschieht während JIT - und ich denke, Sie bestätigt, dass dies möglich ist. Also die Frage ist, wie schreibe ich den Code, damit die JIT zu kompilieren. Ndash Cheeso Es sollte zur Laufzeit geschehen, sonst würde die Baugruppe nicht laden - und dafür muss die Baugruppe markiert werden, da die Erlaubnis erforderlich ist. Selbst dann that39s wohl ein Laufzeit-Check, wie es auf Montage Belastung, die zur Laufzeit sein könnte passieren wird. Ndash blowdart Unterschiedliche Art der Überprüfung, Link-Anforderungen sind Attribute auf eine Methode, und werden tatsächlich bei JIT-Zeit überprüft. It39s ziemlich viel von dem Rahmen selbst verwendet und es ist selten, es außerhalb der CLR-Quelle zu sehen. Was ich demonstrieren ist eine imperative Nachfrage, nicht eine deklarative wie eine SecurityPermission (SecurityAction. LinkDemand, uneingeschränkt wahr) ndash blowdart Jul 12 09 at 18:55


No comments:

Post a Comment