注入 Dll
InjectDll 是 Sandboxie Ini 中的一项沙盒设置。它告诉 Sandboxie 把某个 DLL“注入”到沙盒中的每个程序。“注入”意味着该 DLL 会被加载到进程中,例如:
你应该指定 DLL 的完整路径。如果 DLL 文件本身位于沙盒内,请指定沙盒内的完整路径。
注意: 注入 Dll 设置指定 32 位 DLL,在 64 位 Windows 上的 64 位进程中将忽略它。使用 注入 Dll64 设置指定 64 位 DLL。
加载到沙盒化程序中的 DLL 顺序如下:
- Ntdll.dll
- KernelBase.dll(Windows 7 及更高版本)
- Kernel32.dll
- SbieDll.dll(在 64 位 Windows 上,可以是 64 位或 32 位 SbieDll)
- InjectDlls(按 Sandboxie.ini 中指定的顺序加载)
- 可选地,ShimEng(或 Windows 7 及更高版本上的 AppHelp)及相关 DLL
- 所有 静态链接的 DLL
上述行为适用于 Sandboxie 3.46 及更高版本。早期版本实现了下面描述的不同行为:
注入的 DLL 会在所有静态链接的 DLL 加载并初始化之后、程序本身开始在其入口点执行之前,被加载到沙盒化进程(或程序)中。
如果 DLL 导出符号 InjectDllMain 或 InjectDllMain@8,Sandboxie 将在 DLL 加载后调用此过程,并传入 SbieDll 模块的地址。在你的代码中声明 InjectDllMain:
建议使用 hSbieDll 参数作为 SbieDll.Dll 的模块实例句柄,而不是依赖 GetModuleHandle("SbieDll.dll")。这使得注入的 DLL 无论 SbieDll.dll 实际使用什么名称,都能与之交互。不过,使用 LoadLibrary 或 GetModuleHandle 按名称查找 SbieDll 也是可以的。
目前,此设置无法从 沙盒管理器 操作。你必须手动把它编辑进 Sandboxie Ini。
另请参阅:注入 Dll64、SBIE DLL API、启动命令行。