mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-22 16:33:02 -05:00
dll: WIP
This commit is contained in:
parent
f27dee21ef
commit
b3854368c5
@ -145,6 +145,9 @@ FSP_API NTSTATUS FspFileSystemSendResponseWithStatus(FSP_FILE_SYSTEM *FileSystem
|
||||
*/
|
||||
FSP_API NTSTATUS FspFileSystemOpCreate(FSP_FILE_SYSTEM *FileSystem,
|
||||
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
|
||||
|
@ -46,7 +46,6 @@ static NTSTATUS FspFileSystemOpCreate_FileCreate(FSP_FILE_SYSTEM *FileSystem,
|
||||
NTSTATUS Result;
|
||||
DWORD GrantedAccess;
|
||||
FSP_FILE_NODE *FileNode;
|
||||
FSP_FSCTL_TRANSACT_RSP Response;
|
||||
|
||||
Result = FspCreateCheck(FileSystem, Request, TRUE, &GrantedAccess);
|
||||
if (!NT_SUCCESS(Result))
|
||||
@ -61,15 +60,8 @@ static NTSTATUS FspFileSystemOpCreate_FileCreate(FSP_FILE_SYSTEM *FileSystem,
|
||||
|
||||
FspShareCheck(FileSystem, GrantedAccess, Request->Req.Create.ShareAccess, FileNode);
|
||||
|
||||
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 = FILE_CREATED;
|
||||
Response.Rsp.Create.Opened.UserContext = (UINT_PTR)FileNode;
|
||||
Response.Rsp.Create.Opened.GrantedAccess = GrantedAccess;
|
||||
return FspFileSystemSendResponse(FileSystem, &Response);
|
||||
return FspFileSystemOpCreateSendSuccessResponse(FileSystem, Request,
|
||||
FILE_CREATED, FileNode, GrantedAccess);
|
||||
}
|
||||
|
||||
static NTSTATUS FspFileSystemOpCreate_FileOpen(FSP_FILE_SYSTEM *FileSystem,
|
||||
@ -78,7 +70,6 @@ static NTSTATUS FspFileSystemOpCreate_FileOpen(FSP_FILE_SYSTEM *FileSystem,
|
||||
NTSTATUS Result;
|
||||
DWORD GrantedAccess;
|
||||
FSP_FILE_NODE *FileNode;
|
||||
FSP_FSCTL_TRANSACT_RSP Response;
|
||||
|
||||
Result = FspAccessCheck(FileSystem, Request, TRUE,
|
||||
Request->Req.Create.DesiredAccess, &GrantedAccess);
|
||||
@ -97,15 +88,8 @@ static NTSTATUS FspFileSystemOpCreate_FileOpen(FSP_FILE_SYSTEM *FileSystem,
|
||||
return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result);
|
||||
}
|
||||
|
||||
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 = FILE_OPENED;
|
||||
Response.Rsp.Create.Opened.UserContext = (UINT_PTR)FileNode;
|
||||
Response.Rsp.Create.Opened.GrantedAccess = GrantedAccess;
|
||||
return FspFileSystemSendResponse(FileSystem, &Response);
|
||||
return FspFileSystemOpCreateSendSuccessResponse(FileSystem, Request,
|
||||
FILE_OPENED, FileNode, GrantedAccess);
|
||||
}
|
||||
|
||||
static NTSTATUS FspFileSystemOpCreate_FileOpenIf(FSP_FILE_SYSTEM *FileSystem,
|
||||
@ -114,7 +98,6 @@ static NTSTATUS FspFileSystemOpCreate_FileOpenIf(FSP_FILE_SYSTEM *FileSystem,
|
||||
NTSTATUS Result;
|
||||
DWORD GrantedAccess;
|
||||
FSP_FILE_NODE *FileNode;
|
||||
FSP_FSCTL_TRANSACT_RSP Response;
|
||||
BOOLEAN Create = FALSE;
|
||||
|
||||
Result = FspAccessCheck(FileSystem, Request, TRUE,
|
||||
@ -162,15 +145,8 @@ static NTSTATUS FspFileSystemOpCreate_FileOpenIf(FSP_FILE_SYSTEM *FileSystem,
|
||||
return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result);
|
||||
}
|
||||
|
||||
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 = Create ? FILE_CREATED : FILE_OPENED;
|
||||
Response.Rsp.Create.Opened.UserContext = (UINT_PTR)FileNode;
|
||||
Response.Rsp.Create.Opened.GrantedAccess = GrantedAccess;
|
||||
return FspFileSystemSendResponse(FileSystem, &Response);
|
||||
return FspFileSystemOpCreateSendSuccessResponse(FileSystem, Request,
|
||||
Create ? FILE_CREATED : FILE_OPENED, FileNode, GrantedAccess);
|
||||
}
|
||||
|
||||
static NTSTATUS FspFileSystemOpCreate_FileOverwrite(FSP_FILE_SYSTEM *FileSystem,
|
||||
@ -182,7 +158,6 @@ static NTSTATUS FspFileSystemOpCreate_FileOverwrite(FSP_FILE_SYSTEM *FileSystem,
|
||||
NTSTATUS Result;
|
||||
DWORD GrantedAccess;
|
||||
FSP_FILE_NODE *FileNode;
|
||||
FSP_FSCTL_TRANSACT_RSP Response;
|
||||
|
||||
Result = FspAccessCheck(FileSystem, Request, TRUE,
|
||||
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);
|
||||
}
|
||||
|
||||
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 = Supersede ? FILE_SUPERSEDED : FILE_OVERWRITTEN;
|
||||
Response.Rsp.Create.Opened.UserContext = (UINT_PTR)FileNode;
|
||||
Response.Rsp.Create.Opened.GrantedAccess = GrantedAccess;
|
||||
return FspFileSystemSendResponse(FileSystem, &Response);
|
||||
return FspFileSystemOpCreateSendSuccessResponse(FileSystem, Request,
|
||||
Supersede ? FILE_SUPERSEDED : FILE_OVERWRITTEN, FileNode, GrantedAccess);
|
||||
}
|
||||
|
||||
static NTSTATUS FspFileSystemOpCreate_FileOverwriteIf(FSP_FILE_SYSTEM *FileSystem,
|
||||
@ -227,7 +195,6 @@ static NTSTATUS FspFileSystemOpCreate_FileOverwriteIf(FSP_FILE_SYSTEM *FileSyste
|
||||
NTSTATUS Result;
|
||||
DWORD GrantedAccess;
|
||||
FSP_FILE_NODE *FileNode;
|
||||
FSP_FSCTL_TRANSACT_RSP Response;
|
||||
BOOLEAN Create = FALSE;
|
||||
|
||||
Result = FspAccessCheck(FileSystem, Request, TRUE,
|
||||
@ -278,15 +245,8 @@ static NTSTATUS FspFileSystemOpCreate_FileOverwriteIf(FSP_FILE_SYSTEM *FileSyste
|
||||
return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result);
|
||||
}
|
||||
|
||||
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 = Create ? FILE_CREATED : FILE_OVERWRITTEN;
|
||||
Response.Rsp.Create.Opened.UserContext = (UINT_PTR)FileNode;
|
||||
Response.Rsp.Create.Opened.GrantedAccess = GrantedAccess;
|
||||
return FspFileSystemSendResponse(FileSystem, &Response);
|
||||
return FspFileSystemOpCreateSendSuccessResponse(FileSystem, Request,
|
||||
Create ? FILE_CREATED : FILE_OVERWRITTEN, FileNode, GrantedAccess);
|
||||
}
|
||||
|
||||
static NTSTATUS FspFileSystemOpCreate_FileOpenTargetDirectory(FSP_FILE_SYSTEM *FileSystem,
|
||||
@ -299,7 +259,6 @@ static NTSTATUS FspFileSystemOpCreate_FileOpenTargetDirectory(FSP_FILE_SYSTEM *F
|
||||
DWORD GrantedAccess;
|
||||
FSP_FILE_NODE *FileNode;
|
||||
BOOLEAN FileExists;
|
||||
FSP_FSCTL_TRANSACT_RSP Response;
|
||||
PWSTR 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);
|
||||
}
|
||||
|
||||
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 = 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);
|
||||
return FspFileSystemOpCreateSendSuccessResponse(FileSystem, Request,
|
||||
FileExists ? FILE_EXISTS : FILE_DOES_NOT_EXIST, FileNode, GrantedAccess);
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
||||
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);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user