首页
社区
课程
招聘
[求助]这个函数需要RtlFreeUnicodeString吗,我要一次次打开写入字符到文件中。
发表于: 2016-4-18 13:35 4749

[求助]这个函数需要RtlFreeUnicodeString吗,我要一次次打开写入字符到文件中。

2016-4-18 13:35
4749
#include "ntddk.h"

NTSTATUS MyOpenFile()
{
        HANDLE                hFile;
        NTSTATUS        Status;
        UNICODE_STRING                usFileName;
        OBJECT_ATTRIBUTES        FileObjAttr;
        IO_STATUS_BLOCK                IoStatusBlock;

        LARGE_INTEGER                ReadOffset;

        FILE_BASIC_INFORMATION fbi;
       
        char                strBuffer[100] = {0};

        RtlInitUnicodeString(&usFileName,L"\\??\\c:\\1.txt");

        memset(&FileObjAttr,0,sizeof(OBJECT_ATTRIBUTES));

        InitializeObjectAttributes(&FileObjAttr,&usFileName,OBJ_CASE_INSENSITIVE,NULL,NULL);

        Status = ZwOpenFile(&hFile,
                GENERIC_ALL,
                &FileObjAttr,
                &IoStatusBlock,
                FILE_SHARE_READ,
                FILE_NON_DIRECTORY_FILE);
        if (!NT_SUCCESS(Status))
        {
                KdPrint(("open file failed.Status:0x%X",Status));
                return Status;
        }
       
        KdPrint(("open file success."));

        RtlCopyMemory(strBuffer,"123124sdferfdsfsdsfasf",strlen("123124sdferfdsfsdsfasf"));
       
        ReadOffset.QuadPart = 10;

        Status = ZwWriteFile(hFile,NULL,NULL,NULL,&IoStatusBlock,strBuffer,strlen("123124sdferfdsfsdsfasf"),&ReadOffset,NULL);
        if (!NT_SUCCESS(Status))
        {
                KdPrint(("Error code:%X",Status));
                RtlFreeUnicodeString(&strBuffer);
                RtlFreeUnicodeString(&usFileName);
                ZwClose(hFile);
                return Status;
        }
        //RtlFreeUnicodeString(&strBuffer);
        //RtlFreeUnicodeString(&usFileName);
        ZwClose(hFile);
        return Status;
}

这个函数需要RtlFreeUnicodeString吗,我要一次次打开写入字符到文件中。怎么弄,对吗

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (3)
雪    币: 2291
活跃值: (938)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
2
不需要,你这字符串存储位置分别在栈上和常量区,不是动态分配的。
2016-4-18 13:52
0
雪    币: 26
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
那为什么我一次一次写入操作会蓝屏,蓝屏代码0000000A
2016-4-18 14:17
0
雪    币: 26
活跃值: (25)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
4
(1)0×0000000A:IRQL_NOT_LESS_OR_EQUAL主要是由有问题的驱动程序,有缺陷或不兼容的硬件与软件造成的.表明在内核模式中存在以太高的进程内部请求级别(IRQL)访问其没有权限访问的内存地址.
2016-4-18 14:26
0
游客
登录 | 注册 方可回帖
返回
//