设为首页 加入收藏

TOP

驱动开发:内核中进程与句柄互转(三)
2023-07-23 13:26:29 】 浏览:71
Tags:程与句
ess = PID; clientid.UniqueThread = 0; // 属性初始化 InitializeObjectAttributes(&obj, 0, OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE, 0, 0); NTSTATUS status = ZwOpenProcess(&hProcessHandle, PROCESS_ALL_ACCESS, &obj, &clientid); if (status == STATUS_SUCCESS) { // DbgPrint("[*] 已打开 \n"); ZwClose(&hProcessHandle); return hProcessHandle; } return 0; } // 将Handle转换为EProcess结构 PEPROCESS HandleToEprocess(HANDLE handle) { PEPROCESS pEprocess; NTSTATUS status = ObReferenceObjectByHandle(handle, GENERIC_ALL, *PsProcessType, KernelMode, &pEprocess, NULL); if (status == STATUS_SUCCESS) { return pEprocess; } return 0; } // EProcess转换为Handle句柄 HANDLE EprocessToHandle(PEPROCESS eprocess) { HANDLE hProcessHandle = (HANDLE)-1; NTSTATUS status = ObOpenObjectByPointer( eprocess, OBJ_KERNEL_HANDLE, 0, 0, *PsProcessType, KernelMode, &hProcessHandle ); if (status == STATUS_SUCCESS) { return hProcessHandle; } return 0; } VOID UnDriver(PDRIVER_OBJECT driver) { DbgPrint("[-] 驱动卸载 \n"); } NTSTATUS DriverEntry(IN PDRIVER_OBJECT Driver, PUNICODE_STRING RegistryPath) { DbgPrint("Hello LyShark \n"); // 将Handle转换为EProcess结构 PEPROCESS eprocess = HandleToEprocess(PidToHandle(6932)); DbgPrint("[*] HANDLE --> EProcess = %p \n", eprocess); // 将EProcess结构转换为Handle HANDLE handle = EprocessToHandle(eprocess); DbgPrint("[*] EProcess --> HANDLE = %p \n", handle); Driver->DriverUnload = UnDriver; return STATUS_SUCCESS; }

编译并运行如上这段代码片段,将把进程HANDLEEProcess结构互转,输出效果图如下所示;

首页 上一页 1 2 3 下一页 尾页 3/3/3
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇C/C++按位读取 下一篇C++面试八股文:override和finial..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目