我有5个进程。我有他们的流程ID。每个进程都锁定自己的parent.lock
文件。我在名为parent.lock
的数组中有这些PARENT_LOCKS_PATHS
个文件路径。
使用NtQuerySystemInformation
和SystemHandleInformation
我得到了一个列表,该列表为这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):