无法复制具有已知路径的文件句柄,但具有其HANDLE_ENTRY_INFO

时间:2014-09-28 05:59:33

标签: winapi ctypes jsctypes

我有5个进程。我有他们的流程ID。每个进程都锁定自己的parent.lock文件。我在名为parent.lock的数组中有这些PARENT_LOCKS_PATHS个文件路径。

使用NtQuerySystemInformationSystemHandleInformation我得到了一个列表,该列表为这5个进程使用的所有句柄返回SYSTEM_HANDLE_TABLE_ENTRY_INFO。它们按PID分组。

SYSTEM_HANDLE_TABLE_ENTRY_INFO的结构:

var SYSTEM_HANDLE_TABLE_ENTRY_INFO = new ctypes.StructType('SYSTEM_HANDLE_TABLE_ENTRY_INFO', [ //typedef struct _TagHANDLEINFO
    {'UniqueProcessId': ctypes.unsigned_short},
    {'CreatorBackTraceIndex': ctypes.unsigned_short},
    {'ObjectTypeIndex': ctypes.unsigned_char},
    {'HandleAttributes': ctypes.unsigned_char},
    {'HandleValue': ctypes.unsigned_short},
    {'Object': ctypes.uint32_t},
    {'GrantedAccess': ctypes.unsigned_long}
]); //HANDLEINFO, PHANDLEINFO;

在每个PID组中,我知道哪个句柄是parent.lock文件,我知道这是因为parent.lock文件是唯一的句柄GrantedAccess 1048704。所以我有一个对象,其PID与其parent.lock句柄条目信息链接。

所以现在的问题是:我想确定哪个parent.lock文件属于PARENT_LOCKS_PATHS文件中的哪个路径而无法使用GetFinalPathNameByHandle(因为我需要支持xp) )。我无法复制句柄ID,因为文件被锁定它是用:

创建/打开的
 mLockFileHandle = CreateFileW(filePath.get(),
                               GENERIC_READ | GENERIC_WRITE,
                               0, // no sharing - of course
                               nullptr,
                               CREATE_ALWAYS,
                               0,
                               nullptr);

这是我的情况图(感谢visio):

1 个答案:

答案 0 :(得分:2)

对于XP,您可以将NtQueryInformationFile()FileNameInformation信息类一起使用。