mirror of
				https://github.com/winfsp/winfsp.git
				synced 2025-10-30 03:28:38 -05:00 
			
		
		
		
	sys: fast I/O and resource acquisition callbacks
This commit is contained in:
		| @@ -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; | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user