SecurityException:eCallメソッドはシステムモジュールにパッケージ化する必要があります -- c# フィールド と clr フィールド と securityexception フィールド 関連 問題

SecurityException: ECall methods must be packaged into a system module












38
vote

問題

日本語

私は以下のような(C#)機能を持っています。

<事前> <コード> private static bool SpecialCase = false; public void Foo() { if (SpecialCase) { InternalMethod(); return; } Console.WriteLine(); } [MethodImpl(MethodImplOptions.InternalCall)] private static extern void InternalMethod();

デバッガ内の.NET Framework 4でこれを実行すると、メソッドは空白行を正常にコンソールに印刷して返します。デバッガの外で実行すると、次のメッセージで例外がスローされます。

<事前> <コード> System.Security.SecurityException: ECall methods must be packaged into a system module.

JITコンパイラがいつ(if) FILE *filepoint = (fopen(fileName, "r")); 2 が呼び出されたときではなく、JITコンパイラがメソッドをコンパイルしたときに例外がスローされます。 SecurityException をスローしないようにCLIに伝えるか、またはメソッドが実際に呼び出されるまで例外を遅らせることができるものはありますか?

ユースケースの注意: SpecialCase フィールドは、Microsoft .NET Frameworkで実行すると効果的にfalse、CLIの別の(特定の)実装で実行されている場合はtrueです。 Microsoft .NET Frameworkの下で実行中、 FILE *filepoint = (fopen(fileName, "r")); 5 への呼び出しは効果的に到達できません。

英語

I have a (C#) function similar to the following.

private static bool SpecialCase = false;  public void Foo() {     if (SpecialCase)     {         InternalMethod();         return;     }      Console.WriteLine(); }  [MethodImpl(MethodImplOptions.InternalCall)] private static extern void InternalMethod(); 

When I execute this with the .NET Framework 4 inside the debugger, the method successfully prints blank line to the console and returns. When I execute it outside the debugger, it throws an exception with the following message:

System.Security.SecurityException: ECall methods must be packaged into a system module. 

It appears the exception is thrown when the JIT compiler compiles the method as opposed to when (if) InternalMethod is called. Is there anything I can do (e.g. attributes) to tell the CLI to either not throw the SecurityException, or delay the exception until the method is actually called?

Side note on the use case: The SpecialCase field is effectively false when running with Microsoft .NET Framework, and true when running under a different (specific) implementation of the CLI. When running under the Microsoft .NET Framework, the call to InternalMethod is effectively unreachable.

</div
        
       
       

回答リスト

2
 
vote

コンパイラ指令として確認することができる< 。 ランタイム「IF」を使用するとは異なり、これにより、常にコードをコンパイルして実行時に呼び出すかどうかを判断するのではなく、コールがまったくコンパイルされたコードに含まれているかどうかを判断します(これは遅すぎます。 、あなたの分析に基づいて。

あなたのユースケースはテスト/検証シナリオのようです、それは内部通話が実際に行われるときを除いてコードにコンパイルされていないことを意味します。

あなたのユースケースが非論文以外のランタイムを含む場合、それ以来、それ以来、それ以来、正しい答えを劇的に変更することができます。

 

You may want to check the compiler directives as a possible option. Unlike using a run-time "if", this will determine whether the call is included in the compiled code at all, rather than always compiling it into the code and trying to determine whether to call it at run-time (which is too late, based on your analysis).

Your use-case seems like a testing/validation scenario, which means that you don't need it compiled into the code except when the internal call will actually be made.

Note that if your use-case involves a non-.NET runtime, you should provide more information since that could drastically change the correct answer.

</div
 
 
1
 
vote

属性<コード> [ComImport] クラス宣言

 

Add attribute [ComImport] to your class declaration

</div
 
 

関連する質問

113  Android:java.lang.securityException:権限拒否:Intentを起動します  ( Android java lang securityexception permission denial start intent ) 
私は他のアプリケーションから呼び出されるgwvectranotifierアクティビティを含むアプリケーションを作成しました。 通知ダイアログでは、「表示」ボタンと「閉じる」ボタンがあります。 'Show'ボタンのonClick、対応するアクティビティが開始さ...

4  レジストリキーを読み込むときの.NETクラッシュの偽装(LinkLabel SecurityException)  ( Impersonation in net crashes when reading registry keys linklabel securityexce ) 
私のアプリはサービスアカウントを偽装する必要があります。これは、 LogonUser へのネイティブコールを通して行う必要があります。ただし、.NETライブラリのランダムなコンポーネントがレジストリキーにアクセスしようとすると、アカウントにアクセスできない、<...

2  GSON SecurityException:クラスコンストラクタをアクセス可能にすることはできません  ( Gson securityexception can not make class constructor accessible ) 
静的ネストクラスを含むクラスをシリアライズ/逆シリアル化するためにGSONを使用しています。クラスは以下のようになります。 <事前> <コード> public class ClassA { private NestedClass nestedClass; p...

1  Silverlight 4からHTTPS-WCFサービスを呼び出すときのSecurityError  ( Securityerror when calling a https wcf service from silverlight 4 ) 
私はHTTPS経由でアクセス可能な単純なWCFサービスを作成しました。 WCF-Serviceは、認証モードとしてUSERNAMEPASSWORDVALIDator、CustomBinding、およびUserNameOverTransportを使用します。私は...

2  Android 7で現在のパスワードを変更できません  ( Cannot change current password in android 7 ) 
私のアプリにはデバイス管理電力があります。 Android 7で現在のパスワードを更新しようとしたとき、この "java.lang.securityException:adminは現在のパスワードを変更できません"例外が来られています。それはAndroid 6...

0  Godaddyに関するMySQLとエンティティフレームワークを使用したセキュリティ例外  ( Security exception using mysql and entity framework on godaddy ) 
GodaddyにEntity Frameworkを使用する場合、<コード> SecurityException を取得しています。エンティティはMySQLストアに対して構成されています。 (6.1.2)例外を持つ奇妙さの少し。例外スタックを見ると、サイト内の...

6  ZXINGバーコードスキャナを使用すると、SecurityExceptionが発生します  ( Using zxing barcode scanner causes securityexception ) 
Intent を起動して、バーコードをスキャンしてデータを取得できるように、私のアプリでZxingバーコードスキャナを使用します。非常に基本的なものそれは長い間問題なく働いています。私は最近、次のスタックトレースを使って再生を通してエラー報告を得ました: ...

10  ASP.NET MVC Webアプリケーションでセキュリティ例外を投げるLOG4NET  ( Log4net throwing security exception in asp net mvc web application ) 
私は3つのASP.NET MVC Webアプリケーションを書き込み、すべてのISPを使用して共有ホスティングサーバーにデプロイされています。 すべての3つのアプリケーションは構成と設定が非常によく似ています。 1回目のアプリケーションは、2番目と3番目の3番目...

0  java.lang.securityException:サポートされていないパス。しかし、私は許可を求めています  ( Getting java lang securityexception unsupported path but i am asking for permi ) 
ダウンロードマニュアルを使用してファイルをダウンロードして、「ローカルパッケージ」ディレクトリのディレクトリ、つまり/ Storage / Emaped / 0 / Android / Data / MyPackageName /、別のディレクトリのパッケージ...

31  ネットワークドライブから実行すると、私の.NETアプリケーションがクラッシュするのですか?  ( Why does my net application crash when run from a network drive ) 
私の.NETアプリケーションは、非常に同じ実行可能ファイルがローカルハードドライブから完全に正しく実行されている場合でも、ネットワークドライブから実行されたときに失敗しますか? 私は「完全信頼」のようにチェックしようとしました: <事前> <コード> try ...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有