mirror of
				https://github.com/winfsp/winfsp.git
				synced 2025-10-29 19:18:39 -05:00 
			
		
		
		
	sys: FspFileNode acquire/release
This commit is contained in:
		| @@ -374,7 +374,7 @@ NTSTATUS FspFsvolCreatePrepare( | ||||
|         FileObject = FspIopRequestContext(Request, RequestFileObject); | ||||
|  | ||||
|         /* lock the FileNode for Paging IO */ | ||||
|         Success = FspFileNodePgioLockExclusive(FileNode, FALSE); | ||||
|         Success = FspFileNodePgioTryAcquireExclusive(FileNode); | ||||
|         if (!Success) | ||||
|         { | ||||
|             /* repost the IRP to retry later */ | ||||
| @@ -392,7 +392,7 @@ NTSTATUS FspFsvolCreatePrepare( | ||||
|         Success = MmCanFileBeTruncated(&FileNode->NonPaged->SectionObjectPointers, &Zero); | ||||
|         if (!Success) | ||||
|         { | ||||
|             FspFileNodePgioUnlock(FileNode); | ||||
|             FspFileNodePgioRelease(FileNode); | ||||
|  | ||||
|             FspFsvolCreatePostClose(FileNode, (UINT_PTR)FileObject->FsContext2); | ||||
|             FspFileNodeClose(FileNode, FileObject, 0); | ||||
| @@ -612,7 +612,7 @@ VOID FspFsvolCreateComplete( | ||||
|         /* did the user-mode file system sent us a failure code? */ | ||||
|         if (!NT_SUCCESS(Response->IoStatus.Status)) | ||||
|         { | ||||
|             FspFileNodePgioUnlock(FileNode); | ||||
|             FspFileNodePgioRelease(FileNode); | ||||
|  | ||||
|             FspFileNodeClose(FileNode, FileObject, 0); | ||||
|  | ||||
| @@ -626,7 +626,7 @@ VOID FspFsvolCreateComplete( | ||||
|         FileNode->Header.FileSize.QuadPart = Response->Rsp.Overwrite.FileSize; | ||||
|         CcSetFileSizes(FileObject, (PCC_FILE_SIZES)&FileNode->Header.AllocationSize); | ||||
|  | ||||
|         FspFileNodePgioUnlock(FileNode); | ||||
|         FspFileNodePgioRelease(FileNode); | ||||
|  | ||||
|         /* SUCCESS! */ | ||||
|         FspIopRequestContext(Request, RequestFileNode) = 0; | ||||
|   | ||||
| @@ -561,32 +561,52 @@ VOID FspFileNodeDereference(FSP_FILE_NODE *FileNode) | ||||
|         FspFileNodeDelete(FileNode); | ||||
| } | ||||
| static inline | ||||
| BOOLEAN FspFileNodeLockShared(FSP_FILE_NODE *FileNode, BOOLEAN Wait) | ||||
| VOID FspFileNodeAcquireShared(FSP_FILE_NODE *FileNode) | ||||
| { | ||||
|     return ExAcquireResourceSharedLite(FileNode->Header.Resource, Wait); | ||||
|     ExAcquireResourceSharedLite(FileNode->Header.Resource, TRUE); | ||||
| } | ||||
| static inline | ||||
| BOOLEAN FspFileNodeLockExclusive(FSP_FILE_NODE *FileNode, BOOLEAN Wait) | ||||
| BOOLEAN FspFileNodeTryAcquireShared(FSP_FILE_NODE *FileNode) | ||||
| { | ||||
|     return ExAcquireResourceExclusiveLite(FileNode->Header.Resource, Wait); | ||||
|     return ExAcquireResourceSharedLite(FileNode->Header.Resource, FALSE); | ||||
| } | ||||
| static inline | ||||
| VOID FspFileNodeUnlock(FSP_FILE_NODE *FileNode) | ||||
| VOID FspFileNodeAcquireExclusive(FSP_FILE_NODE *FileNode) | ||||
| { | ||||
|     ExAcquireResourceExclusiveLite(FileNode->Header.Resource, TRUE); | ||||
| } | ||||
| static inline | ||||
| BOOLEAN FspFileNodeTryAcquireExclusive(FSP_FILE_NODE *FileNode) | ||||
| { | ||||
|     return ExAcquireResourceExclusiveLite(FileNode->Header.Resource, FALSE); | ||||
| } | ||||
| static inline | ||||
| VOID FspFileNodeRelease(FSP_FILE_NODE *FileNode) | ||||
| { | ||||
|     ExReleaseResourceLite(FileNode->Header.Resource); | ||||
| } | ||||
| static inline | ||||
| BOOLEAN FspFileNodePgioLockShared(FSP_FILE_NODE *FileNode, BOOLEAN Wait) | ||||
| VOID FspFileNodePgioAcquireShared(FSP_FILE_NODE *FileNode) | ||||
| { | ||||
|     return ExAcquireResourceSharedLite(FileNode->Header.PagingIoResource, Wait); | ||||
|     ExAcquireResourceSharedLite(FileNode->Header.PagingIoResource, TRUE); | ||||
| } | ||||
| static inline | ||||
| BOOLEAN FspFileNodePgioLockExclusive(FSP_FILE_NODE *FileNode, BOOLEAN Wait) | ||||
| BOOLEAN FspFileNodePgioTryAcquireShared(FSP_FILE_NODE *FileNode) | ||||
| { | ||||
|     return ExAcquireResourceExclusiveLite(FileNode->Header.PagingIoResource, Wait); | ||||
|     return ExAcquireResourceSharedLite(FileNode->Header.PagingIoResource, FALSE); | ||||
| } | ||||
| static inline | ||||
| VOID FspFileNodePgioUnlock(FSP_FILE_NODE *FileNode) | ||||
| VOID FspFileNodePgioAcquireExclusive(FSP_FILE_NODE *FileNode) | ||||
| { | ||||
|     ExAcquireResourceExclusiveLite(FileNode->Header.PagingIoResource, TRUE); | ||||
| } | ||||
| static inline | ||||
| BOOLEAN FspFileNodePgioTryAcquireExclusive(FSP_FILE_NODE *FileNode) | ||||
| { | ||||
|     return ExAcquireResourceExclusiveLite(FileNode->Header.PagingIoResource, FALSE); | ||||
| } | ||||
| static inline | ||||
| VOID FspFileNodePgioRelease(FSP_FILE_NODE *FileNode) | ||||
| { | ||||
|     ExReleaseResourceLite(FileNode->Header.PagingIoResource); | ||||
| } | ||||
|   | ||||
		Reference in New Issue
	
	Block a user