From b0b15dff0508d5acd2b6ba11a874945673ee7fa9 Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Wed, 8 Jun 2016 21:36:18 -0700 Subject: [PATCH] dll: fuse: refactor fuse_op to fuse_intf --- build/VStudio/winfsp_dll.vcxproj | 2 +- build/VStudio/winfsp_dll.vcxproj.filters | 6 +- src/dll/fuse/fuse.c | 40 +----- src/dll/fuse/{fuseop.c => fuseintf.c} | 155 +++++++++++++++++------ src/dll/fuse/library.h | 36 +----- 5 files changed, 121 insertions(+), 118 deletions(-) rename src/dll/fuse/{fuseop.c => fuseintf.c} (54%) diff --git a/build/VStudio/winfsp_dll.vcxproj b/build/VStudio/winfsp_dll.vcxproj index 67346b30..d1b9d4e8 100644 --- a/build/VStudio/winfsp_dll.vcxproj +++ b/build/VStudio/winfsp_dll.vcxproj @@ -33,7 +33,7 @@ - + diff --git a/build/VStudio/winfsp_dll.vcxproj.filters b/build/VStudio/winfsp_dll.vcxproj.filters index 8e5d8446..1d7d16a2 100644 --- a/build/VStudio/winfsp_dll.vcxproj.filters +++ b/build/VStudio/winfsp_dll.vcxproj.filters @@ -97,12 +97,12 @@ Source\fuse - - Source\fuse - Source + + Source\fuse + diff --git a/src/dll/fuse/fuse.c b/src/dll/fuse/fuse.c index c38c8e9a..575388e5 100644 --- a/src/dll/fuse/fuse.c +++ b/src/dll/fuse/fuse.c @@ -240,12 +240,6 @@ static NTSTATUS fsp_fuse_preflight(struct fuse *f) static NTSTATUS fsp_fuse_svcstart(FSP_SERVICE *Service, ULONG argc, PWSTR *argv) { - static FSP_FILE_SYSTEM_INTERFACE intf = - { - 0, - 0, - fsp_fuse_op_get_security_by_name, - }; struct fuse *f = Service->UserContext; struct fuse_context *context; struct fuse_conn_info conn; @@ -339,7 +333,7 @@ static NTSTATUS fsp_fuse_svcstart(FSP_SERVICE *Service, ULONG argc, PWSTR *argv) Result = FspFileSystemCreate( f->VolumeParams.Prefix[0] ? L"" FSP_FSCTL_NET_DEVICE_NAME : L"" FSP_FSCTL_DISK_DEVICE_NAME, - &f->VolumeParams, &intf, + &f->VolumeParams, &fsp_fuse_intf, &f->FileSystem); if (!NT_SUCCESS(Result)) { @@ -347,38 +341,8 @@ static NTSTATUS fsp_fuse_svcstart(FSP_SERVICE *Service, ULONG argc, PWSTR *argv) L"Cannot create " FSP_FUSE_LIBRARY_NAME " file system."); goto fail; } - f->FileSystem->UserContext = f; - FspFileSystemSetOperation(f->FileSystem, FspFsctlTransactCreateKind, - fsp_fuse_op_create); - FspFileSystemSetOperation(f->FileSystem, FspFsctlTransactOverwriteKind, - fsp_fuse_op_overwrite); - FspFileSystemSetOperation(f->FileSystem, FspFsctlTransactCleanupKind, - fsp_fuse_op_cleanup); - FspFileSystemSetOperation(f->FileSystem, FspFsctlTransactCloseKind, - fsp_fuse_op_close); - FspFileSystemSetOperation(f->FileSystem, FspFsctlTransactReadKind, - fsp_fuse_op_read); - FspFileSystemSetOperation(f->FileSystem, FspFsctlTransactWriteKind, - fsp_fuse_op_write); - FspFileSystemSetOperation(f->FileSystem, FspFsctlTransactQueryInformationKind, - fsp_fuse_op_query_information); - FspFileSystemSetOperation(f->FileSystem, FspFsctlTransactSetInformationKind, - fsp_fuse_op_set_information); - FspFileSystemSetOperation(f->FileSystem, FspFsctlTransactFlushBuffersKind, - fsp_fuse_op_flush_buffers); - FspFileSystemSetOperation(f->FileSystem, FspFsctlTransactQueryVolumeInformationKind, - fsp_fuse_op_query_volume_information); - FspFileSystemSetOperation(f->FileSystem, FspFsctlTransactSetVolumeInformationKind, - fsp_fuse_op_set_volume_information); - FspFileSystemSetOperation(f->FileSystem, FspFsctlTransactQueryDirectoryKind, - fsp_fuse_op_query_directory); - FspFileSystemSetOperation(f->FileSystem, FspFsctlTransactQuerySecurityKind, - fsp_fuse_op_query_security); - FspFileSystemSetOperation(f->FileSystem, FspFsctlTransactSetSecurityKind, - fsp_fuse_op_set_security); - FspFileSystemSetOperationGuard(f->FileSystem, fsp_fuse_op_enter, fsp_fuse_op_leave); - + f->FileSystem->UserContext = f; FspFileSystemSetDebugLog(f->FileSystem, f->DebugLog); if (L'\0' != f->MountPoint) diff --git a/src/dll/fuse/fuseop.c b/src/dll/fuse/fuseintf.c similarity index 54% rename from src/dll/fuse/fuseop.c rename to src/dll/fuse/fuseintf.c index 14b947d6..21f082b7 100644 --- a/src/dll/fuse/fuseop.c +++ b/src/dll/fuse/fuseintf.c @@ -1,5 +1,5 @@ /** - * @file dll/fuse/fuseop.c + * @file dll/fuse/fuseintf.c * * @copyright 2015-2016 Bill Zissimopoulos */ @@ -17,7 +17,7 @@ #include -static NTSTATUS fsp_fuse_op_set_context(FSP_FILE_SYSTEM *FileSystem, HANDLE Token) +static NTSTATUS fsp_fuse_intf_set_context(FSP_FILE_SYSTEM *FileSystem, HANDLE Token) { struct fuse_context *context; UINT32 Uid = -1, Gid = -1; @@ -114,23 +114,22 @@ exit: return Result; } -VOID fsp_fuse_op_enter(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response) +NTSTATUS fsp_fuse_intf_GetVolumeInfo(FSP_FILE_SYSTEM *FileSystem, + FSP_FSCTL_TRANSACT_REQ *Request, + FSP_FSCTL_VOLUME_INFO *VolumeInfo) { + return STATUS_INVALID_DEVICE_REQUEST; } -VOID fsp_fuse_op_leave(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response) +NTSTATUS fsp_fuse_intf_SetVolumeLabel(FSP_FILE_SYSTEM *FileSystem, + FSP_FSCTL_TRANSACT_REQ *Request, + PWSTR VolumeLabel, + FSP_FSCTL_VOLUME_INFO *VolumeInfo) { - struct fuse_context *context; - - context = fsp_fuse_get_context(0); - context->fuse = 0; - context->uid = -1; - context->gid = -1; + return STATUS_INVALID_DEVICE_REQUEST; } -NTSTATUS fsp_fuse_op_get_security_by_name(FSP_FILE_SYSTEM *FileSystem, +NTSTATUS fsp_fuse_intf_GetSecurityByName(FSP_FILE_SYSTEM *FileSystem, PWSTR FileName, PUINT32 PFileAttributes, PSECURITY_DESCRIPTOR SecurityDescriptorBuf, SIZE_T *PSecurityDescriptorSize) { @@ -195,86 +194,160 @@ exit: return Result; } -NTSTATUS fsp_fuse_op_create(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response) +NTSTATUS fsp_fuse_intf_Create(FSP_FILE_SYSTEM *FileSystem, + FSP_FSCTL_TRANSACT_REQ *Request, + PWSTR FileName, BOOLEAN CaseSensitive, UINT32 CreateOptions, + UINT32 FileAttributes, PSECURITY_DESCRIPTOR SecurityDescriptor, UINT64 AllocationSize, + PVOID *PFileNode, FSP_FSCTL_FILE_INFO *FileInfo) { return STATUS_INVALID_DEVICE_REQUEST; } -NTSTATUS fsp_fuse_op_overwrite(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response) +NTSTATUS fsp_fuse_intf_Open(FSP_FILE_SYSTEM *FileSystem, + FSP_FSCTL_TRANSACT_REQ *Request, + PWSTR FileName, BOOLEAN CaseSensitive, UINT32 CreateOptions, + PVOID *PFileNode, FSP_FSCTL_FILE_INFO *FileInfo) { return STATUS_INVALID_DEVICE_REQUEST; } -NTSTATUS fsp_fuse_op_cleanup(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response) +NTSTATUS fsp_fuse_intf_Overwrite(FSP_FILE_SYSTEM *FileSystem, + FSP_FSCTL_TRANSACT_REQ *Request, + PVOID FileNode, UINT32 FileAttributes, BOOLEAN ReplaceFileAttributes, + FSP_FSCTL_FILE_INFO *FileInfo) { return STATUS_INVALID_DEVICE_REQUEST; } -NTSTATUS fsp_fuse_op_close(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response) +VOID fsp_fuse_intf_Cleanup(FSP_FILE_SYSTEM *FileSystem, + FSP_FSCTL_TRANSACT_REQ *Request, + PVOID FileNode, PWSTR FileName, BOOLEAN Delete) +{ +} + +VOID fsp_fuse_intf_Close(FSP_FILE_SYSTEM *FileSystem, + FSP_FSCTL_TRANSACT_REQ *Request, + PVOID FileNode) +{ +} + +NTSTATUS fsp_fuse_intf_Read(FSP_FILE_SYSTEM *FileSystem, + FSP_FSCTL_TRANSACT_REQ *Request, + PVOID FileNode, PVOID Buffer, UINT64 Offset, ULONG Length, + PULONG PBytesTransferred) { return STATUS_INVALID_DEVICE_REQUEST; } -NTSTATUS fsp_fuse_op_read(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response) +NTSTATUS fsp_fuse_intf_Write(FSP_FILE_SYSTEM *FileSystem, + FSP_FSCTL_TRANSACT_REQ *Request, + PVOID FileNode, PVOID Buffer, UINT64 Offset, ULONG Length, + BOOLEAN WriteToEndOfFile, BOOLEAN ConstrainedIo, + PULONG PBytesTransferred, FSP_FSCTL_FILE_INFO *FileInfo) { return STATUS_INVALID_DEVICE_REQUEST; } -NTSTATUS fsp_fuse_op_write(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response) +NTSTATUS fsp_fuse_intf_Flush(FSP_FILE_SYSTEM *FileSystem, + FSP_FSCTL_TRANSACT_REQ *Request, + PVOID FileNode) { return STATUS_INVALID_DEVICE_REQUEST; } -NTSTATUS fsp_fuse_op_flush_buffers(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response) +NTSTATUS fsp_fuse_intf_GetFileInfo(FSP_FILE_SYSTEM *FileSystem, + FSP_FSCTL_TRANSACT_REQ *Request, + PVOID FileNode, + FSP_FSCTL_FILE_INFO *FileInfo) { return STATUS_INVALID_DEVICE_REQUEST; } -NTSTATUS fsp_fuse_op_query_information(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response) +NTSTATUS fsp_fuse_intf_SetBasicInfo(FSP_FILE_SYSTEM *FileSystem, + FSP_FSCTL_TRANSACT_REQ *Request, + PVOID FileNode, UINT32 FileAttributes, + UINT64 CreationTime, UINT64 LastAccessTime, UINT64 LastWriteTime, + FSP_FSCTL_FILE_INFO *FileInfo) { return STATUS_INVALID_DEVICE_REQUEST; } -NTSTATUS fsp_fuse_op_set_information(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response) +NTSTATUS fsp_fuse_intf_SetAllocationSize(FSP_FILE_SYSTEM *FileSystem, + FSP_FSCTL_TRANSACT_REQ *Request, + PVOID FileNode, UINT64 AllocationSize, + FSP_FSCTL_FILE_INFO *FileInfo) { return STATUS_INVALID_DEVICE_REQUEST; } -NTSTATUS fsp_fuse_op_query_volume_information(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response) +NTSTATUS fsp_fuse_intf_SetFileSize(FSP_FILE_SYSTEM *FileSystem, + FSP_FSCTL_TRANSACT_REQ *Request, + PVOID FileNode, UINT64 FileSize, + FSP_FSCTL_FILE_INFO *FileInfo) { return STATUS_INVALID_DEVICE_REQUEST; } -NTSTATUS fsp_fuse_op_set_volume_information(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response) +NTSTATUS fsp_fuse_intf_CanDelete(FSP_FILE_SYSTEM *FileSystem, + FSP_FSCTL_TRANSACT_REQ *Request, + PVOID FileNode, PWSTR FileName) { return STATUS_INVALID_DEVICE_REQUEST; } -NTSTATUS fsp_fuse_op_query_directory(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response) +NTSTATUS fsp_fuse_intf_Rename(FSP_FILE_SYSTEM *FileSystem, + FSP_FSCTL_TRANSACT_REQ *Request, + PVOID FileNode, + PWSTR FileName, PWSTR NewFileName, BOOLEAN ReplaceIfExists) { return STATUS_INVALID_DEVICE_REQUEST; } -NTSTATUS fsp_fuse_op_query_security(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response) +NTSTATUS fsp_fuse_intf_GetSecurity(FSP_FILE_SYSTEM *FileSystem, + FSP_FSCTL_TRANSACT_REQ *Request, + PVOID FileNode, + PSECURITY_DESCRIPTOR SecurityDescriptor, SIZE_T *PSecurityDescriptorSize) { return STATUS_INVALID_DEVICE_REQUEST; } -NTSTATUS fsp_fuse_op_set_security(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response) +NTSTATUS fsp_fuse_intf_SetSecurity(FSP_FILE_SYSTEM *FileSystem, + FSP_FSCTL_TRANSACT_REQ *Request, + PVOID FileNode, + SECURITY_INFORMATION SecurityInformation, PSECURITY_DESCRIPTOR SecurityDescriptor) { return STATUS_INVALID_DEVICE_REQUEST; } + +NTSTATUS fsp_fuse_intf_ReadDirectory(FSP_FILE_SYSTEM *FileSystem, + FSP_FSCTL_TRANSACT_REQ *Request, + PVOID FileNode, PVOID Buffer, UINT64 Offset, ULONG Length, + PWSTR Pattern, + PULONG PBytesTransferred) +{ + return STATUS_INVALID_DEVICE_REQUEST; +} + +FSP_FILE_SYSTEM_INTERFACE fsp_fuse_intf = +{ + fsp_fuse_intf_GetVolumeInfo, + fsp_fuse_intf_SetVolumeLabel, + fsp_fuse_intf_GetSecurityByName, + fsp_fuse_intf_Create, + fsp_fuse_intf_Open, + fsp_fuse_intf_Overwrite, + fsp_fuse_intf_Cleanup, + fsp_fuse_intf_Close, + fsp_fuse_intf_Read, + fsp_fuse_intf_Write, + fsp_fuse_intf_Flush, + fsp_fuse_intf_GetFileInfo, + fsp_fuse_intf_SetBasicInfo, + fsp_fuse_intf_SetAllocationSize, + fsp_fuse_intf_SetFileSize, + fsp_fuse_intf_CanDelete, + fsp_fuse_intf_Rename, + fsp_fuse_intf_GetSecurity, + fsp_fuse_intf_SetSecurity, + fsp_fuse_intf_ReadDirectory, +}; diff --git a/src/dll/fuse/library.h b/src/dll/fuse/library.h index c753fb1e..bf04ad0c 100644 --- a/src/dll/fuse/library.h +++ b/src/dll/fuse/library.h @@ -37,40 +37,6 @@ struct fuse BOOLEAN fsinit; }; -VOID fsp_fuse_op_enter(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response); -VOID fsp_fuse_op_leave(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response); -NTSTATUS fsp_fuse_op_get_security_by_name(FSP_FILE_SYSTEM *FileSystem, - PWSTR FileName, PUINT32 PFileAttributes, - PSECURITY_DESCRIPTOR SecurityDescriptor, SIZE_T *PSecurityDescriptorSize); -NTSTATUS fsp_fuse_op_create(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response); -NTSTATUS fsp_fuse_op_overwrite(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response); -NTSTATUS fsp_fuse_op_cleanup(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response); -NTSTATUS fsp_fuse_op_close(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response); -NTSTATUS fsp_fuse_op_read(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response); -NTSTATUS fsp_fuse_op_write(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response); -NTSTATUS fsp_fuse_op_flush_buffers(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response); -NTSTATUS fsp_fuse_op_query_information(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response); -NTSTATUS fsp_fuse_op_set_information(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response); -NTSTATUS fsp_fuse_op_query_volume_information(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response); -NTSTATUS fsp_fuse_op_set_volume_information(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response); -NTSTATUS fsp_fuse_op_query_directory(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response); -NTSTATUS fsp_fuse_op_query_security(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response); -NTSTATUS fsp_fuse_op_set_security(FSP_FILE_SYSTEM *FileSystem, - FSP_FSCTL_TRANSACT_REQ *Request, FSP_FSCTL_TRANSACT_RSP *Response); +extern FSP_FILE_SYSTEM_INTERFACE fsp_fuse_intf; #endif