mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-23 08:53:01 -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_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
|
||||||
|
@ -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);
|
||||||
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user