打开进程_申请内存_读写内存

#include"ntddk.h"
NTSTATUS
ZwAllocateVirtualMemory(
IN HANDLE  ProcessHandle,//在这里进程里分配内存的  进程句柄
IN OUT PVOID  *BaseAddress,//分好内存的地址
IN ULONG  ZeroBits,//一般写0 
IN OUT PSIZE_T  RegionSize,//要分配内存的大小 //注意这里用小写
IN ULONG  AllocationType,//分配的内存是否可用
IN ULONG  Protect//分配的内存属性
);
VOID xiezai1(PDRIVER_OBJECT qudongduixiang1)
{
	KdPrint(("驱动卸载历程 已经执行\n"));
}
NTSTATUS DriverEntry(PDRIVER_OBJECT qudongduixiang1, PUNICODE_STRING zhucebiao1)
{
	HANDLE jubing1;//存放进程句柄
	OBJECT_ATTRIBUTES shuxing_duixiang;
	CLIENT_ID iphao;
	NTSTATUS zhuangtai1;
	PVOID dizhi1;//分配好的内存地址
	SIZE_T diqudaxiao ;//分配好的内存尺寸
	iphao.UniqueProcess = (HANDLE)3276;
	iphao.UniqueThread = 0;
	diqudaxiao = 0x88;
	dizhi1 = 0;//注意要赋值
	memset(&shuxing_duixiang, 0, sizeof(OBJECT_ATTRIBUTES));
	zhuangtai1 = ZwOpenProcess(&jubing1, GENERIC_ALL, &shuxing_duixiang, &iphao);//PROCESS_ALL_ACCESS
	if (!NT_SUCCESS(zhuangtai1))
	{
		KdPrint(("进程打开失败\n"));
	}
	else
	{
		KdPrint(("打开进程成功 pid==%d 进程句柄%x\n", iphao.UniqueProcess, jubing1));
	}
	zhuangtai1 = ZwAllocateVirtualMemory(jubing1, &dizhi1, 0, &diqudaxiao, MEM_COMMIT, PAGE_EXECUTE_READWRITE);//在进程中分配一块可用内存
	if (!NT_SUCCESS(zhuangtai1))
	{
		KdPrint(("内存分配失败\n"));
	}
	else
	{
		KdPrint(("分配好的内存地址%X	分配内存的大小%d\n", dizhi1, diqudaxiao));
	}
	ZwClose(jubing1);
	qudongduixiang1->DriverUnload = xiezai1;
	return STATUS_SUCCESS;
}

//mfc------------------------------------
读写_驱动申请的一个进程的内存
void CMFCApplication1Dlg::OnBnClickedButton2()//读内存
{
	// TODO: 在此添加控件通知处理程序代码
	ULONG dizhi1 = 0;//驱动开辟一个进程的内存的地址
	dizhi1 = GetDlgItemInt(IDC_EDIT1);
	SetDlgItemText(IDC_EDIT2, (LPCTSTR)dizhi1);
}
void CMFCApplication1Dlg::OnBnClickedButton1()//写内存
{
	// TODO: 在此添加控件通知处理程序代码

	ULONG dizhi1;//驱动开辟一个进程的内存的地址
	WCHAR zifuchuan[0xf0] = L"dfgdfgdfgdfgdfg";
	dizhi1 = GetDlgItemInt(IDC_EDIT1);
	memcpy((PVOID)dizhi1, zifuchuan, 0xf0);
}

你可能感兴趣的:(内核驱动全部集合)