diff --git a/src/sys/driver.h b/src/sys/driver.h index b6c2ad30..dc1362b0 100644 --- a/src/sys/driver.h +++ b/src/sys/driver.h @@ -1398,6 +1398,18 @@ VOID FspFsvolDeviceGetVolumeInfo(PDEVICE_OBJECT DeviceObject, FSP_FSCTL_VOLUME_I BOOLEAN FspFsvolDeviceTryGetVolumeInfo(PDEVICE_OBJECT DeviceObject, FSP_FSCTL_VOLUME_INFO *VolumeInfo); VOID FspFsvolDeviceSetVolumeInfo(PDEVICE_OBJECT DeviceObject, const FSP_FSCTL_VOLUME_INFO *VolumeInfo); VOID FspFsvolDeviceInvalidateVolumeInfo(PDEVICE_OBJECT DeviceObject); +static inline +VOID FspFsvolDeviceLockVolumeNotify(PDEVICE_OBJECT DeviceObject) +{ + FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(DeviceObject); + ExAcquireFastMutexUnsafe(&FsvolDeviceExtension->VolumeNotifyMutex); +} +static inline +VOID FspFsvolDeviceUnlockVolumeNotify(PDEVICE_OBJECT DeviceObject) +{ + FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(DeviceObject); + ExReleaseFastMutexUnsafe(&FsvolDeviceExtension->VolumeNotifyMutex); +} #if defined(FSP_CFG_REJECT_EARLY_IRP) static inline BOOLEAN FspFsvolDeviceReadyToAcceptIrp(PDEVICE_OBJECT DeviceObject) diff --git a/src/sys/volume.c b/src/sys/volume.c index 5847d779..de0f8668 100644 --- a/src/sys/volume.c +++ b/src/sys/volume.c @@ -490,12 +490,12 @@ static VOID FspVolumeDeleteNoLock( FspMupUnregister(Globals->FsmupDeviceObject, FsvolDeviceObject); } - ExAcquireFastMutex(&FsvolDeviceExtension->VolumeNotifyMutex); + FspFsvolDeviceLockVolumeNotify(FsvolDeviceObject); if (1 <= FsvolDeviceExtension->VolumeNotifyCount) FspFsvolDeviceFileRenameReleaseOwner(FsvolDeviceObject, &FsvolDeviceExtension->VolumeNotifyCount); FsvolDeviceExtension->VolumeNotifyCount = -1; - ExReleaseFastMutex(&FsvolDeviceExtension->VolumeNotifyMutex); + FspFsvolDeviceUnlockVolumeNotify(FsvolDeviceObject); /* release the volume device object */ FspDeviceDereference(FsvolDeviceObject); @@ -1257,7 +1257,7 @@ static NTSTATUS FspVolumeNotifyLock( FSP_FSVOL_DEVICE_EXTENSION *FsvolDeviceExtension = FspFsvolDeviceExtension(FsvolDeviceObject); NTSTATUS Result = STATUS_SUCCESS; - ExAcquireFastMutex(&FsvolDeviceExtension->VolumeNotifyMutex); + FspFsvolDeviceLockVolumeNotify(FsvolDeviceObject); if (0 == FsvolDeviceExtension->VolumeNotifyCount) { if (FspFsvolDeviceFileRenameTryAcquireShared(FsvolDeviceObject)) @@ -1271,7 +1271,7 @@ static NTSTATUS FspVolumeNotifyLock( } else if (0 < FsvolDeviceExtension->VolumeNotifyCount) FsvolDeviceExtension->VolumeNotifyCount++; - ExReleaseFastMutex(&FsvolDeviceExtension->VolumeNotifyMutex); + FspFsvolDeviceUnlockVolumeNotify(FsvolDeviceObject); FspDeviceDereference(FsvolDeviceObject); @@ -1369,7 +1369,7 @@ static VOID FspVolumeNotifyWork(PVOID NotifyWorkItem0) if (Unlock) { - ExAcquireFastMutex(&FsvolDeviceExtension->VolumeNotifyMutex); + FspFsvolDeviceLockVolumeNotify(FsvolDeviceObject); if (1 == FsvolDeviceExtension->VolumeNotifyCount) { FspFsvolDeviceFileRenameReleaseOwner(FsvolDeviceObject, @@ -1378,7 +1378,7 @@ static VOID FspVolumeNotifyWork(PVOID NotifyWorkItem0) } else if (1 < FsvolDeviceExtension->VolumeNotifyCount) FsvolDeviceExtension->VolumeNotifyCount--; - ExReleaseFastMutex(&FsvolDeviceExtension->VolumeNotifyMutex); + FspFsvolDeviceUnlockVolumeNotify(FsvolDeviceObject); } FspFsvolDeviceVolumeDeleteReleaseOwner(FsvolDeviceObject, NotifyWorkItem);