欢迎光临散文网 会员登陆 & 注册

mdl 读写

2023-03-02 13:40 作者:苦吖11  | 我要投稿

结构体:

typedef struct  L_Process

{

    ULONG pid; //进程ID

    ULONG64 Address; //内存地址

    ULONG64 buf; //缓冲区指针

    ULONG Size; //内存大小

}L_Process, * PL_Process;

读:

L_ProcesspInputData = (L_Process)InputData;//拿到输入的数据

Status = PsLookupProcessByProcessId((HANDLE)pInputData->pid, &process);通过进程id获得epprocess进程结构

if (NT_SUCCESS(Status) && MmIsAddressValid((PVOID)pInputData->buf) && process != NULL)

{

PMDL mdl = IoAllocateMdl((PVOID)pInputData->buf, pInputData->Size, 0, 0, NULL);//创建MDL,首地址为buf,长度为size

if (!mdl) break;

MmBuildMdlForNonPagedPool(mdl);//创建非分页

unsigned char* Map = (unsigned char*)MmMapLockedPages(mdl, KernelMode);//锁定此页

if (!Map)

{

IoFreeMdl(mdl);//释放mdl

break;

}

TargetAddress = (PVOID)pInputData->Address;//目标地址

TargetSize = pInputData->Size;//长度

if (PsGetCurrentProcess() != process)

{

KeStackAttachProcess(process, &apc);//附加进程成功

attach = TRUE;

}

__try {

if (MmIsAddressValid(TargetAddress))//判断目标地址是否有效

{

RtlCopyMemory(Map, TargetAddress, TargetSize);//目标地址复制到map

KeLowerIrql(KeRaiseIrqlToDpcLevel());

}

}

__except (1) {

DbgPrint("无法访问地址.\n");

}

if (attach) KeUnstackDetachProcess(&apc);

MmUnmapLockedPages((PVOID)Map, mdl);

IoFreeMdl(mdl);

}

break;



mdl 读写的评论 (共 条)

分享到微博请遵守国家法律