|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
本帖最后由 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_STRING RegistryPath)
- {
- HANDLE hSrcFile =GetFileHandle(L"c:\\ABAB.txt");
- .....
- ZwClose(hSrcFile);
- }
复制代码
同时今天我也学习了一个wcscpy函数,这个函数用来拼接两个字符串比较方便,不知道安全不? |
|