我一直在查看 AutoHotkey_L 源代码(它是 C++),目的是修改它以控制出于安全目的我们正在开发的应用程序可以进行哪些 DLL 调用。源代码中有一个预处理器指令,可以非常简单地消除 DLL 功能,但是我们仍然需要为应用程序进行一些 DLL 调用,我们只希望对这些进行严格控制,而不是允许 DLL 调用整个 WinAPI .
我假设存在用于消除 DLL 调用功能的预处理器指令,因为其他开发人员也有类似的愿望来限制从 AutoHotkey 进行 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