【发布时间】:2013-12-16 06:44:17
【问题描述】:
我创建了一个具有预定义协议的 SSH 代理(类似于 PuTTY 的 pageant.exe):身份验证请求通过包含文件映射名称的 WM_COPYDATA 发送到代理窗口:
// mapname is supplied via WM_COPYDATA
HANDLE filemap = OpenFileMapping(FILE_MAP_ALL_ACCESS, FALSE, mapname);
是否可以找出哪个进程(最终是进程名称)创建了特定的文件映射?
我可以在“filemap”上使用 GetSecurityInfo 来获取安全属性(SID、GID、...),但如何获取进程本身?
重要提示:无法更改协议(例如,将有关发送者的信息添加到 WM_COPYDATA),因为这是所有 PuTTY 类应用程序使用的预定义协议!
【问题讨论】:
-
可以以未记录的方式枚举用户空间中的所有 HANDLE。然后可以过滤“节”句柄(MemoryMapping)。但麻烦从这里开始。可能会留在用户空间并使用“OpenProcess”、“DuplicateHandle”和 GetFinalPathNameByHandle(在专用线程中,因为可以“挂起”)但内存映射不是文件......唯一的方法是动态加载一点内核驱动程序,但必须在 64b 操作系统上签名。
标签: winapi ipc file-mapping