WindowsXP-SP1/ds/nw/rdr/filobsup.c
2020-09-30 16:53:49 +02:00

176 lines
3.5 KiB
C
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*++
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;
}
}