使用NT本机功能NtCreateFile
,可以使用FILE_OPEN_BY_FILE_ID
create选项通过id打开文件。但是,这样做DELETE
似乎会忽略访问标志。如果设置了该文件,它将正常打开,但是任何删除或重命名文件的尝试都会失败(例如,通过设置FILE_DELETE_ON_CLOSE
或将FILE_RENAME_INFORMATION
类与一起使用NtSetInformationFile
)。
是否无法删除以这种方式打开的文件?还有其他删除ID而不是名称的文件的方法吗?
我找NTFS-4的源代码,并查看接下来所说的代码中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;
}
相同的情况FileDispositionInformation
和FILE_DELETE_ON_CLOSE
选择(1)
if (FlagOn( Ccb->Flags, CCB_FLAG_DELETE_ON_CLOSE )) {
if (FlagOn( Ccb->Flags, CCB_FLAG_OPEN_AS_FILE )) {
因此,ntfs由于某种原因不允许重命名或删除文件(如果CCB_FLAG_OPEN_AS_FILE
未在文件上设置)。(按ID打开文件时未设置)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句