2011-03-28 6 views
1

アンマネージドC++ dllがあります。私は魔女のC#のアセンブリを見つけるための方法を探していますのC#(。NET 3.5)アンマネージC++ dllの呼び出し側アセンブリ名を見つける方法

から、この管理されていないDLLの外部メソッドを呼び出しています私のアンマネージドC++のdll(私のC++ DLLに)(少なくとも、名前を呼んでいます

確かに、メソッドに追加のパラメータを渡したくありません。

ありがとうございます。

+0

西の邪悪な魔女? – Dynite

答えて

1

最後に解決策が見つかりました。

私は管理されていないDLLへのアクセスを許可しないように制限する方法を探していました。そこで、私は呼び出し元アセンブリの場所のスタックトレースをクロールしました。

最後に、(この方法で見つかった)発信者アセンブリの公開鍵トークンをチェックし、それを検証することにしました。

あなたからのおかげで...

+0

さらに詳しい情報を教えてください。アンマネージC++アセンブリ内の呼び出し元のC#アセンブリの公開鍵トークンをどのようにチェックしましたか?コード例を教えてください。 –

+0

コードを入力してください。 ' 'チャーcallingPath [MAX_PATH]; ' ' HMODULE HMODULE = globalHandle; ' ' 'チャーownPth [MAX_PATH]: –

+0

次のコードは、DLLファイルのフルパスとDLLファイルの発信者をフェッチGetModuleFileNameは(HMODULE、ownPth、(はsizeof(ownPth))); ' ' GetModuleFileNameは(NULL、callingPath、(はsizeof(callingPath))); ' ' ownPathStr = STD ::文字列(ownPth); ' ' callingPathStr = std :: string(呼び出しパス); ' – utvecklare

0

あなたはわかりません。あなたの外部メソッドはC互換言語で呼び出すことができ、WindowsとCRTはCLR言語について特別なことは何も保存しません。

1

これは、スタックウォークが必要です。マネージコードでうまく動作し、コードアクセスセキュリティがどのように実装されるかです。 ではなく、は、ネイティブのスタックフレームが歩いているときにうまく動作しますか?あなたのネイティブコードでStackWalk64()を試すことができます。高価で、CLRがもはやモジュールを偽造していない.NET 4.0の場合は特にうまくいく可能性があります。 非常にフレームポインタの省略最適化オプションに注意してください。

これをしないでください。マネージコードに余分な引数を渡すだけで簡単に解決するのはずっと簡単です。

関連する問題