<Windows内核安全与驱动开发>-学习笔记4
本帖最后由 codecook 于 2015-12-3 11:52 编辑接着复习。
今天写了一个函数,函数的功能是获取文件句柄,可是我不知道通过函数得到的文件句柄,用完再利用ZwClose销毁句柄,这样操作不知道会不会造成内存泄漏,如下:
HANDLE GetFileHandle(WCHAR *pwchar_path)
{
//DbgPrint("%S\n",pwchar_path);
USHORT lnFILEPATH_LENGTH = wcslen(pwchar_path);
//DbgPrint("%d\n",lnFILEPATH_LENGTH);
USHORT lnHEAD =4;
WCHAR *pchar =(PWCHAR)ExAllocatePool(NonPagedPool,(lnFILEPATH_LENGTH +lnHEAD)*2 );
wcscpy(pchar,L"\\??\\");
wcscpy(pchar+4,pwchar_path);
HANDLE file_handle=NULL;
DbgPrint("%S\n",pchar);
NTSTATUS status;
IO_STATUS_BLOCK io_status_block;
OBJECT_ATTRIBUTES object_attributes;
UNICODE_STRING ufile_name;
ufile_name.Buffer = pchar;
//DbgPrint("%d",wcslen(pchar));
ufile_name.Length =ufile_name.MaximumLength = wcslen(pchar)*2 ;
DbgPrint("%d\n", wcslen(pchar));
//DbgPrint("%wZ\n",&ufile_name);
DbgPrint("%d,%S,%d\n",ufile_name.Length,ufile_name.Buffer,ufile_name.MaximumLength);
InitializeObjectAttributes(&object_attributes,&ufile_name,OBJ_CASE_INSENSITIVE|OBJ_KERNEL_HANDLE,NULL,NULL);
status=ZwCreateFile(
&file_handle,
GENERIC_READ|GENERIC_WRITE,
&object_attributes,
&io_status_block,
NULL,
FILE_ATTRIBUTE_NORMAL,
FILE_SHARE_READ,
FILE_OPEN_IF,
FILE_NON_DIRECTORY_FILE|FILE_RANDOM_ACCESS|FILE_SYNCHRONOUS_IO_NONALERT,
NULL,
0
);
//ZwClose(file_handle);
ExFreePool(pchar);
return file_handle;
}
NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRINGRegistryPath)
{
HANDLE hSrcFile =GetFileHandle(L"c:\\ABAB.txt");
.....
ZwClose(hSrcFile);
}
同时今天我也学习了一个wcscpy函数,这个函数用来拼接两个字符串比较方便,不知道安全不? 看起来的确是方便了一点。。但是,就像书上说的那样。。只要你可以保证字符串用结束的话,那就是安全的。。不过我觉得,如果有那个时间都确认这个字符串怎么结束,还不如用那个复杂点的函数。。习惯比较重要一点。。。
至于句柄安全不安全的话,一般是没问题的。。只是最好能自己检查一下。。
你时间到是很多啊。。。我还上班。。
页:
[1]