diff --git a/src/sys/create.c b/src/sys/create.c index 44ffa442..42549f12 100644 --- a/src/sys/create.c +++ b/src/sys/create.c @@ -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; diff --git a/src/sys/driver.h b/src/sys/driver.h index 3ae214df..63dcab26 100644 --- a/src/sys/driver.h +++ b/src/sys/driver.h @@ -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); }