mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-23 00:43:00 -05:00
sys, dll: add AllocationSize, FileSize in Response::Rsp::Create::Opened
This commit is contained in:
parent
d88831bd33
commit
30662ac9fa
@ -153,6 +153,8 @@ typedef struct
|
|||||||
{
|
{
|
||||||
UINT64 UserContext; /* open file user context (unique file id) */
|
UINT64 UserContext; /* open file user context (unique file id) */
|
||||||
UINT64 UserContext2; /* kernel file object user context (only low 32 bits valid) */
|
UINT64 UserContext2; /* kernel file object user context (only low 32 bits valid) */
|
||||||
|
UINT64 AllocationSize; /* file allocation size */
|
||||||
|
UINT64 FileSize; /* file size */
|
||||||
UINT32 GrantedAccess; /* FILE_{READ_DATA,WRITE_DATA,etc.} */
|
UINT32 GrantedAccess; /* FILE_{READ_DATA,WRITE_DATA,etc.} */
|
||||||
} Opened;
|
} Opened;
|
||||||
/* IoStatus.Status == STATUS_REPARSE */
|
/* IoStatus.Status == STATUS_REPARSE */
|
||||||
|
@ -28,7 +28,13 @@ typedef struct _FSP_FILE_SYSTEM FSP_FILE_SYSTEM;
|
|||||||
typedef struct _FSP_FILE_NODE
|
typedef struct _FSP_FILE_NODE
|
||||||
{
|
{
|
||||||
PVOID UserContext;
|
PVOID UserContext;
|
||||||
DWORD Flags;
|
UINT64 AllocationSize;
|
||||||
|
UINT64 FileSize;
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
BOOLEAN DeleteOnClose:1;
|
||||||
|
BOOLEAN DeletePending:1;
|
||||||
|
} Flags;
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
ULONG OpenCount;
|
ULONG OpenCount;
|
||||||
|
@ -51,7 +51,7 @@ static NTSTATUS FspFileSystemOpCreate_FileCreate(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
if (!NT_SUCCESS(Result))
|
if (!NT_SUCCESS(Result))
|
||||||
return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result);
|
return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result);
|
||||||
|
|
||||||
FileNode->Flags = 0;
|
memset(&FileNode->Flags, 0, sizeof FileNode->Flags);
|
||||||
memset(&FileNode->ShareAccess, 0, sizeof FileNode->ShareAccess);
|
memset(&FileNode->ShareAccess, 0, sizeof FileNode->ShareAccess);
|
||||||
|
|
||||||
FspShareCheck(FileSystem, GrantedAccess, Request->Req.Create.ShareAccess, FileNode);
|
FspShareCheck(FileSystem, GrantedAccess, Request->Req.Create.ShareAccess, FileNode);
|
||||||
@ -129,7 +129,7 @@ static NTSTATUS FspFileSystemOpCreate_FileOpenIf(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
if (!NT_SUCCESS(Result))
|
if (!NT_SUCCESS(Result))
|
||||||
return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result);
|
return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result);
|
||||||
|
|
||||||
FileNode->Flags = 0;
|
memset(&FileNode->Flags, 0, sizeof FileNode->Flags);
|
||||||
memset(&FileNode->ShareAccess, 0, sizeof FileNode->ShareAccess);
|
memset(&FileNode->ShareAccess, 0, sizeof FileNode->ShareAccess);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -229,7 +229,7 @@ static NTSTATUS FspFileSystemOpCreate_FileOverwriteIf(FSP_FILE_SYSTEM *FileSyste
|
|||||||
if (!NT_SUCCESS(Result))
|
if (!NT_SUCCESS(Result))
|
||||||
return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result);
|
return FspFileSystemSendResponseWithStatus(FileSystem, Request, Result);
|
||||||
|
|
||||||
FileNode->Flags = 0;
|
memset(&FileNode->Flags, 0, sizeof FileNode->Flags);
|
||||||
memset(&FileNode->ShareAccess, 0, sizeof FileNode->ShareAccess);
|
memset(&FileNode->ShareAccess, 0, sizeof FileNode->ShareAccess);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -322,6 +322,8 @@ FSP_API NTSTATUS FspFileSystemSendCreateResponse(FSP_FILE_SYSTEM *FileSystem,
|
|||||||
Response.IoStatus.Status = STATUS_SUCCESS;
|
Response.IoStatus.Status = STATUS_SUCCESS;
|
||||||
Response.IoStatus.Information = Information;
|
Response.IoStatus.Information = Information;
|
||||||
Response.Rsp.Create.Opened.UserContext = (UINT_PTR)FileNode;
|
Response.Rsp.Create.Opened.UserContext = (UINT_PTR)FileNode;
|
||||||
|
Response.Rsp.Create.Opened.AllocationSize = FileNode->AllocationSize;
|
||||||
|
Response.Rsp.Create.Opened.FileSize = FileNode->FileSize;
|
||||||
Response.Rsp.Create.Opened.GrantedAccess = GrantedAccess;
|
Response.Rsp.Create.Opened.GrantedAccess = GrantedAccess;
|
||||||
return FspFileSystemSendResponse(FileSystem, &Response);
|
return FspFileSystemSendResponse(FileSystem, &Response);
|
||||||
}
|
}
|
||||||
|
@ -382,6 +382,9 @@ VOID FspFsvolCreateComplete(
|
|||||||
/* get the FsContext from our Request and associate it with the Response UserContext */
|
/* get the FsContext from our Request and associate it with the Response UserContext */
|
||||||
Request = FspIrpRequest(Irp);
|
Request = FspIrpRequest(Irp);
|
||||||
FsContext = FspIopRequestContext(Request, RequestFsContext);
|
FsContext = FspIopRequestContext(Request, RequestFsContext);
|
||||||
|
FsContext->Header.AllocationSize.QuadPart = Response->Rsp.Create.Opened.AllocationSize;
|
||||||
|
FsContext->Header.FileSize.QuadPart = FsContext->Header.ValidDataLength.QuadPart =
|
||||||
|
Response->Rsp.Create.Opened.AllocationSize;
|
||||||
FsContext->UserContext = Response->Rsp.Create.Opened.UserContext;
|
FsContext->UserContext = Response->Rsp.Create.Opened.UserContext;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
Loading…
x
Reference in New Issue
Block a user