AutoHotkey_L ソース コード (C++) を調べて、開発中のアプリケーションのセキュリティ目的でどの DLL 呼び出しを行うことができるかを制御するように変更するつもりです。ソース コードにはプリプロセッサ ディレクティブがあり、DLL 機能を非常に簡単に削除できますが、アプリケーションの目的でいくつかの DLL 呼び出しを行う必要があります。WinAPI 全体への DLL 呼び出しを許可するのではなく、それらを厳密に制御したいだけです。 .
他の開発者が AutoHotkey からの DLL 呼び出しを行う機能を制限したいという同様の欲求を持っていたため、DLL 呼び出し機能を排除するためのプリプロセッサ ディレクティブがそこにあると想定しています。私の質問は、DLL 機能を完全に排除せずに制御するための同様の方法があるかどうかです。それとも、DLL 呼び出しを行うソース コード メソッドを掘り下げて、特定の呼び出しのみを許可するようにパラメーターを制御できる場所を見つけ出すのが最善の策ですか? AutoHotkey フォーラムを調べましたが、役立つ情報は見つかりませんでした。
それが役立つ場合は、ディレクティブが DLL 呼び出しを制御する方法の簡単なスニペットを次に示します。
構成ヘッダー ファイル (config.h の 9 ~ 14 行目) からのプリプロセッサの定義は次のとおりです。
#ifdef _MSC_VER
#if defined(WIN32_PLATFORM) || defined(_WIN64)
#define ENABLE_DLLCALL
#define ENABLE_REGISTERCALLBACK
#endif
#endif
ENABLE_DLLCALL ディレクティブが DLL 機能にアクセスできるかどうかを制御するエントリ ポイントの例を次に示します (script.cpp 行 7910 ~ 7916)。参考までに、ここの bif 変数は BuiltInFunctionType であり、呼び出される組み込み関数が割り当てられ、返される Func オブジェクトに追加されます。
#ifdef ENABLE_DLLCALL
else if (!_tcsicmp(func_name, _T("DllCall")))
{
bif = BIF_DllCall;
max_params = 10000; // An arbitrarily high limit that will never realistically be reached.
}
#endif