如何通过具有DELETE访问权限的ID打开文件?

问题描述 投票:1回答:2

使用NT本机功能NtCreateFile,可以使用FILE_OPEN_BY_FILE_ID创建选项通过ID打开文件。但是,这样做会忽略DELETE访问标志。如果我设置了该文件,它将正常打开,但是任何删除或重命名文件的尝试都将失败(例如,通过设置FILE_DELETE_ON_CLOSE或将FILE_RENAME_INFORMATION类与NtSetInformationFile结合使用)。

是否无法删除以这种方式打开的文件?还有其他删除ID而不是名称的文件的方法吗?

filesystems nt-native-api
2个回答
1
投票

我正在寻找ntfs-4源代码并在code中查看下一个NtfsSetRenameInfo的说法>>

//
//  Do a quick check that the caller is allowed to do the rename.
//  The opener must have opened the main data stream by name and this can't be
//  a system file.
//

if (!FlagOn( Ccb->Flags, CCB_FLAG_OPEN_AS_FILE ) ||
    (Lcb == NULL) ||
    (NtfsSegmentNumber( &Fcb->FileReference ) < FIRST_USER_FILE_NUMBER)) {

    DebugTrace( -1, Dbg, ("NtfsSetRenameInfo:  Exit -> %08lx\n", STATUS_INVALID_PARAMETER) );
    return STATUS_INVALID_PARAMETER;
}

FileDispositionInformationFILE_DELETE_ON_CLOSE选项(1)的相同情况

    if (FlagOn( Ccb->Flags, CCB_FLAG_DELETE_ON_CLOSE )) {

        if (FlagOn( Ccb->Flags, CCB_FLAG_OPEN_AS_FILE )) {

因此,如果未在文件上设置CCB_FLAG_OPEN_AS_FILE,则ntfs出于某种原因将不允许重命名或删除文件。 (按ID打开文件时未设置)


0
投票

除了RbMm的答案,我还找到了Alex Carp的博客文章Some Limitations Using Files Opened By ID,它解释了这样做的理由。

© www.soinside.com 2019 - 2024. All rights reserved.