This commit is contained in:
Bill Zissimopoulos 2016-01-03 15:08:05 -08:00
parent 5e09c1e045
commit b3f9e7e32d
3 changed files with 27 additions and 12 deletions

View File

@ -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
*/ */

View File

@ -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

View File

@ -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;