mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-23 00:43:00 -05:00
sys,dll: create: correctly handle FILE_SUPERSEDE
This commit is contained in:
parent
154933ecab
commit
33e8b5df04
@ -546,7 +546,6 @@ static NTSTATUS FspFileSystemOpCreate_FileOverwrite(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
UINT32 GrantedAccess;
|
UINT32 GrantedAccess;
|
||||||
FSP_FSCTL_TRANSACT_FULL_CONTEXT FullContext;
|
FSP_FSCTL_TRANSACT_FULL_CONTEXT FullContext;
|
||||||
FSP_FSCTL_OPEN_FILE_INFO OpenFileInfo;
|
FSP_FSCTL_OPEN_FILE_INFO OpenFileInfo;
|
||||||
BOOLEAN Supersede = FILE_SUPERSEDE == ((Request->Req.Create.CreateOptions >> 24) & 0xff);
|
|
||||||
|
|
||||||
Result = FspFileSystemOverwriteCheck(FileSystem, Request, Response, TRUE, &GrantedAccess);
|
Result = FspFileSystemOverwriteCheck(FileSystem, Request, Response, TRUE, &GrantedAccess);
|
||||||
if (!NT_SUCCESS(Result) || STATUS_REPARSE == Result)
|
if (!NT_SUCCESS(Result) || STATUS_REPARSE == Result)
|
||||||
@ -570,7 +569,7 @@ static NTSTATUS FspFileSystemOpCreate_FileOverwrite(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
Response->Rsp.Create.Opened.FileName.Size = (UINT16)OpenFileInfo.NormalizedNameSize;
|
Response->Rsp.Create.Opened.FileName.Size = (UINT16)OpenFileInfo.NormalizedNameSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
Response->IoStatus.Information = Supersede ? FILE_SUPERSEDED : FILE_OVERWRITTEN;
|
Response->IoStatus.Information = FILE_OVERWRITTEN;
|
||||||
SetFileContext(Response->Rsp.Create.Opened, FullContext);
|
SetFileContext(Response->Rsp.Create.Opened, FullContext);
|
||||||
Response->Rsp.Create.Opened.GrantedAccess = GrantedAccess;
|
Response->Rsp.Create.Opened.GrantedAccess = GrantedAccess;
|
||||||
memcpy(&Response->Rsp.Create.Opened.FileInfo,
|
memcpy(&Response->Rsp.Create.Opened.FileInfo,
|
||||||
@ -586,6 +585,7 @@ static NTSTATUS FspFileSystemOpCreate_FileOverwriteIf(FSP_FILE_SYSTEM *FileSyste
|
|||||||
PSECURITY_DESCRIPTOR ParentDescriptor, ObjectDescriptor;
|
PSECURITY_DESCRIPTOR ParentDescriptor, ObjectDescriptor;
|
||||||
FSP_FSCTL_TRANSACT_FULL_CONTEXT FullContext;
|
FSP_FSCTL_TRANSACT_FULL_CONTEXT FullContext;
|
||||||
FSP_FSCTL_OPEN_FILE_INFO OpenFileInfo;
|
FSP_FSCTL_OPEN_FILE_INFO OpenFileInfo;
|
||||||
|
BOOLEAN Supersede = FILE_SUPERSEDE == ((Request->Req.Create.CreateOptions >> 24) & 0xff);
|
||||||
BOOLEAN Create = FALSE;
|
BOOLEAN Create = FALSE;
|
||||||
|
|
||||||
Result = FspFileSystemOverwriteCheck(FileSystem, Request, Response, TRUE, &GrantedAccess);
|
Result = FspFileSystemOverwriteCheck(FileSystem, Request, Response, TRUE, &GrantedAccess);
|
||||||
@ -647,7 +647,8 @@ static NTSTATUS FspFileSystemOpCreate_FileOverwriteIf(FSP_FILE_SYSTEM *FileSyste
|
|||||||
Response->Rsp.Create.Opened.FileName.Size = (UINT16)OpenFileInfo.NormalizedNameSize;
|
Response->Rsp.Create.Opened.FileName.Size = (UINT16)OpenFileInfo.NormalizedNameSize;
|
||||||
}
|
}
|
||||||
|
|
||||||
Response->IoStatus.Information = Create ? FILE_CREATED : FILE_OVERWRITTEN;
|
Response->IoStatus.Information = Create ? FILE_CREATED :
|
||||||
|
(Supersede ? FILE_SUPERSEDED : FILE_OVERWRITTEN);
|
||||||
SetFileContext(Response->Rsp.Create.Opened, FullContext);
|
SetFileContext(Response->Rsp.Create.Opened, FullContext);
|
||||||
Response->Rsp.Create.Opened.GrantedAccess = GrantedAccess;
|
Response->Rsp.Create.Opened.GrantedAccess = GrantedAccess;
|
||||||
memcpy(&Response->Rsp.Create.Opened.FileInfo,
|
memcpy(&Response->Rsp.Create.Opened.FileInfo,
|
||||||
@ -816,10 +817,10 @@ FSP_API NTSTATUS FspFileSystemOpCreate(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
Result = FspFileSystemOpCreate_FileOpenIf(FileSystem, Request, Response);
|
Result = FspFileSystemOpCreate_FileOpenIf(FileSystem, Request, Response);
|
||||||
break;
|
break;
|
||||||
case FILE_OVERWRITE:
|
case FILE_OVERWRITE:
|
||||||
case FILE_SUPERSEDE:
|
|
||||||
Result = FspFileSystemOpCreate_FileOverwrite(FileSystem, Request, Response);
|
Result = FspFileSystemOpCreate_FileOverwrite(FileSystem, Request, Response);
|
||||||
break;
|
break;
|
||||||
case FILE_OVERWRITE_IF:
|
case FILE_OVERWRITE_IF:
|
||||||
|
case FILE_SUPERSEDE:
|
||||||
Result = FspFileSystemOpCreate_FileOverwriteIf(FileSystem, Request, Response);
|
Result = FspFileSystemOpCreate_FileOverwriteIf(FileSystem, Request, Response);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -1923,11 +1923,11 @@ NTSTATUS FspMainFileOpen(
|
|||||||
case FILE_CREATE:
|
case FILE_CREATE:
|
||||||
case FILE_OPEN_IF:
|
case FILE_OPEN_IF:
|
||||||
case FILE_OVERWRITE_IF:
|
case FILE_OVERWRITE_IF:
|
||||||
|
case FILE_SUPERSEDE:
|
||||||
Disposition = FILE_OPEN_IF;
|
Disposition = FILE_OPEN_IF;
|
||||||
break;
|
break;
|
||||||
case FILE_OPEN:
|
case FILE_OPEN:
|
||||||
case FILE_OVERWRITE:
|
case FILE_OVERWRITE:
|
||||||
case FILE_SUPERSEDE:
|
|
||||||
Disposition = FILE_OPEN;
|
Disposition = FILE_OPEN;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user