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;