-
-
[求助]一个很奇葩的问题
-
发表于:
2016-5-7 22:11
3982
-
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期)