codecook 发表于 2015-12-3 11:48:22

<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函数,这个函数用来拼接两个字符串比较方便,不知道安全不?

fishkiss 发表于 2015-12-4 12:06:51

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

你时间到是很多啊。。。我还上班。。
页: [1]
查看完整版本: <Windows内核安全与驱动开发>-学习笔记4