PID & PEPROCESS & HANDLE 相互间转换

本文介绍如何在Windows内核中实现PID、PEPROCESS结构指针与HANDLE之间的相互转换,包括使用PsLookupProcessByProcessId、PsGetProcessId及ObOpenObjectByPointer等API的具体方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

PID & PEPROCESS & HANDLE 相互间转换

from \ toPIDPEPROCESSHANDLE
PIDPsLookupProcessByProcessId
PEPROCESSPsGetProcessIdObOpenObjectByPointer
HANDLEObReferenceObjectByHandle
/* File: Kmd.h Author: WzrterFX (Modified by Assistant) Description: 内核驱动头文件,修复类型定义与IOCTL生成问题 */ #pragma once #ifndef KMD_H #define KMD_H #include <ntifs.h> #include <cstdint> // 预定义设备类型宏 #define KMD_DEVICE_TYPE 0x8000 // 修正点:使用预处理器宏定义设备类型 namespace Kmd { // 内核API声明 namespace _NtifsApi { extern "C" { NTSTATUS IoCreateDriver(PUNICODE_STRING, PDRIVER_INITIALIZE); NTSTATUS PsLookupProcessByProcessId(HANDLE, PEPROCESS*); NTSTATUS MmCopyVirtualMemory(PEPROCESS, PVOID, PEPROCESS, PVOID, SIZE_T, KPROCESSOR_MODE, PSIZE_T); } } // IOCTL控制码定义 namespace _IoCtls { // 使用预处理器宏生成IOCTL码 constexpr ULONG attach = CTL_CODE(KMD_DEVICE_TYPE, 0x800, METHOD_BUFFERED, FILE_ANY_ACCESS); // 修正点 constexpr ULONG read = CTL_CODE(KMD_DEVICE_TYPE, 0x801, METHOD_BUFFERED, FILE_ANY_ACCESS); constexpr ULONG write = CTL_CODE(KMD_DEVICE_TYPE, 0x802, METHOD_BUFFERED, FILE_ANY_ACCESS); } // 设备扩展结构体(存储进程上下文) typedef struct _DEVICE_EXTENSION { PEPROCESS AttachedProcess; HANDLE ProcessId; } DEVICE_EXTENSION, * PDEVICE_EXTENSION; // 驱动请求数据结构 typedef struct _KMD_REQUEST { HANDLE ProcessId; PVOID FromAddress; PVOID ToAddress; SIZE_T Size; } KMD_REQUEST, * PKMD_REQUEST; // 驱动类声明 class KmdDriver { private: PDEVICE_OBJECT DeviceObject; UNICODE_STRING SymbolicLinkName; public: NTSTATUS Create(PDRIVER_OBJECT); static void DriverUnload(PDRIVER_OBJECT); static NTSTATUS DeviceControl(PDEVICE_OBJECT, PIRP); }; } #endif // !KMD_H易语言怎么调用
03-22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值