/*++ Copyright (c) 1989 Microsoft Corporation Module Name: ResrcSup.c Abstract: This module implements the NamedPipe Resource acquisition routines Author: Gary Kimura [GaryKi] 22-Mar-1990 Revision History: --*/ #include "NpProcs.h" // // The debug trace level // #define Dbg (DEBUG_TRACE_RESRCSUP) #ifdef ALLOC_PRAGMA #pragma alloc_text(PAGE, NpAcquireExclusiveCcb) #pragma alloc_text(PAGE, NpAcquireExclusiveVcb) #pragma alloc_text(PAGE, NpAcquireSharedCcb) #pragma alloc_text(PAGE, NpAcquireSharedVcb) #pragma alloc_text(PAGE, NpReleaseCcb) #pragma alloc_text(PAGE, NpReleaseVcb) #endif VOID NpAcquireExclusiveVcb ( ) /*++ Routine Description: This routine acquires exclusive access to the Vcb Arguments: Return Value: None. --*/ { PAGED_CODE(); DebugTrace(+1, Dbg, "NpAcquireExclusiveVcb\n", 0); ExAcquireResourceExclusive( &(NpVcb->Resource), TRUE ); DebugTrace(-1, Dbg, "NpAcquireExclusiveVcb -> (VOID)\n", 0); return; } VOID NpAcquireSharedVcb ( ) /*++ Routine Description: This routine acquires shared access to the Vcb Arguments: Return Value: None. --*/ { PAGED_CODE(); DebugTrace(+1, Dbg, "NpAcquireSharedVcb\n", 0); ExAcquireResourceShared( &(NpVcb->Resource), TRUE ); DebugTrace(-1, Dbg, "NpAcquireSharedVcb -> (VOID)\n", 0); return; } VOID NpAcquireExclusiveCcb ( IN PNONPAGED_CCB NonpagedCcb ) /*++ Routine Description: This routine acquires exclusive access to the Ccb by first getting shared access to the Fcb. Arguments: NonpagedCcb - Supplies the Ccb to acquire Return Value: None. --*/ { PAGED_CODE(); DebugTrace(+1, Dbg, "NpAcquireExclusiveCcb, NonpagedCcb = %08lx\n", NonpagedCcb); (VOID)ExAcquireResourceShared( &(NpVcb->Resource), TRUE ); (VOID)ExAcquireResourceExclusive( &(NonpagedCcb->Resource), TRUE ); DebugTrace(-1, Dbg, "NpAcquireExclusiveCcb -> (VOID)\n", 0); return; } VOID NpAcquireSharedCcb ( IN PNONPAGED_CCB NonpagedCcb ) /*++ Routine Description: This routine acquires shared access to the Ccb by first getting shared access to the Fcb. Arguments: NonpagedCcb - Supplies the Ccb to acquire Return Value: None. --*/ { PAGED_CODE(); DebugTrace(+1, Dbg, "NpAcquireSharedCcb, NonpagedCcb = %08lx\n", NonpagedCcb); (VOID)ExAcquireResourceShared( &(NpVcb->Resource), TRUE ); (VOID)ExAcquireResourceShared( &(NonpagedCcb->Resource), TRUE ); DebugTrace(-1, Dbg, "NpAcquireSharedCcb -> (VOID)\n", 0); return; } VOID NpReleaseVcb ( ) /*++ Routine Description: This routine releases access to the Vcb Arguments: Return Value: None. --*/ { PAGED_CODE(); DebugTrace(0, Dbg, "NpReleaseVcb\n", 0); ExReleaseResource( &(NpVcb->Resource) ); return; } VOID NpReleaseCcb ( IN PNONPAGED_CCB NonpagedCcb ) /*++ Routine Description: This routine releases access to the Ccb Arguments: Ccb - Supplies the Ccb being released Return Value: None. --*/ { PAGED_CODE(); DebugTrace(0, Dbg, "NpReleaseCcb, NonpagedCcb = %08lx\n", NonpagedCcb); ExReleaseResource( &(NonpagedCcb->Resource) ); ExReleaseResource( &(NpVcb->Resource) ); return; }