DLL(Dynamic link library)が呼び出されているかどうか – プログラミング – Home

通知
すべてクリア

[解決済] DLL(Dynamic link library)が呼び出されているかどうか


ストーンフォール
 ストーンフォール
(@ストーンフォール)
ゲスト
結合: 9年前
投稿: 10
Topic starter  

ネットを調べていてもなかなか情報がなく、質問させて頂きます。

特定のDLL(Dynamic link library)が呼び出されているかどうか確認したいです。

上記DLLはC++で作成したものです。

何か良い方法はありませんでしょうか?

ご教授おねがいします!


引用未解決
トピックタグ
K
 K
(@K)
ゲスト
結合: 22年前
投稿: 98
 

「呼び出されている」の定義が曖昧だと思いますが・・・

HMODULE h = ::GetModuleHandle( _T(foo.dll) );
if( h != NULL ) {
// foo.dll がこのプロセスのアドレス空間にマップされている
} else {
// マップされていない
}

とか?


返信引用
ストーンフォール
 ストーンフォール
(@ストーンフォール)
ゲスト
結合: 9年前
投稿: 10
Topic starter  

Kさん
早速のアドバイス有難うございます。

GetModuleHandleで確認出来ました

しかし、1つ伝え忘れたことがありました。。。すみません。

確認するプログラムはfoo.dll内で行いたいです。

つまり、foo.dllは既にあるEXEファイルから呼び出されている状態で

他のEXEファイルがfoo.dllを使っていないかを確認したいです。

ご教授お願いします!


返信引用
K
 K
(@K)
ゲスト
結合: 22年前
投稿: 98
 

まず最初に、何のためにそれを知りたいのか?を書いた方がいいように思います。

foo.dll は自作(もしくは変更可能)ですね?
ならば DllEntryPoint() でカウントする、とか。
カウントする変数はプロセス間で共有するセクションに置かないといけない、とか
実行するユーザの権限が違っててても大丈夫なのか?とか
プロセスが異常終了したような場合でも安全か?とか
心配事はたくさんあります。私は未確認です。

あとは PSAPI で EnumProcesses() OpenProcess() EnumProcessModules() して
GetModuleFileNameEx() や GetModuleBaseName() でしょうか。
これも私は使ったこと無いと思います。


返信引用
ストーンフォール
 ストーンフォール
(@ストーンフォール)
ゲスト
結合: 9年前
投稿: 10
Topic starter  

Kさん アドバイス有難うございます。

なるほど、、今回の目的は同一ユーザーによる多重起動防止です。

そのため、DllEntryPoint() でカウントするという方法では難しいかと思います。

WinAPIなどでfoo.dllを使用している起動中のプロセスを探す事が出来ればいいんです
が、全く方法が分かりません。。


返信引用
ストーンフォール
 ストーンフォール
(@ストーンフォール)
ゲスト
結合: 9年前
投稿: 10
Topic starter  

方法としてはメモリマップトファイルで起動中フラグを保存する事でも対応できるので
しょうか。

しかし、以下の条件の場合、対応できませんね。。

>プロセスが異常終了したような場合でも安全か?


返信引用
ストーンフォール
 ストーンフォール
(@ストーンフォール)
ゲスト
結合: 9年前
投稿: 10
Topic starter  

コマンドプロンプトで 

tasklist /m

を行ったところ

boo.exe N/A となってしまい取得できませんでした。

※ boo.exe は foo.dllの呼び出し元EXE


返信引用
ストーンフォール
 ストーンフォール
(@ストーンフォール)
ゲスト
結合: 9年前
投稿: 10
Topic starter  

また、MSが提供しているDependency WalkerでEXEファイルの
関連DLLを検索する無料ツールがありまして

http://www.atmarkit.co.jp/fdotnet/dotnettips/866depends/depends.html

これで検索してもヒットしませんでした。。。
動的に呼び出すので、見つからないのかもしれません。


返信引用
K
 K
(@K)
ゲスト
結合: 22年前
投稿: 98
 

> 今回の目的は同一ユーザーによる多重起動防止です。

「普通は」は、ともかく、
私なら Mutex を使います。
「Mutex 多重起動」とかのキーワードで検索すればいくらでもヒットします。

「同一ユーザによる」ということは、
別ユーザなら多重起動してもいい、ってことですよね?
よくあるサンプルでは、デフォルトの Local Mutex なので
「同一ユーザのみ多重起動禁止で、別ユーザだと許可」だったりします。


返信引用
ストーンフォール
 ストーンフォール
(@ストーンフォール)
ゲスト
結合: 9年前
投稿: 10
Topic starter  

なるほどMutexの手がありましたか!

>「同一ユーザによる」ということは、
>別ユーザなら多重起動してもいい、ってことですよね?

はい、そうなります。

ありがとうございます!


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました