From e611b132f9b8abe35b362e5870b74bce94a1e58e Mon Sep 17 00:00:00 2001 From: Adam Date: Sat, 16 May 2020 20:51:50 -0700 Subject: initial commit --- private/ntos/raw/cleanup.c | 80 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 private/ntos/raw/cleanup.c (limited to 'private/ntos/raw/cleanup.c') diff --git a/private/ntos/raw/cleanup.c b/private/ntos/raw/cleanup.c new file mode 100644 index 000000000..191beb48d --- /dev/null +++ b/private/ntos/raw/cleanup.c @@ -0,0 +1,80 @@ +/*++ + +Copyright (c) 1989 Microsoft Corporation + +Module Name: + + Cleanup.c + +Abstract: + + This module implements the File Cleanup routine for Raw called by the + dispatch driver. + +Author: + + David Goebel [DavidGoe] 18-Mar-91 + +Revision History: + +--*/ + +#include "RawProcs.h" + +#ifdef ALLOC_PRAGMA +#pragma alloc_text(PAGE, RawCleanup) +#endif + + +NTSTATUS +RawCleanup ( + IN PVCB Vcb, + IN PIRP Irp, + IN PIO_STACK_LOCATION IrpSp + ) + +/*++ + +Routine Description: + + This is the routine for cleaning up a handle. + +Arguments: + + Vcb - Supplies the volume being queried. + + Irp - Supplies the Irp being processed. + + IrpSp - Supplies parameters describing the read + +Return Value: + + NTSTATUS - The return status for the operation + +--*/ + +{ + NTSTATUS Status; + + PAGED_CODE(); + + // + // This is a Cleanup operation. All we have to do is deal with + // share access. + // + + Status = KeWaitForSingleObject( &Vcb->Mutex, + Executive, + KernelMode, + FALSE, + (PLARGE_INTEGER) NULL ); + ASSERT( NT_SUCCESS( Status ) ); + + IoRemoveShareAccess( IrpSp->FileObject, &Vcb->ShareAccess ); + + (VOID)KeReleaseMutex( &Vcb->Mutex, FALSE ); + + RawCompleteRequest( Irp, STATUS_SUCCESS ); + + return STATUS_SUCCESS; +} -- cgit v1.2.3