81.3.2.4. FILE SYSTEM DRIVERS (FSD)
THIS SECTION IS UNDER CONSTRUCTION
Концептуальный API для FSD
UNIX вариант
vfsops для томы
mount
start
unmount
root
quotactl
getattr
sync
vfsop_get
fhtovp
vptofh
init
sysctl
setattr
...
vnops для vnodes
getattr получение аттрибутов
setattr
inactive - vnode становиться неактивной (например удалили) но еще живет
revoke
reclaim - полностью удаляется vnode
pathconf - информация о поддержке возможностей
максимальная длинна symbolic link
максимальная длинна имени файла
максимальная длинна пути
case-sensitivity
case-preserving
extended attributes support
lookup
close
open
readdir
fsync
blockmap - берет адресс кластера на диске
blktooff
offtoblk
strategy
read
write
create
whiteout
mknod
symlink
readlink
readdirattr
remove
link
rename
mkdir
rmdir
allocate
getxattr
setxattr
removexattr
listxattr
getattrlist
mmap
mnomap
pagein
pageout
exchange
kqfilt_add
kqfilt_remove
Linux
super_operations
alloc_inode
destroy_inode
read_inode
dirty_inode
write_inode
put_inode
drop_inode
delete_inode
put_super
write_super
sync_fs
write_super_lockfs
unlockfs
statfs
remount_fs
clear_inode
umount_begin
show_options
Windows вариант
IRP_MJ_CREATE
IRP_MJ_CLOSE
IRP_MJ_READ
IRP_MJ_WRITE
IRP_MJ_QUERY_INFORMATION
FileBasicInformation
FileStandardInformation
FileInternalInformation
FileEaInformation
FileNameInformation
FileCompressionInformation
FilePositionInformation
FileAllInformation
FileStreamInformation
(FileAccessInformation)
(FileModeInformation)
(FileAlignmentInformation)
IRP_MJ_SET_INFORMATION
FileDispositionInformation
FileAllocationInformation
FileEndOfFileInformation
FileRenameInformation
IRP_MJ_FLUSH_BUFFERS
IRP_MJ_QUERY_VOLUME_INFORMATION
FileFsVolumeInformation
FileFsSizeInformation
FileFsDeviceInformation
FILE_REMOVABLE_MEDIA
FILE_READ_ONLY_DEVICE
FILE_FLOPPY_DISKETTE
FILE_WRITE_ONCE_MEDIA
FILE_REMOTE_DEVICE
FILE_DEVICE_IS_MOUNTED
FILE_VIRTUAL_VOLUME
FileFsAttributeInformation
FILE_CASE_SENSITIVE_SEARCH
FILE_CASE_PRESERVED_NAMES
FILE_UNICODE_ON_DISK
FILE_PERSISTENT_ACKS
FILE_FILE_COMPRESSION
FILE_VOLUME_IS_COMPRESSED
IRP_MJ_SET_VOLUME_INFORMATION
FileFsLabelInformation
IRP_MJ_DIRECTORY_CONTROL
IRP_MN_QUERY_DIRECTORY
FileDirectoryInformation
FileFullDirectoryInformation
FileBothDirectoryInformation
FileNamesInformation
IRP_MN_NOTIFY_CHANGE_DIRECTORY
IRP_MJ_FILE_SYSTEM_CONTROL
IRP_MN_USER_FS_REQUEST
FSCTL_LOCK_VOLUME
FSCTL_UNLOCK_VOLUME
FSCTL_DISMOUNT_VOLUME
FSCTL_MARK_VOLUME_DIRTY
FSCTL_IS_VOLUME_MOUNTED
FSCTL_IS_PATHNAME_VALID
FSCTL_QUERY_RETRIEVAL_POINTERS
IRP_MN_MOUNT_VOLUME
IRP_MN_LOAD_FILE_SYSTEM
IRP_MJ_DEVICE_CONTROL
IRP_MJ_SHUTDOWN
IRP_MJ_LOCK_CONTROL
IRP_MN_LOCK
IRP_MN_UNLOCK_SINGLE
IRP_MN_UNLOCK_ALL
IRP_MN_UNLOCK_ALL_BY_KEY
IRP_MJ_CLEANUP
IRP_MJ_QUERY_SECURITY
IRP_MJ_SET_SECURITY
IRP_MJ_QUERY_EA
IRP_MJ_SET_EA
FastIO
FastIoCheckIfPossible
FastIoRead
FastIoWrite
FastIoQueryBasicInfo
FastIoQueryStandardInfo
FastIoLock
FastIoUnlockSingle
FastIoUnlockAll
FastIoUnlockAllByKey
AcquireFileForNtCreateSection
ReleaseFileForNtCreateSection
FastIoQueryNetworkOpenInfo
AcquireForModWrite
ReleaseForModWrite
AcquireForCcFlush
ReleaseForCcFlush
MdlRead
MdlReadComplete
PrepareMdlWrite
MdlWriteComplete
Тонкие моменты:
Remount - устройство неожиданно вытащили и потом снова вставили
соответвенно есть открытые объекты, несброшенные записи.
Обработка ошибок: например возникли проблемы (например устройство исчезло)
Надо провзаимодействовать с OS, чтобы выдать пользователю диалог типа
Retry, Abort, Ignore и продолжить обработку после получения решения.
Index Prev Next