mirror of
https://github.com/winfsp/winfsp.git
synced 2025-04-23 17:03:12 -05:00
sys: IRP_MJ_READ, IRP_MJ_WRITE
This commit is contained in:
parent
319a0087f8
commit
3939c096e9
@ -89,10 +89,8 @@ static NTSTATUS FspFsvolReadCached(
|
||||
PAGED_CODE();
|
||||
|
||||
NTSTATUS Result;
|
||||
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(FsvolDeviceObject);
|
||||
PFILE_OBJECT FileObject = IrpSp->FileObject;
|
||||
FSP_FILE_NODE *FileNode = FileObject->FsContext;
|
||||
FSP_FILE_DESC *FileDesc = FileObject->FsContext2;
|
||||
LARGE_INTEGER ReadOffset = IrpSp->Parameters.Read.ByteOffset;
|
||||
ULONG ReadLength = IrpSp->Parameters.Read.Length;
|
||||
#if 0
|
||||
@ -104,8 +102,6 @@ static NTSTATUS FspFsvolReadCached(
|
||||
CC_FILE_SIZES FileSizes;
|
||||
BOOLEAN Success;
|
||||
|
||||
ASSERT(FileNode == FileDesc->FileNode);
|
||||
|
||||
/* try to acquire the FileNode Main shared */
|
||||
Success = DEBUGTEST(90, TRUE) &&
|
||||
FspFileNodeTryAcquireSharedF(FileNode, FspFileNodeAcquireMain, CanWait);
|
||||
@ -113,7 +109,8 @@ static NTSTATUS FspFsvolReadCached(
|
||||
return FspWqRepostIrpWorkItem(Irp, FspFsvolReadCached, 0);
|
||||
|
||||
/* trim ReadLength; the cache manager does not tolerate reads beyond file size */
|
||||
ASSERT(FspTimeoutInfinity32 == FsvolDeviceExtension->VolumeParams.FileInfoTimeout);
|
||||
ASSERT(FspTimeoutInfinity32 ==
|
||||
FspFsvolDeviceExtension(FsvolDeviceObject)->VolumeParams.FileInfoTimeout);
|
||||
FspFileNodeGetFileInfo(FileNode, &FileInfo);
|
||||
if ((UINT64)ReadOffset.QuadPart >= FileInfo.FileSize)
|
||||
{
|
||||
|
@ -90,10 +90,8 @@ static NTSTATUS FspFsvolWriteCached(
|
||||
|
||||
NTSTATUS Result;
|
||||
BOOLEAN Retrying = 0 != FspIrpRequest(Irp);
|
||||
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(FsvolDeviceObject);
|
||||
PFILE_OBJECT FileObject = IrpSp->FileObject;
|
||||
FSP_FILE_NODE *FileNode = FileObject->FsContext;
|
||||
FSP_FILE_DESC *FileDesc = FileObject->FsContext2;
|
||||
LARGE_INTEGER WriteOffset = IrpSp->Parameters.Write.ByteOffset;
|
||||
ULONG WriteLength = IrpSp->Parameters.Write.Length;
|
||||
#if 0
|
||||
@ -108,8 +106,6 @@ static NTSTATUS FspFsvolWriteCached(
|
||||
UINT64 WriteEndOffset;
|
||||
BOOLEAN Success;
|
||||
|
||||
ASSERT(FileNode == FileDesc->FileNode);
|
||||
|
||||
/* should we defer the write? */
|
||||
Success = DEBUGTEST(90, TRUE) && CcCanIWrite(FileObject, WriteLength, CanWait, Retrying);
|
||||
if (!Success)
|
||||
@ -133,7 +129,8 @@ static NTSTATUS FspFsvolWriteCached(
|
||||
return FspWqRepostIrpWorkItem(Irp, FspFsvolWriteCached, 0);
|
||||
|
||||
/* compute new file size and allocation size */
|
||||
ASSERT(FspTimeoutInfinity32 == FsvolDeviceExtension->VolumeParams.FileInfoTimeout);
|
||||
ASSERT(FspTimeoutInfinity32 ==
|
||||
FspFsvolDeviceExtension(FsvolDeviceObject)->VolumeParams.FileInfoTimeout);
|
||||
FspFileNodeGetFileInfo(FileNode, &FileInfo);
|
||||
FileSizes.AllocationSize.QuadPart = FileInfo.AllocationSize;
|
||||
FileSizes.FileSize.QuadPart = FileInfo.FileSize;
|
||||
@ -146,6 +143,8 @@ static NTSTATUS FspFsvolWriteCached(
|
||||
FileSizes.FileSize.QuadPart = WriteEndOffset;
|
||||
if (FileSizes.FileSize.QuadPart > FileSizes.AllocationSize.QuadPart)
|
||||
{
|
||||
FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension =
|
||||
FspFsvolDeviceExtension(FsvolDeviceObject);
|
||||
UINT64 AllocationUnit = FsvolDeviceExtension->VolumeParams.SectorSize *
|
||||
FsvolDeviceExtension->VolumeParams.SectorsPerAllocationUnit;
|
||||
FileSizes.AllocationSize.QuadPart = (FileSizes.FileSize.QuadPart + AllocationUnit - 1)
|
||||
|
Loading…
x
Reference in New Issue
Block a user