mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-23 00:43:00 -05:00
dll: WIP
This commit is contained in:
parent
5e09c1e045
commit
b3f9e7e32d
@ -33,6 +33,8 @@ typedef struct _FSP_FILE_SYSTEM_INTERFACE
|
|||||||
FSP_FSCTL_TRANSACT_REQ *, DWORD, PDWORD);
|
FSP_FSCTL_TRANSACT_REQ *, DWORD, PDWORD);
|
||||||
NTSTATUS (*QuerySecurity)(FSP_FILE_SYSTEM *,
|
NTSTATUS (*QuerySecurity)(FSP_FILE_SYSTEM *,
|
||||||
PWSTR, SECURITY_INFORMATION, PSECURITY_DESCRIPTOR, SIZE_T *);
|
PWSTR, SECURITY_INFORMATION, PSECURITY_DESCRIPTOR, SIZE_T *);
|
||||||
|
NTSTATUS (*FileCreate)(FSP_FILE_SYSTEM *,
|
||||||
|
FSP_FSCTL_TRANSACT_REQ *, PVOID *File);
|
||||||
} FSP_FILE_SYSTEM_INTERFACE;
|
} FSP_FILE_SYSTEM_INTERFACE;
|
||||||
typedef struct _FSP_FILE_SYSTEM
|
typedef struct _FSP_FILE_SYSTEM
|
||||||
{
|
{
|
||||||
@ -113,6 +115,12 @@ FSP_API NTSTATUS FspFileSystemSendResponse(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
FSP_API NTSTATUS FspFileSystemSendResponseWithStatus(FSP_FILE_SYSTEM *FileSystem,
|
FSP_API NTSTATUS FspFileSystemSendResponseWithStatus(FSP_FILE_SYSTEM *FileSystem,
|
||||||
FSP_FSCTL_TRANSACT_REQ *Request, NTSTATUS Result);
|
FSP_FSCTL_TRANSACT_REQ *Request, NTSTATUS Result);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* File System Operations
|
||||||
|
*/
|
||||||
|
FSP_API NTSTATUS FspFileSystemOpCreate(FSP_FILE_SYSTEM *FileSystem,
|
||||||
|
FSP_FSCTL_TRANSACT_REQ *Request);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Access Checks
|
* Access Checks
|
||||||
*/
|
*/
|
||||||
|
@ -6,22 +6,27 @@
|
|||||||
|
|
||||||
#include <dll/library.h>
|
#include <dll/library.h>
|
||||||
|
|
||||||
#if 0
|
|
||||||
static NTSTATUS FspFileSystemOpCreate_FileCreate(FSP_FILE_SYSTEM *FileSystem,
|
static NTSTATUS FspFileSystemOpCreate_FileCreate(FSP_FILE_SYSTEM *FileSystem,
|
||||||
FSP_FSCTL_TRANSACT_REQ *Request)
|
FSP_FSCTL_TRANSACT_REQ *Request)
|
||||||
{
|
{
|
||||||
|
if (0 == FileSystem->Interface->FileCreate)
|
||||||
|
return FspFileSystemSendResponseWithStatus(FileSystem, Request, STATUS_NOT_IMPLEMENTED);
|
||||||
|
|
||||||
NTSTATUS Result;
|
NTSTATUS Result;
|
||||||
DWORD GrantedAccess;
|
DWORD GrantedAccess;
|
||||||
PVOID File;
|
PVOID File;
|
||||||
FSP_FSCTL_TRANSACT_RSP Response;
|
FSP_FSCTL_TRANSACT_RSP Response;
|
||||||
|
|
||||||
Result = FspAccessCheck(FileSystem, Request, TRUE, &GrantedAccess);
|
Result = FspAccessCheck(FileSystem, Request, TRUE,
|
||||||
|
(Request->Req.Create.CreateOptions & FILE_DIRECTORY_FILE) ?
|
||||||
|
FILE_ADD_SUBDIRECTORY : FILE_ADD_FILE,
|
||||||
|
&GrantedAccess);
|
||||||
if (!NT_SUCCESS(Result))
|
if (!NT_SUCCESS(Result))
|
||||||
return FspSendResponseWithStatus(FileSystem, Request, Result);
|
return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result);
|
||||||
|
|
||||||
Result = FileSystem->FileCreate(FileSystem, Request, &File);
|
Result = FileSystem->Interface->FileCreate(FileSystem, Request, &File);
|
||||||
if (!NT_SUCCESS(Result))
|
if (!NT_SUCCESS(Result))
|
||||||
return FspSendResponseWithStatus(FileSystem, Request, Result);
|
return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result);
|
||||||
|
|
||||||
/* !!!: set share access */
|
/* !!!: set share access */
|
||||||
|
|
||||||
@ -33,12 +38,14 @@ static NTSTATUS FspFileSystemOpCreate_FileCreate(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
Response.IoStatus.Information = FILE_CREATED;
|
Response.IoStatus.Information = FILE_CREATED;
|
||||||
Response.Rsp.Create.Opened.UserContext = (UINT_PTR)File;
|
Response.Rsp.Create.Opened.UserContext = (UINT_PTR)File;
|
||||||
Response.Rsp.Create.Opened.GrantedAccess = GrantedAccess;
|
Response.Rsp.Create.Opened.GrantedAccess = GrantedAccess;
|
||||||
return FspSendResponse(FileSystem, &Response);
|
return FspFileSystemSendResponse(FileSystem, &Response);
|
||||||
}
|
}
|
||||||
|
|
||||||
static NTSTATUS FspFileSystemOpCreate_FileOpen(FSP_FILE_SYSTEM *FileSystem,
|
static NTSTATUS FspFileSystemOpCreate_FileOpen(FSP_FILE_SYSTEM *FileSystem,
|
||||||
FSP_FSCTL_TRANSACT_REQ *Request)
|
FSP_FSCTL_TRANSACT_REQ *Request)
|
||||||
{
|
{
|
||||||
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
|
#if 0
|
||||||
NTSTATUS Result;
|
NTSTATUS Result;
|
||||||
DWORD GrantedAccess;
|
DWORD GrantedAccess;
|
||||||
PVOID File;
|
PVOID File;
|
||||||
@ -68,24 +75,25 @@ static NTSTATUS FspFileSystemOpCreate_FileOpen(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
Response.Rsp.Create.Opened.UserContext = (UINT_PTR)File;
|
Response.Rsp.Create.Opened.UserContext = (UINT_PTR)File;
|
||||||
Response.Rsp.Create.Opened.GrantedAccess = GrantedAccess;
|
Response.Rsp.Create.Opened.GrantedAccess = GrantedAccess;
|
||||||
return FspSendResponse(FileSystem, &Response);
|
return FspSendResponse(FileSystem, &Response);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static NTSTATUS FspFileSystemOpCreate_FileOpenIf(FSP_FILE_SYSTEM *FileSystem,
|
static NTSTATUS FspFileSystemOpCreate_FileOpenIf(FSP_FILE_SYSTEM *FileSystem,
|
||||||
FSP_FSCTL_TRANSACT_REQ *Request)
|
FSP_FSCTL_TRANSACT_REQ *Request)
|
||||||
{
|
{
|
||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
static NTSTATUS FspFileSystemOpCreate_FileOverwrite(FSP_FILE_SYSTEM *FileSystem,
|
static NTSTATUS FspFileSystemOpCreate_FileOverwrite(FSP_FILE_SYSTEM *FileSystem,
|
||||||
FSP_FSCTL_TRANSACT_REQ *Request, BOOLEAN Supersede)
|
FSP_FSCTL_TRANSACT_REQ *Request, BOOLEAN Supersede)
|
||||||
{
|
{
|
||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
static NTSTATUS FspFileSystemOpCreate_FileOverwriteIf(FSP_FILE_SYSTEM *FileSystem,
|
static NTSTATUS FspFileSystemOpCreate_FileOverwriteIf(FSP_FILE_SYSTEM *FileSystem,
|
||||||
FSP_FSCTL_TRANSACT_REQ *Request)
|
FSP_FSCTL_TRANSACT_REQ *Request)
|
||||||
{
|
{
|
||||||
return STATUS_INVALID_PARAMETER;
|
return STATUS_NOT_IMPLEMENTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
FSP_API NTSTATUS FspFileSystemOpCreate(FSP_FILE_SYSTEM *FileSystem,
|
FSP_API NTSTATUS FspFileSystemOpCreate(FSP_FILE_SYSTEM *FileSystem,
|
||||||
@ -106,7 +114,6 @@ FSP_API NTSTATUS FspFileSystemOpCreate(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
case FILE_OVERWRITE_IF:
|
case FILE_OVERWRITE_IF:
|
||||||
return FspFileSystemOpCreate_FileOverwriteIf(FileSystem, Request);
|
return FspFileSystemOpCreate_FileOverwriteIf(FileSystem, Request);
|
||||||
default:
|
default:
|
||||||
return FspSendResponseWithStatus(FileSystem, Request, STATUS_INVALID_PARAMETER);
|
return FspFileSystemSendResponseWithStatus(FileSystem, Request, STATUS_INVALID_PARAMETER);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
@ -40,7 +40,7 @@ FSP_API NTSTATUS FspFileSystemCreate(PWSTR DevicePath,
|
|||||||
}
|
}
|
||||||
|
|
||||||
FileSystem->Dispatcher = FspFileSystemDirectDispatcher;
|
FileSystem->Dispatcher = FspFileSystemDirectDispatcher;
|
||||||
FileSystem->Operations[FspFsctlTransactCreateKind] = 0;
|
FileSystem->Operations[FspFsctlTransactCreateKind] = FspFileSystemOpCreate;
|
||||||
// !!!: ...
|
// !!!: ...
|
||||||
FileSystem->Interface = Interface;
|
FileSystem->Interface = Interface;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user