176 lines
3.3 KiB
C
176 lines
3.3 KiB
C
|
/*++
|
|||
|
|
|||
|
Copyright (c) 1993 Microsoft Corporation
|
|||
|
|
|||
|
Module Name:
|
|||
|
|
|||
|
filobsup.c
|
|||
|
|
|||
|
Abstract:
|
|||
|
|
|||
|
This module implements the Netware Redirector object support routines.
|
|||
|
|
|||
|
Author:
|
|||
|
|
|||
|
Manny Weiser (mannyw) 10-Feb-1993
|
|||
|
|
|||
|
Revision History:
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
#include "procs.h"
|
|||
|
|
|||
|
//
|
|||
|
// The debug trace level
|
|||
|
//
|
|||
|
|
|||
|
#define Dbg (DEBUG_TRACE_FILOBSUP)
|
|||
|
|
|||
|
#ifdef ALLOC_PRAGMA
|
|||
|
#pragma alloc_text( PAGE, NwSetFileObject )
|
|||
|
#pragma alloc_text( PAGE, NwDecodeFileObject )
|
|||
|
#endif
|
|||
|
|
|||
|
|
|||
|
VOID
|
|||
|
NwSetFileObject (
|
|||
|
IN PFILE_OBJECT FileObject OPTIONAL,
|
|||
|
IN PVOID FsContext,
|
|||
|
IN PVOID FsContext2
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
This routine sets the file system pointers within the file object.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
FileObject - Supplies a pointer to the file object being modified, and
|
|||
|
can optionally be null.
|
|||
|
|
|||
|
FsContext - Supplies a pointer to either an icb, fcb, vcb, or dcb
|
|||
|
structure.
|
|||
|
|
|||
|
FsContext2 - Supplies a pointer to a icb, or is null.
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
PAGED_CODE();
|
|||
|
|
|||
|
DebugTrace(+1, Dbg, "NwSetFileObject, FileObject = %08lx\n", (ULONG_PTR)FileObject );
|
|||
|
|
|||
|
//
|
|||
|
// Set the fscontext fields of the file object.
|
|||
|
//
|
|||
|
|
|||
|
FileObject->FsContext = FsContext;
|
|||
|
FileObject->FsContext2 = FsContext2;
|
|||
|
|
|||
|
DebugTrace(-1, Dbg, "NwSetFileObject -> VOID\n", 0);
|
|||
|
|
|||
|
return;
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
NODE_TYPE_CODE
|
|||
|
NwDecodeFileObject (
|
|||
|
IN PFILE_OBJECT FileObject,
|
|||
|
OUT PVOID *FsContext,
|
|||
|
OUT PVOID *FsContext2
|
|||
|
)
|
|||
|
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
This procedure takes a pointer to a file object, that has already been
|
|||
|
opened by the mailslot file system and figures out what it really
|
|||
|
is opened.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
FileObject - Supplies the file object pointer being interrogated
|
|||
|
|
|||
|
FsContext - Receives a pointer to the FsContext pointer
|
|||
|
FsContext2 - Receives a pointer to the FsContext2 pointer
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
NODE_TYPE_CODE - Returns the node type code for a Rcb, Scb, Dcb, Icb,
|
|||
|
or zero.
|
|||
|
|
|||
|
Rcb - indicates that file object opens the netware redirector device.
|
|||
|
|
|||
|
Scb - indicates that file object is for a server.
|
|||
|
|
|||
|
Dcb - indicates that the file object is for a directory.
|
|||
|
|
|||
|
Icb - indicates that the file object is for a file.
|
|||
|
|
|||
|
Zero - indicates that the file object was for a netware file
|
|||
|
but has been closed.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
NODE_TYPE_CODE NodeTypeCode = NTC_UNDEFINED;
|
|||
|
|
|||
|
PAGED_CODE();
|
|||
|
|
|||
|
DebugTrace(+1, Dbg, "NwDecodeFileObject, FileObject = %08lx\n", (ULONG_PTR)FileObject);
|
|||
|
|
|||
|
//
|
|||
|
// Read the fs FsContext fields of the file object.
|
|||
|
//
|
|||
|
|
|||
|
*FsContext = FileObject->FsContext;
|
|||
|
*FsContext2 = FileObject->FsContext2;
|
|||
|
|
|||
|
ASSERT ( *FsContext2 != NULL );
|
|||
|
NodeTypeCode = NodeType( *FsContext2 );
|
|||
|
|
|||
|
DebugTrace(-1, Dbg, "NwDecodeFileObject -> %08lx\n", NodeTypeCode);
|
|||
|
return NodeTypeCode;
|
|||
|
}
|
|||
|
|
|||
|
BOOLEAN
|
|||
|
NwIsIrpTopLevel (
|
|||
|
IN PIRP Irp
|
|||
|
)
|
|||
|
/*++
|
|||
|
|
|||
|
Routine Description:
|
|||
|
|
|||
|
This routine detects if an Irp is the Top level requestor, ie. if it is OK
|
|||
|
to do a verify or pop-up now. If TRUE is returned, then no file system
|
|||
|
resources are held above us.
|
|||
|
|
|||
|
Arguments:
|
|||
|
|
|||
|
Irp - Supplies the Irp being processed
|
|||
|
|
|||
|
Status - Supplies the status to complete the Irp with
|
|||
|
|
|||
|
Return Value:
|
|||
|
|
|||
|
None.
|
|||
|
|
|||
|
--*/
|
|||
|
|
|||
|
{
|
|||
|
if ( NwGetTopLevelIrp() == NULL ) {
|
|||
|
NwSetTopLevelIrp( Irp );
|
|||
|
return TRUE;
|
|||
|
} else {
|
|||
|
return FALSE;
|
|||
|
}
|
|||
|
}
|
|||
|
|