sys: fast I/O and resource acquisition callbacks

This commit is contained in:
Bill Zissimopoulos 2016-02-23 22:39:15 -08:00
parent f87eeb9db5
commit e040c4d3cf
5 changed files with 77 additions and 14 deletions

View File

@ -155,7 +155,7 @@
<ClCompile Include="..\..\src\sys\dirctl.c" />
<ClCompile Include="..\..\src\sys\driver.c" />
<ClCompile Include="..\..\src\sys\ea.c" />
<ClCompile Include="..\..\src\sys\fastio.c" />
<ClCompile Include="..\..\src\sys\callbacks.c" />
<ClCompile Include="..\..\src\sys\file.c" />
<ClCompile Include="..\..\src\sys\fileinfo.c" />
<ClCompile Include="..\..\src\sys\flush.c" />

View File

@ -71,9 +71,6 @@
<ClCompile Include="..\..\src\sys\write.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\src\sys\fastio.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\src\sys\fsctl.c">
<Filter>Source</Filter>
</ClCompile>
@ -92,6 +89,9 @@
<ClCompile Include="..\..\src\sys\wq.c">
<Filter>Source</Filter>
</ClCompile>
<ClCompile Include="..\..\src\sys\callbacks.c">
<Filter>Source</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\src\sys\driver.h">

View File

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

View File

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

View File

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