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