mirror of
https://github.com/winfsp/winfsp.git
synced 2025-06-08 04:52:10 -05:00
sys: fast I/O and resource acquisition callbacks
This commit is contained in:
parent
f87eeb9db5
commit
e040c4d3cf
@ -155,7 +155,7 @@
|
|||||||
<ClCompile Include="..\..\src\sys\dirctl.c" />
|
<ClCompile Include="..\..\src\sys\dirctl.c" />
|
||||||
<ClCompile Include="..\..\src\sys\driver.c" />
|
<ClCompile Include="..\..\src\sys\driver.c" />
|
||||||
<ClCompile Include="..\..\src\sys\ea.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\file.c" />
|
||||||
<ClCompile Include="..\..\src\sys\fileinfo.c" />
|
<ClCompile Include="..\..\src\sys\fileinfo.c" />
|
||||||
<ClCompile Include="..\..\src\sys\flush.c" />
|
<ClCompile Include="..\..\src\sys\flush.c" />
|
||||||
|
@ -71,9 +71,6 @@
|
|||||||
<ClCompile Include="..\..\src\sys\write.c">
|
<ClCompile Include="..\..\src\sys\write.c">
|
||||||
<Filter>Source</Filter>
|
<Filter>Source</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
<ClCompile Include="..\..\src\sys\fastio.c">
|
|
||||||
<Filter>Source</Filter>
|
|
||||||
</ClCompile>
|
|
||||||
<ClCompile Include="..\..\src\sys\fsctl.c">
|
<ClCompile Include="..\..\src\sys\fsctl.c">
|
||||||
<Filter>Source</Filter>
|
<Filter>Source</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
@ -92,6 +89,9 @@
|
|||||||
<ClCompile Include="..\..\src\sys\wq.c">
|
<ClCompile Include="..\..\src\sys\wq.c">
|
||||||
<Filter>Source</Filter>
|
<Filter>Source</Filter>
|
||||||
</ClCompile>
|
</ClCompile>
|
||||||
|
<ClCompile Include="..\..\src\sys\callbacks.c">
|
||||||
|
<Filter>Source</Filter>
|
||||||
|
</ClCompile>
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<ClInclude Include="..\..\src\sys\driver.h">
|
<ClInclude Include="..\..\src\sys\driver.h">
|
||||||
|
@ -1,5 +1,6 @@
|
|||||||
/**
|
/**
|
||||||
* @file sys/fastio.c
|
* @file sys/callbacks.c
|
||||||
|
* Fast I/O and resource acquisition callbacks.
|
||||||
*
|
*
|
||||||
* @copyright 2015 Bill Zissimopoulos
|
* @copyright 2015 Bill Zissimopoulos
|
||||||
*/
|
*/
|
||||||
@ -13,6 +14,16 @@ FAST_IO_ACQUIRE_FOR_MOD_WRITE FspAcquireForModWrite;
|
|||||||
FAST_IO_RELEASE_FOR_MOD_WRITE FspReleaseForModWrite;
|
FAST_IO_RELEASE_FOR_MOD_WRITE FspReleaseForModWrite;
|
||||||
FAST_IO_ACQUIRE_FOR_CCFLUSH FspAcquireForCcFlush;
|
FAST_IO_ACQUIRE_FOR_CCFLUSH FspAcquireForCcFlush;
|
||||||
FAST_IO_RELEASE_FOR_CCFLUSH FspReleaseForCcFlush;
|
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
|
#ifdef ALLOC_PRAGMA
|
||||||
#pragma alloc_text(PAGE, FspFastIoCheckIfPossible)
|
#pragma alloc_text(PAGE, FspFastIoCheckIfPossible)
|
||||||
@ -22,6 +33,10 @@ FAST_IO_RELEASE_FOR_CCFLUSH FspReleaseForCcFlush;
|
|||||||
#pragma alloc_text(PAGE, FspReleaseForModWrite)
|
#pragma alloc_text(PAGE, FspReleaseForModWrite)
|
||||||
#pragma alloc_text(PAGE, FspAcquireForCcFlush)
|
#pragma alloc_text(PAGE, FspAcquireForCcFlush)
|
||||||
#pragma alloc_text(PAGE, FspReleaseForCcFlush)
|
#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
|
#endif
|
||||||
|
|
||||||
BOOLEAN FspFastIoCheckIfPossible(
|
BOOLEAN FspFastIoCheckIfPossible(
|
||||||
@ -38,7 +53,7 @@ BOOLEAN FspFastIoCheckIfPossible(
|
|||||||
|
|
||||||
Result = FALSE;
|
Result = FALSE;
|
||||||
|
|
||||||
FSP_LEAVE_BOOL("%s", "");
|
FSP_LEAVE_BOOL("FileObject=%p", FileObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID FspAcquireFileForNtCreateSection(
|
VOID FspAcquireFileForNtCreateSection(
|
||||||
@ -46,7 +61,7 @@ VOID FspAcquireFileForNtCreateSection(
|
|||||||
{
|
{
|
||||||
FSP_ENTER_VOID(PAGED_CODE());
|
FSP_ENTER_VOID(PAGED_CODE());
|
||||||
|
|
||||||
FSP_LEAVE_VOID("%s", "");
|
FSP_LEAVE_VOID("FileObject=%p", FileObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
VOID FspReleaseFileForNtCreateSection(
|
VOID FspReleaseFileForNtCreateSection(
|
||||||
@ -54,7 +69,7 @@ VOID FspReleaseFileForNtCreateSection(
|
|||||||
{
|
{
|
||||||
FSP_ENTER_VOID(PAGED_CODE());
|
FSP_ENTER_VOID(PAGED_CODE());
|
||||||
|
|
||||||
FSP_LEAVE_VOID("%s", "");
|
FSP_LEAVE_VOID("FileObject=%p", FileObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS FspAcquireForModWrite(
|
NTSTATUS FspAcquireForModWrite(
|
||||||
@ -67,7 +82,7 @@ NTSTATUS FspAcquireForModWrite(
|
|||||||
|
|
||||||
Result = STATUS_NOT_IMPLEMENTED;
|
Result = STATUS_NOT_IMPLEMENTED;
|
||||||
|
|
||||||
FSP_LEAVE("%s", "");
|
FSP_LEAVE("FileObject=%p", FileObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS FspReleaseForModWrite(
|
NTSTATUS FspReleaseForModWrite(
|
||||||
@ -79,7 +94,7 @@ NTSTATUS FspReleaseForModWrite(
|
|||||||
|
|
||||||
Result = STATUS_NOT_IMPLEMENTED;
|
Result = STATUS_NOT_IMPLEMENTED;
|
||||||
|
|
||||||
FSP_LEAVE("%s", "");
|
FSP_LEAVE("FileObject=%p", FileObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS FspAcquireForCcFlush(
|
NTSTATUS FspAcquireForCcFlush(
|
||||||
@ -90,7 +105,7 @@ NTSTATUS FspAcquireForCcFlush(
|
|||||||
|
|
||||||
Result = STATUS_NOT_IMPLEMENTED;
|
Result = STATUS_NOT_IMPLEMENTED;
|
||||||
|
|
||||||
FSP_LEAVE("%s", "");
|
FSP_LEAVE("FileObject=%p", FileObject);
|
||||||
}
|
}
|
||||||
|
|
||||||
NTSTATUS FspReleaseForCcFlush(
|
NTSTATUS FspReleaseForCcFlush(
|
||||||
@ -101,5 +116,43 @@ NTSTATUS FspReleaseForCcFlush(
|
|||||||
|
|
||||||
Result = STATUS_NOT_IMPLEMENTED;
|
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);
|
||||||
}
|
}
|
@ -264,7 +264,7 @@ FSP_IOCMPL_DISPATCH FspFsvolSetVolumeInformationComplete;
|
|||||||
FSP_IOCMPL_DISPATCH FspFsvolShutdownComplete;
|
FSP_IOCMPL_DISPATCH FspFsvolShutdownComplete;
|
||||||
FSP_IOCMPL_DISPATCH FspFsvolWriteComplete;
|
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_CHECK_IF_POSSIBLE FspFastIoCheckIfPossible;
|
||||||
FAST_IO_ACQUIRE_FILE FspAcquireFileForNtCreateSection;
|
FAST_IO_ACQUIRE_FILE FspAcquireFileForNtCreateSection;
|
||||||
FAST_IO_RELEASE_FILE FspReleaseFileForNtCreateSection;
|
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_RELEASE_FOR_MOD_WRITE FspReleaseForModWrite;
|
||||||
FAST_IO_ACQUIRE_FOR_CCFLUSH FspAcquireForCcFlush;
|
FAST_IO_ACQUIRE_FOR_CCFLUSH FspAcquireForCcFlush;
|
||||||
FAST_IO_RELEASE_FOR_CCFLUSH FspReleaseForCcFlush;
|
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 */
|
/* memory allocation */
|
||||||
#define FspAlloc(Size) ExAllocatePoolWithTag(PagedPool, Size, FSP_ALLOC_INTERNAL_TAG)
|
#define FspAlloc(Size) ExAllocatePoolWithTag(PagedPool, Size, FSP_ALLOC_INTERNAL_TAG)
|
||||||
|
@ -84,7 +84,7 @@ NTSTATUS FspFileNodeCreate(PDEVICE_OBJECT DeviceObject,
|
|||||||
RtlZeroMemory(FileNode, sizeof *FileNode + ExtraSize);
|
RtlZeroMemory(FileNode, sizeof *FileNode + ExtraSize);
|
||||||
FileNode->Header.NodeTypeCode = FspFileNodeFileKind;
|
FileNode->Header.NodeTypeCode = FspFileNodeFileKind;
|
||||||
FileNode->Header.NodeByteSize = sizeof *FileNode;
|
FileNode->Header.NodeByteSize = sizeof *FileNode;
|
||||||
FileNode->Header.IsFastIoPossible = FastIoIsQuestionable;
|
FileNode->Header.IsFastIoPossible = FastIoIsNotPossible;
|
||||||
FileNode->Header.Resource = &NonPaged->Resource;
|
FileNode->Header.Resource = &NonPaged->Resource;
|
||||||
FileNode->Header.PagingIoResource = &NonPaged->PagingIoResource;
|
FileNode->Header.PagingIoResource = &NonPaged->PagingIoResource;
|
||||||
FileNode->Header.ValidDataLength.QuadPart = MAXLONGLONG;
|
FileNode->Header.ValidDataLength.QuadPart = MAXLONGLONG;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user