1

有没有办法在 .NET 中使用重定向文件路径运行进程,类似于 Sandboxie 和 DropboxPortableAHK 所做的?

例如,如果进程想要在 处写入文件C:\file.txt,我希望我的应用程序让进程写入C:\Sandbox\file.txt

4

3 回答 3

3

由于 .NET 迟早会将调用重定向到底层操作系统,因此您确实可以附加一个挂钩并替换类似 CreateFile() 的例程来修改路径。

Detours Library可能是您所需要的。它有一些许可问题,尤其是在 64 位模式下,所以寻找像这样的免费替代品:DetourXS

此处给出了挂钩 CreateFile/WriteFile/ReadFile 的确切说明:CodingTheWheel

您只需使用以下过程编写 DLL:

// Our custom version of the CreateFile Windows API, having the same parameters,
// return type, and calling convention as the version of CreateFile provided by the OS.
HANDLE WINAPI Mine_CreateFile(LPCWSTR lpFileName,DWORD dwDesiredAccess,
                              DWORD dwShareMode, LPSECURITY_ATTRIBUTES lpSecAttr,
                              DWORD dwCreateDisp, DWORD dwFlagsAttr,HANDLE hTemplate)
{
    // First, call the original CreateFile provided by the operating system.
    HANDLE hFile = Real_CreateFile(lpFileName,dwDesiredAccess,dwShareMode,lpSecAttr,
                                    dwCreateDisp,dwFlagsAttr,hTemplate);

    // Now, do whatever we want with the filename (lpFileName)
    /// e.g., redirect C:\test.txt to C:\MyApp\test.txt

    // Now, do whatever we want with the file handle (hFile)

    // Call the original CreateFile

    // Return the same value returned to us by the original API
    return hFile;
}
于 2012-09-24T15:10:21.097 回答
3

我建议您使用EasyHook,这是您正在寻找的示例。

于 2012-10-01T04:00:53.393 回答
0

这一点都不简单,但基本上你需要用本机代码(例如 C++)创建一个 DLL。此 DLL 挂钩文件和注册表 IO 并将其重定向到您的沙箱目录。然后,将此 DLL 注入沙盒进程。然后,DLL 将挂钩此进程的活动。

这是基本的想法。

于 2012-09-16T17:41:35.997 回答