This commit is contained in:
Bill Zissimopoulos 2016-01-04 00:00:00 -08:00
parent f27dee21ef
commit b3854368c5
2 changed files with 32 additions and 60 deletions

View File

@ -145,6 +145,9 @@ FSP_API NTSTATUS FspFileSystemSendResponseWithStatus(FSP_FILE_SYSTEM *FileSystem
*/ */
FSP_API NTSTATUS FspFileSystemOpCreate(FSP_FILE_SYSTEM *FileSystem, FSP_API NTSTATUS FspFileSystemOpCreate(FSP_FILE_SYSTEM *FileSystem,
FSP_FSCTL_TRANSACT_REQ *Request); FSP_FSCTL_TRANSACT_REQ *Request);
FSP_API NTSTATUS FspFileSystemOpCreateSendSuccessResponse(FSP_FILE_SYSTEM *FileSystem,
FSP_FSCTL_TRANSACT_REQ *Request, UINT_PTR Information,
FSP_FILE_NODE *FileNode, DWORD GrantedAccess);
/* /*
* Access Checks * Access Checks

View File

@ -46,7 +46,6 @@ static NTSTATUS FspFileSystemOpCreate_FileCreate(FSP_FILE_SYSTEM *FileSystem,
NTSTATUS Result; NTSTATUS Result;
DWORD GrantedAccess; DWORD GrantedAccess;
FSP_FILE_NODE *FileNode; FSP_FILE_NODE *FileNode;
FSP_FSCTL_TRANSACT_RSP Response;
Result = FspCreateCheck(FileSystem, Request, TRUE, &GrantedAccess); Result = FspCreateCheck(FileSystem, Request, TRUE, &GrantedAccess);
if (!NT_SUCCESS(Result)) if (!NT_SUCCESS(Result))
@ -61,15 +60,8 @@ static NTSTATUS FspFileSystemOpCreate_FileCreate(FSP_FILE_SYSTEM *FileSystem,
FspShareCheck(FileSystem, GrantedAccess, Request->Req.Create.ShareAccess, FileNode); FspShareCheck(FileSystem, GrantedAccess, Request->Req.Create.ShareAccess, FileNode);
memset(&Response, 0, sizeof Response); return FspFileSystemOpCreateSendSuccessResponse(FileSystem, Request,
Response.Size = sizeof Response; FILE_CREATED, FileNode, GrantedAccess);
Response.Kind = Request->Kind;
Response.Hint = Request->Hint;
Response.IoStatus.Status = STATUS_SUCCESS;
Response.IoStatus.Information = FILE_CREATED;
Response.Rsp.Create.Opened.UserContext = (UINT_PTR)FileNode;
Response.Rsp.Create.Opened.GrantedAccess = GrantedAccess;
return FspFileSystemSendResponse(FileSystem, &Response);
} }
static NTSTATUS FspFileSystemOpCreate_FileOpen(FSP_FILE_SYSTEM *FileSystem, static NTSTATUS FspFileSystemOpCreate_FileOpen(FSP_FILE_SYSTEM *FileSystem,
@ -78,7 +70,6 @@ static NTSTATUS FspFileSystemOpCreate_FileOpen(FSP_FILE_SYSTEM *FileSystem,
NTSTATUS Result; NTSTATUS Result;
DWORD GrantedAccess; DWORD GrantedAccess;
FSP_FILE_NODE *FileNode; FSP_FILE_NODE *FileNode;
FSP_FSCTL_TRANSACT_RSP Response;
Result = FspAccessCheck(FileSystem, Request, TRUE, Result = FspAccessCheck(FileSystem, Request, TRUE,
Request->Req.Create.DesiredAccess, &GrantedAccess); Request->Req.Create.DesiredAccess, &GrantedAccess);
@ -97,15 +88,8 @@ static NTSTATUS FspFileSystemOpCreate_FileOpen(FSP_FILE_SYSTEM *FileSystem,
return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result); return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result);
} }
memset(&Response, 0, sizeof Response); return FspFileSystemOpCreateSendSuccessResponse(FileSystem, Request,
Response.Size = sizeof Response; FILE_OPENED, FileNode, GrantedAccess);
Response.Kind = Request->Kind;
Response.Hint = Request->Hint;
Response.IoStatus.Status = STATUS_SUCCESS;
Response.IoStatus.Information = FILE_OPENED;
Response.Rsp.Create.Opened.UserContext = (UINT_PTR)FileNode;
Response.Rsp.Create.Opened.GrantedAccess = GrantedAccess;
return FspFileSystemSendResponse(FileSystem, &Response);
} }
static NTSTATUS FspFileSystemOpCreate_FileOpenIf(FSP_FILE_SYSTEM *FileSystem, static NTSTATUS FspFileSystemOpCreate_FileOpenIf(FSP_FILE_SYSTEM *FileSystem,
@ -114,7 +98,6 @@ static NTSTATUS FspFileSystemOpCreate_FileOpenIf(FSP_FILE_SYSTEM *FileSystem,
NTSTATUS Result; NTSTATUS Result;
DWORD GrantedAccess; DWORD GrantedAccess;
FSP_FILE_NODE *FileNode; FSP_FILE_NODE *FileNode;
FSP_FSCTL_TRANSACT_RSP Response;
BOOLEAN Create = FALSE; BOOLEAN Create = FALSE;
Result = FspAccessCheck(FileSystem, Request, TRUE, Result = FspAccessCheck(FileSystem, Request, TRUE,
@ -162,15 +145,8 @@ static NTSTATUS FspFileSystemOpCreate_FileOpenIf(FSP_FILE_SYSTEM *FileSystem,
return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result); return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result);
} }
memset(&Response, 0, sizeof Response); return FspFileSystemOpCreateSendSuccessResponse(FileSystem, Request,
Response.Size = sizeof Response; Create ? FILE_CREATED : FILE_OPENED, FileNode, GrantedAccess);
Response.Kind = Request->Kind;
Response.Hint = Request->Hint;
Response.IoStatus.Status = STATUS_SUCCESS;
Response.IoStatus.Information = Create ? FILE_CREATED : FILE_OPENED;
Response.Rsp.Create.Opened.UserContext = (UINT_PTR)FileNode;
Response.Rsp.Create.Opened.GrantedAccess = GrantedAccess;
return FspFileSystemSendResponse(FileSystem, &Response);
} }
static NTSTATUS FspFileSystemOpCreate_FileOverwrite(FSP_FILE_SYSTEM *FileSystem, static NTSTATUS FspFileSystemOpCreate_FileOverwrite(FSP_FILE_SYSTEM *FileSystem,
@ -182,7 +158,6 @@ static NTSTATUS FspFileSystemOpCreate_FileOverwrite(FSP_FILE_SYSTEM *FileSystem,
NTSTATUS Result; NTSTATUS Result;
DWORD GrantedAccess; DWORD GrantedAccess;
FSP_FILE_NODE *FileNode; FSP_FILE_NODE *FileNode;
FSP_FSCTL_TRANSACT_RSP Response;
Result = FspAccessCheck(FileSystem, Request, TRUE, Result = FspAccessCheck(FileSystem, Request, TRUE,
Request->Req.Create.DesiredAccess | (Supersede ? DELETE : FILE_WRITE_DATA), Request->Req.Create.DesiredAccess | (Supersede ? DELETE : FILE_WRITE_DATA),
@ -207,15 +182,8 @@ static NTSTATUS FspFileSystemOpCreate_FileOverwrite(FSP_FILE_SYSTEM *FileSystem,
return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result); return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result);
} }
memset(&Response, 0, sizeof Response); return FspFileSystemOpCreateSendSuccessResponse(FileSystem, Request,
Response.Size = sizeof Response; Supersede ? FILE_SUPERSEDED : FILE_OVERWRITTEN, FileNode, GrantedAccess);
Response.Kind = Request->Kind;
Response.Hint = Request->Hint;
Response.IoStatus.Status = STATUS_SUCCESS;
Response.IoStatus.Information = Supersede ? FILE_SUPERSEDED : FILE_OVERWRITTEN;
Response.Rsp.Create.Opened.UserContext = (UINT_PTR)FileNode;
Response.Rsp.Create.Opened.GrantedAccess = GrantedAccess;
return FspFileSystemSendResponse(FileSystem, &Response);
} }
static NTSTATUS FspFileSystemOpCreate_FileOverwriteIf(FSP_FILE_SYSTEM *FileSystem, static NTSTATUS FspFileSystemOpCreate_FileOverwriteIf(FSP_FILE_SYSTEM *FileSystem,
@ -227,7 +195,6 @@ static NTSTATUS FspFileSystemOpCreate_FileOverwriteIf(FSP_FILE_SYSTEM *FileSyste
NTSTATUS Result; NTSTATUS Result;
DWORD GrantedAccess; DWORD GrantedAccess;
FSP_FILE_NODE *FileNode; FSP_FILE_NODE *FileNode;
FSP_FSCTL_TRANSACT_RSP Response;
BOOLEAN Create = FALSE; BOOLEAN Create = FALSE;
Result = FspAccessCheck(FileSystem, Request, TRUE, Result = FspAccessCheck(FileSystem, Request, TRUE,
@ -278,15 +245,8 @@ static NTSTATUS FspFileSystemOpCreate_FileOverwriteIf(FSP_FILE_SYSTEM *FileSyste
return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result); return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result);
} }
memset(&Response, 0, sizeof Response); return FspFileSystemOpCreateSendSuccessResponse(FileSystem, Request,
Response.Size = sizeof Response; Create ? FILE_CREATED : FILE_OVERWRITTEN, FileNode, GrantedAccess);
Response.Kind = Request->Kind;
Response.Hint = Request->Hint;
Response.IoStatus.Status = STATUS_SUCCESS;
Response.IoStatus.Information = Create ? FILE_CREATED : FILE_OVERWRITTEN;
Response.Rsp.Create.Opened.UserContext = (UINT_PTR)FileNode;
Response.Rsp.Create.Opened.GrantedAccess = GrantedAccess;
return FspFileSystemSendResponse(FileSystem, &Response);
} }
static NTSTATUS FspFileSystemOpCreate_FileOpenTargetDirectory(FSP_FILE_SYSTEM *FileSystem, static NTSTATUS FspFileSystemOpCreate_FileOpenTargetDirectory(FSP_FILE_SYSTEM *FileSystem,
@ -299,7 +259,6 @@ static NTSTATUS FspFileSystemOpCreate_FileOpenTargetDirectory(FSP_FILE_SYSTEM *F
DWORD GrantedAccess; DWORD GrantedAccess;
FSP_FILE_NODE *FileNode; FSP_FILE_NODE *FileNode;
BOOLEAN FileExists; BOOLEAN FileExists;
FSP_FSCTL_TRANSACT_RSP Response;
PWSTR Path, Suffix; PWSTR Path, Suffix;
FspPathSuffix((PWSTR)Request->Buffer, &Path, &Suffix); FspPathSuffix((PWSTR)Request->Buffer, &Path, &Suffix);
@ -323,15 +282,8 @@ static NTSTATUS FspFileSystemOpCreate_FileOpenTargetDirectory(FSP_FILE_SYSTEM *F
return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result); return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result);
} }
memset(&Response, 0, sizeof Response); return FspFileSystemOpCreateSendSuccessResponse(FileSystem, Request,
Response.Size = sizeof Response; FileExists ? FILE_EXISTS : FILE_DOES_NOT_EXIST, FileNode, GrantedAccess);
Response.Kind = Request->Kind;
Response.Hint = Request->Hint;
Response.IoStatus.Status = STATUS_SUCCESS;
Response.IoStatus.Information = FileExists ? FILE_EXISTS : FILE_DOES_NOT_EXIST;
Response.Rsp.Create.Opened.UserContext = (UINT_PTR)FileNode;
Response.Rsp.Create.Opened.GrantedAccess = GrantedAccess;
return FspFileSystemSendResponse(FileSystem, &Response);
} }
FSP_API NTSTATUS FspFileSystemOpCreate(FSP_FILE_SYSTEM *FileSystem, FSP_API NTSTATUS FspFileSystemOpCreate(FSP_FILE_SYSTEM *FileSystem,
@ -364,3 +316,20 @@ FSP_API NTSTATUS FspFileSystemOpCreate(FSP_FILE_SYSTEM *FileSystem,
return FspFileSystemSendResponseWithStatus(FileSystem, Request, STATUS_INVALID_PARAMETER); return FspFileSystemSendResponseWithStatus(FileSystem, Request, STATUS_INVALID_PARAMETER);
} }
} }
FSP_API NTSTATUS FspFileSystemOpCreateSendSuccessResponse(FSP_FILE_SYSTEM *FileSystem,
FSP_FSCTL_TRANSACT_REQ *Request, UINT_PTR Information,
FSP_FILE_NODE *FileNode, DWORD GrantedAccess)
{
FSP_FSCTL_TRANSACT_RSP Response;
memset(&Response, 0, sizeof Response);
Response.Size = sizeof Response;
Response.Kind = Request->Kind;
Response.Hint = Request->Hint;
Response.IoStatus.Status = STATUS_SUCCESS;
Response.IoStatus.Information = Information;
Response.Rsp.Create.Opened.UserContext = (UINT_PTR)FileNode;
Response.Rsp.Create.Opened.GrantedAccess = GrantedAccess;
return FspFileSystemSendResponse(FileSystem, &Response);
}