鱼C论坛

 找回密码
 立即注册
查看: 2882|回复: 1

<Windows内核安全与驱动开发>-学习笔记4

[复制链接]
发表于 2015-12-3 11:48:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 codecook 于 2015-12-3 11:52 编辑

接着复习。
今天写了一个函数,函数的功能是获取文件句柄,可是我不知道通过函数得到的文件句柄,用完再利用ZwClose销毁句柄,这样操作不知道会不会造成内存泄漏,如下:
  1. HANDLE GetFileHandle(WCHAR *pwchar_path)
  2. {       
  3.         //DbgPrint("%S\n",pwchar_path);
  4.         USHORT lnFILEPATH_LENGTH = wcslen(pwchar_path);
  5.         //DbgPrint("%d\n",lnFILEPATH_LENGTH);
  6.         USHORT lnHEAD =4;
  7.         WCHAR *pchar =(PWCHAR)ExAllocatePool(NonPagedPool,(lnFILEPATH_LENGTH +lnHEAD)*2 );
  8.         wcscpy(pchar,L"\\??\");
  9.         wcscpy(pchar+4,pwchar_path);
  10.         HANDLE file_handle=NULL;
  11.         DbgPrint("%S\n",pchar);
  12.         NTSTATUS status;
  13.         IO_STATUS_BLOCK io_status_block;
  14.         OBJECT_ATTRIBUTES object_attributes;
  15.         UNICODE_STRING ufile_name;
  16.         ufile_name.Buffer = pchar;
  17.         //DbgPrint("%d",wcslen(pchar));
  18.         ufile_name.Length =ufile_name.MaximumLength = wcslen(pchar)*2 ;
  19.         DbgPrint("%d\n", wcslen(pchar));
  20.         //DbgPrint("%wZ\n",&ufile_name);

  21.         DbgPrint("%d,%S,%d\n",ufile_name.Length,ufile_name.Buffer,ufile_name.MaximumLength);
  22.        
  23.         InitializeObjectAttributes(&object_attributes,&ufile_name,OBJ_CASE_INSENSITIVE|OBJ_KERNEL_HANDLE,NULL,NULL);
  24.         status=ZwCreateFile(
  25.                 &file_handle,
  26.                 GENERIC_READ|GENERIC_WRITE,
  27.                 &object_attributes,
  28.                 &io_status_block,
  29.                 NULL,
  30.                 FILE_ATTRIBUTE_NORMAL,
  31.                 FILE_SHARE_READ,
  32.                 FILE_OPEN_IF,
  33.                 FILE_NON_DIRECTORY_FILE|FILE_RANDOM_ACCESS|FILE_SYNCHRONOUS_IO_NONALERT,
  34.                 NULL,
  35.                 0
  36.                 );
  37.         //ZwClose(file_handle);
  38.         ExFreePool(pchar);
  39.         return file_handle;
  40. }
  41. NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING  RegistryPath)
  42. {
  43.    HANDLE hSrcFile =GetFileHandle(L"c:\\ABAB.txt");
  44. .....
  45. ZwClose(hSrcFile);
  46. }
复制代码


同时今天我也学习了一个wcscpy函数,这个函数用来拼接两个字符串比较方便,不知道安全不?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2015-12-4 12:06:51 | 显示全部楼层
看起来的确是方便了一点。。但是,就像书上说的那样。。只要你可以保证字符串用结束的话,那就是安全的。。不过我觉得,如果有那个时间都确认这个字符串怎么结束,还不如用那个复杂点的函数。。习惯比较重要一点。。。
至于句柄安全不安全的话,一般是没问题的。。只是最好能自己检查一下。。

你时间到是很多啊。。。我还上班。。

评分

参与人数 1荣誉 +3 鱼币 +5 收起 理由
~风介~ + 3 + 5 支持楼主!

查看全部评分

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-16 22:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表