diff --git a/build/VStudio/winfsp_sys.vcxproj b/build/VStudio/winfsp_sys.vcxproj index be0b5c33..009c67b8 100644 --- a/build/VStudio/winfsp_sys.vcxproj +++ b/build/VStudio/winfsp_sys.vcxproj @@ -155,7 +155,7 @@ - + diff --git a/build/VStudio/winfsp_sys.vcxproj.filters b/build/VStudio/winfsp_sys.vcxproj.filters index 0e7f66eb..966c9e64 100644 --- a/build/VStudio/winfsp_sys.vcxproj.filters +++ b/build/VStudio/winfsp_sys.vcxproj.filters @@ -71,9 +71,6 @@ Source - - Source - Source @@ -92,6 +89,9 @@ Source + + Source + diff --git a/src/sys/fastio.c b/src/sys/callbacks.c similarity index 59% rename from src/sys/fastio.c rename to src/sys/callbacks.c index a46821e4..f49c6477 100644 --- a/src/sys/fastio.c +++ b/src/sys/callbacks.c @@ -1,5 +1,6 @@ /** - * @file sys/fastio.c + * @file sys/callbacks.c + * Fast I/O and resource acquisition callbacks. * * @copyright 2015 Bill Zissimopoulos */ @@ -13,6 +14,16 @@ FAST_IO_ACQUIRE_FOR_MOD_WRITE FspAcquireForModWrite; FAST_IO_RELEASE_FOR_MOD_WRITE FspReleaseForModWrite; FAST_IO_ACQUIRE_FOR_CCFLUSH FspAcquireForCcFlush; FAST_IO_RELEASE_FOR_CCFLUSH FspReleaseForCcFlush; +BOOLEAN FspAcquireForLazyWrite( + PVOID Context, + BOOLEAN Wait); +VOID FspReleaseFromLazyWrite( + PVOID Context); +BOOLEAN FspAcquireForReadAhead( + PVOID Context, + BOOLEAN Wait); +VOID FspReleaseFromReadAhead( + PVOID Context); #ifdef ALLOC_PRAGMA #pragma alloc_text(PAGE, FspFastIoCheckIfPossible) @@ -22,6 +33,10 @@ FAST_IO_RELEASE_FOR_CCFLUSH FspReleaseForCcFlush; #pragma alloc_text(PAGE, FspReleaseForModWrite) #pragma alloc_text(PAGE, FspAcquireForCcFlush) #pragma alloc_text(PAGE, FspReleaseForCcFlush) +#pragma alloc_text(PAGE, FspAcquireForLazyWrite) +#pragma alloc_text(PAGE, FspReleaseFromLazyWrite) +#pragma alloc_text(PAGE, FspAcquireForReadAhead) +#pragma alloc_text(PAGE, FspReleaseFromReadAhead) #endif BOOLEAN FspFastIoCheckIfPossible( @@ -38,7 +53,7 @@ BOOLEAN FspFastIoCheckIfPossible( Result = FALSE; - FSP_LEAVE_BOOL("%s", ""); + FSP_LEAVE_BOOL("FileObject=%p", FileObject); } VOID FspAcquireFileForNtCreateSection( @@ -46,7 +61,7 @@ VOID FspAcquireFileForNtCreateSection( { FSP_ENTER_VOID(PAGED_CODE()); - FSP_LEAVE_VOID("%s", ""); + FSP_LEAVE_VOID("FileObject=%p", FileObject); } VOID FspReleaseFileForNtCreateSection( @@ -54,7 +69,7 @@ VOID FspReleaseFileForNtCreateSection( { FSP_ENTER_VOID(PAGED_CODE()); - FSP_LEAVE_VOID("%s", ""); + FSP_LEAVE_VOID("FileObject=%p", FileObject); } NTSTATUS FspAcquireForModWrite( @@ -67,7 +82,7 @@ NTSTATUS FspAcquireForModWrite( Result = STATUS_NOT_IMPLEMENTED; - FSP_LEAVE("%s", ""); + FSP_LEAVE("FileObject=%p", FileObject); } NTSTATUS FspReleaseForModWrite( @@ -79,7 +94,7 @@ NTSTATUS FspReleaseForModWrite( Result = STATUS_NOT_IMPLEMENTED; - FSP_LEAVE("%s", ""); + FSP_LEAVE("FileObject=%p", FileObject); } NTSTATUS FspAcquireForCcFlush( @@ -90,7 +105,7 @@ NTSTATUS FspAcquireForCcFlush( Result = STATUS_NOT_IMPLEMENTED; - FSP_LEAVE("%s", ""); + FSP_LEAVE("FileObject=%p", FileObject); } NTSTATUS FspReleaseForCcFlush( @@ -101,5 +116,43 @@ NTSTATUS FspReleaseForCcFlush( Result = STATUS_NOT_IMPLEMENTED; - FSP_LEAVE("%s", ""); + FSP_LEAVE("FileObject=%p", FileObject); +} + +BOOLEAN FspAcquireForLazyWrite( + PVOID Context, + BOOLEAN Wait) +{ + FSP_ENTER_BOOL(PAGED_CODE()); + + Result = FALSE; + + FSP_LEAVE_BOOL("Context=%p, Wait=%d", Context, Wait); +} + +VOID FspReleaseFromLazyWrite( + PVOID Context) +{ + FSP_ENTER_VOID(PAGED_CODE()); + + FSP_LEAVE_VOID("Context=%p", Context); +} + +BOOLEAN FspAcquireForReadAhead( + PVOID Context, + BOOLEAN Wait) +{ + FSP_ENTER_BOOL(PAGED_CODE()); + + Result = FALSE; + + FSP_LEAVE_BOOL("Context=%p, Wait=%d", Context, Wait); +} + +VOID FspReleaseFromReadAhead( + PVOID Context) +{ + FSP_ENTER_VOID(PAGED_CODE()); + + FSP_LEAVE_VOID("Context=%p", Context); } diff --git a/src/sys/driver.h b/src/sys/driver.h index abbc73f9..4f590d93 100644 --- a/src/sys/driver.h +++ b/src/sys/driver.h @@ -264,7 +264,7 @@ FSP_IOCMPL_DISPATCH FspFsvolSetVolumeInformationComplete; FSP_IOCMPL_DISPATCH FspFsvolShutdownComplete; FSP_IOCMPL_DISPATCH FspFsvolWriteComplete; -/* fast I/O and resource acquisition */ +/* fast I/O and resource acquisition callbacks */ FAST_IO_CHECK_IF_POSSIBLE FspFastIoCheckIfPossible; FAST_IO_ACQUIRE_FILE FspAcquireFileForNtCreateSection; FAST_IO_RELEASE_FILE FspReleaseFileForNtCreateSection; @@ -272,6 +272,16 @@ FAST_IO_ACQUIRE_FOR_MOD_WRITE FspAcquireForModWrite; FAST_IO_RELEASE_FOR_MOD_WRITE FspReleaseForModWrite; FAST_IO_ACQUIRE_FOR_CCFLUSH FspAcquireForCcFlush; FAST_IO_RELEASE_FOR_CCFLUSH FspReleaseForCcFlush; +BOOLEAN FspAcquireForLazyWrite( + PVOID Context, + BOOLEAN Wait); +VOID FspReleaseFromLazyWrite( + PVOID Context); +BOOLEAN FspAcquireForReadAhead( + PVOID Context, + BOOLEAN Wait); +VOID FspReleaseFromReadAhead( + PVOID Context); /* memory allocation */ #define FspAlloc(Size) ExAllocatePoolWithTag(PagedPool, Size, FSP_ALLOC_INTERNAL_TAG) diff --git a/src/sys/file.c b/src/sys/file.c index a21941e0..56070473 100644 --- a/src/sys/file.c +++ b/src/sys/file.c @@ -84,7 +84,7 @@ NTSTATUS FspFileNodeCreate(PDEVICE_OBJECT DeviceObject, RtlZeroMemory(FileNode, sizeof *FileNode + ExtraSize); FileNode->Header.NodeTypeCode = FspFileNodeFileKind; FileNode->Header.NodeByteSize = sizeof *FileNode; - FileNode->Header.IsFastIoPossible = FastIoIsQuestionable; + FileNode->Header.IsFastIoPossible = FastIoIsNotPossible; FileNode->Header.Resource = &NonPaged->Resource; FileNode->Header.PagingIoResource = &NonPaged->PagingIoResource; FileNode->Header.ValidDataLength.QuadPart = MAXLONGLONG;