首页
社区
课程
招聘
[求助]萌新求助一个关于内核驱动的问题
发表于: 2018-4-8 22:20 2621

[求助]萌新求助一个关于内核驱动的问题

2018-4-8 22:20
2621
ZwAllocateVirtualMemory函数返回失败的值

代码实现的功能是在驱动中申请一块内存,然后再映射到应用层
以下是源码,
NTSTATUS ReadWriteProcess()
{
	NTSTATUS Status;
	HANDLE hProcess;
	HANDLE Process;
	CLIENT_ID ClientID;
	OBJECT_ATTRIBUTES ObjAttr;

	PVOID AllocateAddress;
	SIZE_T RegionSize;

	// 加载进程
	ClientID.UniqueProcess = (HANDLE)2104;
	ClientID.UniqueThread = 0;

	memset(&ObjAttr, 0, sizeof(OBJECT_ATTRIBUTES));

	Status = ZwOpenProcess(&hProcess, PROCESS_ALL_ACCESS, &ObjAttr, &ClientID);
	if (!NT_SUCCESS(Status))
	{
		KdPrint(("进程打开失败 code:%X", Status));
		return Status;
	}
	KdPrint(("进程打开成功 process:%x", hProcess));

	// 分配虚拟内存
	RegionSize = 0xff;

	Status = ZwAllocateVirtualMemory(hProcess, &AllocateAddress, 0, &RegionSize, MEM_COMMIT, PAGE_EXECUTE_READWRITE);
	if (!NT_SUCCESS(Status))
	{
		KdPrint(("分配内存失败 code:%X, process:%x ", Status, hProcess));
		return Status;
	}

	KdPrint(("进程打开成功.地址:%X, 文本:%d", AllocateAddress, RegionSize));

	ZwClose(hProcess);
	return Status;
}


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 23080
活跃值: (3432)
能力值: (RANK:648 )
在线值:
发帖
回帖
粉丝
2
将PVOID  AllocateAddress初始化为NULL试试。因为返回的错误码是:STATUS_INVALID_PARAMETER_2  。
第二个参数:BaseAddress 
A  pointer  to  a  variable  that  will  receive  the  base  address  of  the  allocated  region  of  pages.  If  the  initial  value  of  this  parameter  is  non-NULL,  the  region  is  allocated  starting  at  the  specified  virtual  address  rounded  down  to  the  next  host  page  size  address  boundary.  If  the  initial  value  of  this  parameter  is  NULL,  the  operating  system  will  determine  where  to  allocate  the  region. 
2018-4-8 23:46
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
感谢,折腾驱动真的是让我明白了,“基础不牢,地动山摇”这句话的含义。。
2018-4-9 08:50
0
雪    币: 58
活跃值: (1135)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
错误比较明显。
2018-4-9 13:35
0
游客
登录 | 注册 方可回帖
返回
//