首页
社区
课程
招聘
[求助]关于ZwSetInformationFile一点小疑问
发表于: 2018-2-3 13:20 3729

[求助]关于ZwSetInformationFile一点小疑问

2018-2-3 13:20
3729
最近在学习内核开发  
学到了对文件的操作这一块了 
在看张帆老师的《windows驱动开发技术详解》的时候  发现课程中对  ZwSetInformationFile的使用讲解并不是很详细
我想知道 如果我用 ZwSetInformationFile这个函数 来设置一个文件的属性为只读,或者隐藏,该怎么操作,有代码参考吗?
万分感谢,百度搜了半天,实在是没找到相关资料·


感谢一楼提供的源码 给了我灵感 虽然WRK用的那个查询函数我没找到在哪声明的,但我用类似的函数实现了,贴出代码
FILE_BASIC_INFORMATION FileInfo;
RtlZeroMemory(&FileInfo, sizeof(FileInfo));
//查询文件属性
ntStatus = ZwQueryInformationFile(hfile, &iostatus, &FileInfo,sizeof(FILE_BASIC_INFORMATION), FileBasicInformation);
if (!NT_SUCCESS(ntStatus))
{
DbgPrint("query file info failed.\n");
}
FileInfo.FileAttributes = FILE_ATTRIBUTE_HIDDEN;
    //设置新的文件属性 
ntStatus = ZwSetInformationFile(hfile, &iostatus, &FileInfo, sizeof(FILE_BASIC_INFORMATION), FileBasicInformation);
if (!NT_SUCCESS(ntStatus))
{
DbgPrint("set file info failed.\n");
}
ZwClose(hfile);

[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 23080
活跃值: (3432)
能力值: (RANK:648 )
在线值:
发帖
回帖
粉丝
2

wrk中的一段使用代码

NTSTATUS
CmpOpenFileWithExtremePrejudice(
    OUT PHANDLE Primary,
    IN POBJECT_ATTRIBUTES Obja,
    IN ULONG IoFlags,
    IN ULONG AttributeFlags
    )

/*++

Routine Description:

    This routine opens a hive file that some person has put a
    read-only attribute on. It is used to prevent people from hurting
    themselves by making the critical system hive files read-only.

Arguments:

    Primary - Returns handle to file

    Obja - Supplies Object Attributes of file.

    IoFlags - Supplies flags to pass to ZwCreateFile

Return Value:

    NTSTATUS

--*/

{
    NTSTATUS Status;
    HANDLE Handle;
    IO_STATUS_BLOCK IoStatusBlock;
    FILE_BASIC_INFORMATION FileInfo;

    RtlZeroMemory(&FileInfo, sizeof(FileInfo));
    //
    // Get the current file attributes
    //
    ASSERT_PASSIVE_LEVEL();
    Status = ZwQueryAttributesFile(Obja, &FileInfo);
    if (!NT_SUCCESS(Status)) {
        CmKdPrintEx((DPFLTR_CONFIG_ID,DPFLTR_ERROR_LEVEL,"ZwQueryAttributesFile failed with IO status  %lx\n",Status));
        return(Status);
    }

    //
    // Clear the readonly bit.
    //
    FileInfo.FileAttributes &= ~FILE_ATTRIBUTE_READONLY;

    //
    // Open the file
    //
    Status = ZwOpenFile(&Handle,
                        FILE_WRITE_ATTRIBUTES,
                        Obja,
                        &IoStatusBlock,
                        FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE,
                        FILE_OPEN_FOR_BACKUP_INTENT);
    if (!NT_SUCCESS(Status)) {
        return(Status);
    }

    //
    // Set the new attributes
    //
    Status = ZwSetInformationFile(Handle,
                                  &IoStatusBlock,
                                  &FileInfo,
                                  sizeof(FileInfo),
                                  FileBasicInformation);
    ZwClose(Handle);
    if (NT_SUCCESS(Status)) {
        //
        // Reopen the file with the access that we really need.
        //
        Status = ZwCreateFile(Primary,
                              FILE_READ_DATA | FILE_WRITE_DATA,
                              Obja,
                              &IoStatusBlock,
                              NULL,
                              AttributeFlags,
                              0,
                              FILE_OPEN,
                              IoFlags,
                              NULL,
                              0);
    }
#if DBG
    else {
        CmKdPrintEx((DPFLTR_CONFIG_ID,DPFLTR_ERROR_LEVEL,"ZwSetInformationFile failed with IO status  %lx\n",Status));
    }
    CmKdPrintEx((DPFLTR_CONFIG_ID,DPFLTR_ERROR_LEVEL,"CmpOpenFileWithExtremePrejudice returns with IO status  %lx\n",Status));
#endif

    return(Status);
}

文件属性宏:
FILE_ATTRIBUTE_READONLY 0x00000001
FILE_ATTRIBUTE_HIDDEN 0x00000002
FILE_ATTRIBUTE_SYSTEM 0x00000004

 

希望对你有帮助

2018-2-3 20:17
0
雪    币: 12
活跃值: (142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
KevinsBobo wrk中的一段使用代码 ``` NTSTATUS CmpOpenFileWithExtremePrejudice( OUT PHANDLE Primary, IN POBJE ...
谢谢楼上
2018-2-3 23:46
0
雪    币: 12
活跃值: (142)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
ZwQueryAttributesFile    这个函数好像没公开  我只找到  ZwQueryFullAttributesFile
2018-2-4 00:40
0
雪    币: 23080
活跃值: (3432)
能力值: (RANK:648 )
在线值:
发帖
回帖
粉丝
5
可以用这个ZwQueryInformationFile替代。可以自己下载WRK源码然后用Sourec Insight来搜索源码中你想要的API,再结合WDK的帮助手册,能够找到很多有用的信息
2018-2-5 14:08
0
游客
登录 | 注册 方可回帖
返回
//