首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >进程句柄而不是进程的文件句柄

进程句柄而不是进程的文件句柄
EN

Stack Overflow用户
提问于 2013-12-31 21:25:06
回答 1查看 176关注 0票数 2

在查找进程句柄的Iain's Code中,它被配置为只获取“文件”句柄,但我也需要“进程”句柄,但不能to.Can某个指向正确方向的人。谢谢

EN

回答 1

Stack Overflow用户

发布于 2013-12-31 21:34:49

只需修改代码以在该行后面添加更多逻辑

代码语言:javascript
复制
if (GetHandleType(handle, handleEntry.OwnerPid, out handleType) && handleType == SystemHandleType.OB_TYPE_FILE)

如果要处理process类型的句柄,请使用类似以下内容:

代码语言:javascript
复制
bool result = GetHandleType(handle, handleEntry.OwnerPid, out handleType);
if (result)
{
    switch (handleType)
    {
        case SystemHandleType.OB_TYPE_FILE:
        {
            // Existing code:
            string devicePath;
            ....
        }           
        break;

        case SystemHandleType.OB_TYPE_PROCESS:
        {
            // Your code here
            ....
        }           
        break;
    }
}

谢谢,还有,如果切换情况是进程类型,有没有办法从句柄值中找到进程名称?

你当然可以。但您必须深入理解Win32应用编程接口以及处理程序的工作方式。基本上,您希望使用DuplicateHandle在您自己的进程中复制拥有该句柄的另一个进程的句柄(这样您就可以访问它)。然后,您需要分配非托管内存,使用好的参数调用NtQueryObject,这样它将用字节填充您的非托管内存,然后您必须将这些字节封送回一个包含有关(进程)句柄信息的结构。

请深入查看您链接的代码,所有内容都写在那里。尤其是GetFileNameFromHandle函数。

1)在我们自己的进程中复制句柄

代码语言:javascript
复制
processHandle = NativeMethods.OpenProcess(ProcessAccessRights.PROCESS_DUP_HANDLE, true, processId);
if (NativeMethods.DuplicateHandle(processHandle.DangerousGetHandle(), handle, currentProcess, out objectHandle, 0, false, DuplicateHandleOptions.DUPLICATE_SAME_ACCESS))
{
    handle = objectHandle.DangerousGetHandle();
}

2)分配非托管内存...(您必须稍后将其销毁)

代码语言:javascript
复制
ptr = Marshal.AllocHGlobal(length);

3)...然后将其与权限参数一起传递给NtQueryObject

代码语言:javascript
复制
NT_STATUS ret = NativeMethods.NtQueryObject(handle, OBJECT_INFORMATION_CLASS.ObjectNameInformation, ptr, length, out length);

4)封送回已知的结构。在原始代码中,它是一个简单的字符串。

代码语言:javascript
复制
fileName = Marshal.PtrToStringUni((IntPtr)((int)ptr + 8), (length - 9) / 2);

在您的例子中,正确的结构是SYSTEM_HANDLE_ENTRY。在谷歌上搜索这个的用法示例。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20858097

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档