首页
社区
课程
招聘
[求助]一个很奇葩的问题
发表于: 2016-5-7 22:11 3983

[求助]一个很奇葩的问题

2016-5-7 22:11
3983
		UNICODE_STRING DriverServiceName2;
		DriverServiceName2.Buffer = DriverServiceName->Buffer;
		DriverServiceName2.Length = DriverServiceName->Length;
		DriverServiceName2.MaximumLength = DriverServiceName->MaximumLength;
		((NTLOADDRIVER)oriNtUnLoadDriver)(&DriverServiceName2);


驱动里面调用 NtUnLoadDriver 卸载驱动。。
DriverServiceName  是上一层函数传进来的参数。。。   用这个传给  NtUnLoadDriver ,调用是成功的。。。成功卸载目标驱动。。。。

但是,我如果自己定义一个变量,也就是DriverServiceName2  。。。然后buffer等于 DriverServiceName 的buff  。。。或者自己分配块内存,,把DriverServiceName 的buff拷贝进去。。。都试过了,,用自己的变量做参数  传给NtUnLoadDriver  调用就是失败的。。不成功的。。

返回值是 -1073741819   
网上查了这个返回值的含义
-1073741819,   "\"0x%08lx\" 指令引用的 \"0x%08lx\" 内存。该内存不能为 \"%s\"。"

醉了。。。我打印过俩变量的 buffer 以及长度,,,绝对完全一模一样。。。。。为啥传原本的就能成功,,传我定义的变量就失败呢。。。。
谢谢大神们啦

memcpy(&DriverServiceName2, DriverServiceName, sizeof(UNICODE_STRING));


	UNICODE_STRING DriverServiceName2;
		WCHAR wstr[200];
		DriverServiceName2.Buffer = wstr;
		wcscpy(DriverServiceName2.Buffer, DriverServiceName->Buffer);
		DriverServiceName2.Length = DriverServiceName->Length;
		DriverServiceName2.MaximumLength = DriverServiceName->MaximumLength;


这两种方式赋值的变量也是会调用函数失败

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 6553
活跃值: (4351)
能力值: ( LV10,RANK:163 )
在线值:
发帖
回帖
粉丝
2
WCHAR wstr[200];
wcscpy(wstr, DriverServiceName->Buffer);

UNICODE_STRING DriverServiceName2;
DriverServiceName2.Buffer = wstr;
DriverServiceName2.Length = n;   //to wstr len
DriverServiceName2.MaximumLength  = 200;
2016-5-7 23:27
0
雪    币: 2291
活跃值: (938)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
3
又是PreviousMode的问题
2016-5-8 09:49
0
雪    币: 544
活跃值: (264)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
4
断到nt!NtUnLoadDriver 里面,0xC0000005的错误你自己动手F10,几下就能看出来是哪儿出错了。
2016-5-8 21:05
0
雪    币: 522
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
5
放到系统线程里执行看看  
NT函数在用户线程时 有参数检查。
2016-5-17 14:10
0
雪    币: 155
活跃值: (20)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
又是基础知识都没搞懂就来写驱动乱调系统调用

如楼上所说,是Previous mode的问题,看起来你是在一个hook试图修改参数去调用,这时候因为previous mode 还是user mode,你使用stack 上的内存来保存你的数据并传过去,这时buffer地址是kernel buffer,所以是不会通过的,可以尝试“借用”原有的buffer,如果一定要用新的,则可以用ZwAllocateVirtualMemory先分配user mode内存来使用
2016-5-19 07:46
0
游客
登录 | 注册 方可回帖
返回
//