小编Rud*_*udi的帖子

从文件句柄获取文件名?

我将 ntdll.dll 的 NtCreateFile() 函数挂钩以允许/拒绝某些文件的访问。与 kernel32.dll 的 CreateFile() 不同,它可以轻松地为您提供相关文件的完整路径,ntdll.dll 的 NtCreateFile() 函数只为您提供文件的句柄。我需要从文件句柄获取文件的完整路径,从而允许/拒绝访问。我四处搜索,似乎没有有效的 C# 解决方案。

解决方案使用 C++,并由 Microsoft 提供文档。我试图将它移植到 C# 中,但没有取得太大的成功。这是我对“从文件句柄获取文件名”的 C++ 版本的 C# 等效项的尝试:

    public string GetFileNameFromHandle(IntPtr FileHandle)
    {
        string fileName = String.Empty;
        IntPtr fileMap = IntPtr.Zero, fileSizeHi = IntPtr.Zero;
        UInt32 fileSizeLo = 0;

        fileSizeLo = GetFileSize(FileHandle, fileSizeHi);

        if (fileSizeLo == 0 && fileSizeHi == IntPtr.Zero)
        {
            // cannot map an 0 byte file
            return String.Empty;
        }

        fileMap = CreateFileMapping(FileHandle, IntPtr.Zero, FileMapProtection.PageReadonly, 0, 1, null);

        if (fileMap != IntPtr.Zero) …
Run Code Online (Sandbox Code Playgroud)

c# pinvoke hook dllimport

5
推荐指数
2
解决办法
5026
查看次数

标签 统计

c# ×1

dllimport ×1

hook ×1

pinvoke ×1