summaryrefslogblamecommitdiffstats
path: root/private/ntos/npfs/npdata.c
blob: 7836dea377aa8a276501d84dbfde64a4bb6b4f4f (plain) (tree)




















































































































                                                                                                                
/*++

Copyright (c) 1989  Microsoft Corporation

Module Name:

    NpData.c

Abstract:

    This module declares the global data used by the Named Pipe file system.

Author:

    Gary Kimura     [GaryKi]    28-Dec-1989

Revision History:

--*/

#include "NpProcs.h"

//
//  The Bug check file id for this module
//

#define BugCheckFileId                   (NPFS_BUG_CHECK_NPDATA)

//
//  Local debug trace level
//

#define Dbg                              (DEBUG_TRACE_CATCH_EXCEPTIONS)

#ifdef ALLOC_PRAGMA
#pragma alloc_text(PAGE, NpExceptionFilter)
#pragma alloc_text(PAGE, NpProcessException)
#endif

PVCB NpVcb = NULL;

FAST_IO_DISPATCH NpFastIoDispatch = { sizeof(FAST_IO_DISPATCH),
                                      NULL,         //  FastIoCheck
                                      NpFastRead,   //  Read
                                      NpFastWrite,  //  Write
                                      NULL,         //  QueryBasicInfo
                                      NULL,         //  QueryStandardInfo
                                      NULL,         //  Lock
                                      NULL,         //  UnlockSingle
                                      NULL,         //  UnlockAll
                                      NULL };       //  UnlockAllByKey

//
//  Lists of pipe name aliases.
//

SINGLE_LIST_ENTRY NpAliasListByLength[(MAX_LENGTH_ALIAS_ARRAY-MIN_LENGTH_ALIAS_ARRAY)/sizeof(WCHAR)+1] = {NULL};
SINGLE_LIST_ENTRY NpAliasList = {NULL};

PVOID NpAliases = NULL; // single allocation containing all aliases


#ifdef NPDBG
LONG NpDebugTraceLevel = 0x00000000;
LONG NpDebugTraceIndent = 0;
#endif // NPDBG


LONG
NpExceptionFilter (
    IN NTSTATUS ExceptionCode
    )
{
    PAGED_CODE();

    DebugTrace(0, Dbg, "NpExceptionFilter %08lx\n", ExceptionCode);
    DebugDump("", Dbg, NULL );

    if (FsRtlIsNtstatusExpected( ExceptionCode )) {

        return EXCEPTION_EXECUTE_HANDLER;

    } else {

        return EXCEPTION_CONTINUE_SEARCH;
    }
}

NTSTATUS
NpProcessException (
    IN PNPFS_DEVICE_OBJECT NpfsDeviceObject,
    IN PIRP Irp,
    IN NTSTATUS ExceptionCode
    )
{
    NTSTATUS FinalExceptionCode;

    PAGED_CODE();

    FinalExceptionCode = ExceptionCode;

    if (FsRtlIsNtstatusExpected( ExceptionCode )) {

        if ( FlagOn(Irp->Flags, IRP_INPUT_OPERATION) ) {

            Irp->IoStatus.Information = 0;
        }

        NpCompleteRequest( Irp, ExceptionCode );

    } else {

        NpBugCheck( ExceptionCode, 0, 0 );
    }

    return FinalExceptionCode;
}