sys, dll: add AllocationSize, FileSize in Response::Rsp::Create::Opened

This commit is contained in:
Bill Zissimopoulos 2016-01-04 14:09:17 -08:00
parent d88831bd33
commit 30662ac9fa
4 changed files with 17 additions and 4 deletions

View File

@ -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 */

View File

@ -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;

View File

@ -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);
} }

View File

@ -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;
/* /*