codecook 发表于 2015-12-1 16:07:33

《Windows内核安全与驱动开发》-学习笔记3

内核学习真的很枯燥,今天本来打算继续向下学习,可是出门就碰到了钉子。
内核的字符串拼接感觉很麻烦,可能也是我函数用的不熟的原因的吧,不知道各位有没有碰到。
例如我想写一个函数 传一个"c:\\" 返回一个"\\??\\c:\\",我的代码如下,感觉太麻烦了,不知道各位怎么处理:
**** Hidden Message *****

fishkiss 发表于 2015-12-1 16:53:25

look一look

fishkiss 发表于 2015-12-1 16:59:29

本帖最后由 fishkiss 于 2015-12-1 17:02 编辑

      RtlCopyUnicodeString(&Fullpath,&pathHread);
      DbgPrint("%wZ", &Fullpath);


这个能打印出来吗?(上面)

      RtlAppendUnicodeToString(&Fullpath,pwchar_path);
      DbgPrint("%wZ", &Fullpath);

这个呢?(上面)

      ExFreePool(Fullpath.Buffer);
      DbgPrint("%wZ", &Fullpath);

这个不能这么玩的吧。。。(上面)


一眼看上去,你这个分配+6 够吗?\\??\\

codecook 发表于 2015-12-2 08:19:33

fishkiss 发表于 2015-12-1 16:59
RtlCopyUnicodeString(&Fullpath,&pathHread);
      DbgPrint("%wZ", &Fullpath);



可以啊,+6是因为“\\??\\”的长度等于6.后面还乘了sizeof(wchar)

fishkiss 发表于 2015-12-2 09:09:21

本帖最后由 fishkiss 于 2015-12-2 09:12 编辑

codecook 发表于 2015-12-2 08:19
可以啊,+6是因为“\\??\\”的长度等于6.后面还乘了sizeof(wchar)

如果够了,那么前面两个就可以打印出来了吧?

最后一个打印应该不能这么玩吧,那块内存都释放了,不能再拿那个野指针打印了吧?

codecook 发表于 2015-12-3 11:35:27

fishkiss 发表于 2015-12-2 09:09
如果够了,那么前面两个就可以打印出来了吧?

最后一个打印应该不能这么玩吧,那块内存都释放了,不 ...

哦,那是打印不出,但不会蓝屏!

ligen超越 发表于 2016-3-29 13:14:38

看看是什么鬼

Kiddddddddddddd 发表于 2016-3-30 21:51:30

帮忙看看

john_david_ 发表于 2016-5-1 12:31:53

谢谢分享

ko12 发表于 2016-5-9 15:20:58

看看,学习下

宫志强 发表于 2016-5-23 18:09:52

我看看

feng602458678 发表于 2016-6-2 06:59:47

楼主好样的,加油呀

百事可口 发表于 2016-6-11 12:54:19

我帐号怎么不是VIP了。

菜鸟想飞 发表于 2016-6-26 08:58:42

支持lz

zxjlaomao 发表于 2016-6-27 17:05:00

1

zzzmmmbob 发表于 2016-7-12 16:32:45

感谢分享

晓风明月 发表于 2016-7-25 15:43:51

丹丹

呆鸭 发表于 2016-7-25 17:04:01

好奇,看看!

菜鸟dc 发表于 2016-8-16 14:38:10

本帖最后由 菜鸟dc 于 2016-8-16 14:41 编辑

我记得有函数的,把NT路径改成DOS路径,RtlNtPathNameToDosPathName 应该是这个,在ntdll里面

水晶年华 发表于 2016-8-22 09:50:21

支持一下了
页: [1] 2
查看完整版本: 《Windows内核安全与驱动开发》-学习笔记3