加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

windows 内核-根据进程ID获取进程句柄

(2012-07-26 20:47:27)
标签:

杂谈

分类: 安全编程
////////////////////////////////
//功    能:根据进程ID获取进程句柄
//参    数: 进程ID
//返 回 值:进程句柄
////////////////////////////////
HANDLE OpenProcess(
    HANDLE  Processid
)
{
    NTSTATUS status;
    PEPROCESS Process = NULL;
    HANDLE hProcess = NULL;
    UNICODE_STRING Unicode;
    status = PsLookupProcessByProcessId(Processid, &Process);
    if (NT_SUCCESS(status))//判断进程号是否存在
    {
        RtlInitUnicodeString(&Unicode, L"PsProcessType");
        //得到系统导出函数的地址和用户态的GetProcessAddress雷同
        PsProcessType = MmGetSystemRoutineAddress(&Unicode);
        if (PsProcessType)
        {
            status = ObOpenObjectByPointer(
                         Process,
                         0,
                         NULL,
                         PROCESS_ALL_ACCESS,
                         (PVOID) * PsProcessType,
                         KernelMode,
                         &hProcess
                     );

            if (NT_SUCCESS(status))
            {
                //减少指针计数
                ObfDereferenceObject(Process);
                return hProcess;
            }
        }
        ObfDereferenceObject(Process);
    }
    return 0;
}

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有