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);
NTSTATUS (*QuerySecurity)(FSP_FILE_SYSTEM *,
PWSTR, SECURITY_INFORMATION, PSECURITY_DESCRIPTOR, SIZE_T *);
NTSTATUS (*FileCreate)(FSP_FILE_SYSTEM *,
FSP_FSCTL_TRANSACT_REQ *, PVOID *File);
} FSP_FILE_SYSTEM_INTERFACE;
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_FSCTL_TRANSACT_REQ *Request, NTSTATUS Result);
/*
* File System Operations
*/
FSP_API NTSTATUS FspFileSystemOpCreate(FSP_FILE_SYSTEM *FileSystem,
FSP_FSCTL_TRANSACT_REQ *Request);
/*
* Access Checks
*/

View File

@ -6,22 +6,27 @@
#include <dll/library.h>
#if 0
static NTSTATUS FspFileSystemOpCreate_FileCreate(FSP_FILE_SYSTEM *FileSystem,
FSP_FSCTL_TRANSACT_REQ *Request)
{
if (0 == FileSystem->Interface->FileCreate)
return FspFileSystemSendResponseWithStatus(FileSystem, Request, STATUS_NOT_IMPLEMENTED);
NTSTATUS Result;
DWORD GrantedAccess;
PVOID File;
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))
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))
return FspSendResponseWithStatus(FileSystem, Request, Result);
return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result);
/* !!!: set share access */
@ -33,12 +38,14 @@ static NTSTATUS FspFileSystemOpCreate_FileCreate(FSP_FILE_SYSTEM *FileSystem,
Response.IoStatus.Information = FILE_CREATED;
Response.Rsp.Create.Opened.UserContext = (UINT_PTR)File;
Response.Rsp.Create.Opened.GrantedAccess = GrantedAccess;
return FspSendResponse(FileSystem, &Response);
return FspFileSystemSendResponse(FileSystem, &Response);
}
static NTSTATUS FspFileSystemOpCreate_FileOpen(FSP_FILE_SYSTEM *FileSystem,
FSP_FSCTL_TRANSACT_REQ *Request)
{
return STATUS_NOT_IMPLEMENTED;
#if 0
NTSTATUS Result;
DWORD GrantedAccess;
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.GrantedAccess = GrantedAccess;
return FspSendResponse(FileSystem, &Response);
#endif
}
static NTSTATUS FspFileSystemOpCreate_FileOpenIf(FSP_FILE_SYSTEM *FileSystem,
FSP_FSCTL_TRANSACT_REQ *Request)
{
return STATUS_INVALID_PARAMETER;
return STATUS_NOT_IMPLEMENTED;
}
static NTSTATUS FspFileSystemOpCreate_FileOverwrite(FSP_FILE_SYSTEM *FileSystem,
FSP_FSCTL_TRANSACT_REQ *Request, BOOLEAN Supersede)
{
return STATUS_INVALID_PARAMETER;
return STATUS_NOT_IMPLEMENTED;
}
static NTSTATUS FspFileSystemOpCreate_FileOverwriteIf(FSP_FILE_SYSTEM *FileSystem,
FSP_FSCTL_TRANSACT_REQ *Request)
{
return STATUS_INVALID_PARAMETER;
return STATUS_NOT_IMPLEMENTED;
}
FSP_API NTSTATUS FspFileSystemOpCreate(FSP_FILE_SYSTEM *FileSystem,
@ -106,7 +114,6 @@ FSP_API NTSTATUS FspFileSystemOpCreate(FSP_FILE_SYSTEM *FileSystem,
case FILE_OVERWRITE_IF:
return FspFileSystemOpCreate_FileOverwriteIf(FileSystem, Request);
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->Operations[FspFsctlTransactCreateKind] = 0;
FileSystem->Operations[FspFsctlTransactCreateKind] = FspFileSystemOpCreate;
// !!!: ...
FileSystem->Interface = Interface;