2020-09-30 17:17:25 +02:00

142 lines
2.1 KiB
C

/*++
Copyright (c) 2000-2001 Microsoft Corporation
Module Name:
synch.c
Abstract:
This module implements routines which provide synchronization to the file
system.
--*/
#include "rawx.h"
//
// All file system access is guarded by this single global lock.
//
INITIALIZED_CRITICAL_SECTION(RawxGlobalMutex);
VOID
RawxAcquireGlobalMutexExclusive(
VOID
)
/*++
Routine Description:
This routine acquires the file system's global lock.
Arguments:
None.
Return Value:
None.
--*/
{
KeEnterCriticalRegion();
RtlEnterCriticalSection(&RawxGlobalMutex);
}
VOID
RawxReleaseGlobalMutex(
VOID
)
/*++
Routine Description:
This routine releases the file system's global lock.
Arguments:
None.
Return Value:
None.
--*/
{
RtlLeaveCriticalSection(&RawxGlobalMutex);
KeLeaveCriticalRegion();
}
VOID
RawxAcquireVolumeMutexExclusive(
IN PRAW_VOLUME_EXTENSION VolumeExtension
)
/*++
Routine Description:
This routine acquires the volume's lock for exclusive access.
Arguments:
VolumeExtension - Specifies the volume to lock.
Return Value:
None.
--*/
{
KeEnterCriticalRegion();
ExAcquireReadWriteLockExclusive(&VolumeExtension->VolumeMutex);
}
VOID
RawxAcquireVolumeMutexShared(
IN PRAW_VOLUME_EXTENSION VolumeExtension
)
/*++
Routine Description:
This routine acquires the volume's lock for shared access.
Arguments:
VolumeExtension - Specifies the volume to lock.
Return Value:
None.
--*/
{
KeEnterCriticalRegion();
ExAcquireReadWriteLockShared(&VolumeExtension->VolumeMutex);
}
VOID
RawxReleaseVolumeMutex(
IN PRAW_VOLUME_EXTENSION VolumeExtension
)
/*++
Routine Description:
This routine releases the volume's lock.
Arguments:
VolumeExtension - Specifies the volume to unlock.
Return Value:
None.
--*/
{
ExReleaseReadWriteLock(&VolumeExtension->VolumeMutex);
KeLeaveCriticalRegion();
}