175 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			175 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
 | 
						||
/*++
 | 
						||
 | 
						||
Copyright (c) 1989  Microsoft Corporation
 | 
						||
 | 
						||
Module Name:
 | 
						||
 | 
						||
    Init.c
 | 
						||
 | 
						||
Abstract:
 | 
						||
 | 
						||
    This module implements the DRIVER_INITIALIZATION routine for the Nt Local Minirdr.
 | 
						||
 | 
						||
Author:
 | 
						||
 | 
						||
    Joe Linn [JoeLinn]    2-2-95
 | 
						||
 | 
						||
Revision History:
 | 
						||
 | 
						||
 | 
						||
--*/
 | 
						||
 | 
						||
#include "precomp.h"
 | 
						||
#pragma hdrstop
 | 
						||
#include "NtDdNfs2.h"
 | 
						||
 | 
						||
RXSTATUS
 | 
						||
DriverEntry(
 | 
						||
    IN PDRIVER_OBJECT DriverObject,
 | 
						||
    IN PUNICODE_STRING RegistryPath
 | 
						||
    );
 | 
						||
 | 
						||
VOID
 | 
						||
MRxLocalUnload(
 | 
						||
    IN PDRIVER_OBJECT DriverObject
 | 
						||
    );
 | 
						||
 | 
						||
 | 
						||
#ifdef ALLOC_PRAGMA
 | 
						||
#pragma alloc_text(INIT, DriverEntry)
 | 
						||
#pragma alloc_text(PAGE, MRxLocalUnload)
 | 
						||
#endif
 | 
						||
 | 
						||
 | 
						||
PDEVICE_OBJECT MRxLocalDeviceObject;
 | 
						||
 | 
						||
struct _MINIRDR_DISPATCH  MRxLocalDispatch;
 | 
						||
PRDBSS_EXPORTS ___MINIRDR_IMPORTS_NAME;
 | 
						||
 | 
						||
//declare the shadow debugtrace controlpoints
 | 
						||
 | 
						||
RXDT_DefineCategory(CREATE);
 | 
						||
RXDT_DefineCategory(CLEANUP);
 | 
						||
RXDT_DefineCategory(READ);
 | 
						||
RXDT_DefineCategory(WRITE);
 | 
						||
RXDT_DefineCategory(LOCKCTRL);
 | 
						||
RXDT_DefineCategory(DIRCTRL);
 | 
						||
RXDT_DefineCategory(FILEINFO);
 | 
						||
RXDT_DefineCategory(VOLINFO);
 | 
						||
RXDT_DefineCategory(FLUSH);
 | 
						||
RXDT_DefineCategory(PREFIX);
 | 
						||
RXDT_DefineCategory(FCBSTRUCTS);
 | 
						||
RXDT_DefineCategory(DISPATCH);
 | 
						||
 | 
						||
 | 
						||
RXSTATUS
 | 
						||
DriverEntry(
 | 
						||
    IN PDRIVER_OBJECT DriverObject,
 | 
						||
    IN PUNICODE_STRING RegistryPath
 | 
						||
    )
 | 
						||
 | 
						||
/*++
 | 
						||
 | 
						||
Routine Description:
 | 
						||
 | 
						||
    This is the initialization routine for the Rx file system
 | 
						||
    device driver.  This routine creates the device object for the FileSystem
 | 
						||
    device and performs all other driver initialization.
 | 
						||
 | 
						||
Arguments:
 | 
						||
 | 
						||
    DriverObject - Pointer to driver object created by the system.
 | 
						||
 | 
						||
Return Value:
 | 
						||
 | 
						||
    RXSTATUS - The function value is the final status from the initialization
 | 
						||
        operation.
 | 
						||
 | 
						||
--*/
 | 
						||
 | 
						||
{
 | 
						||
    RXSTATUS Status;
 | 
						||
    UNICODE_STRING UnicodeString;
 | 
						||
 | 
						||
    //DbgBreakPoint();
 | 
						||
 | 
						||
    // Get the data exports.....first thing!!!!
 | 
						||
    //
 | 
						||
 | 
						||
    ___MINIRDR_IMPORTS_NAME = RxRegisterMinirdr('LCL ', &MRxLocalDispatch, NULL);
 | 
						||
 | 
						||
    // Create the device object.
 | 
						||
    //
 | 
						||
 | 
						||
    //DbgBreakPoint();
 | 
						||
    RxDbgTrace( 0, (DEBUG_TRACE_ALWAYS), ("MRxLocalDriverEntry: DriverObject =%08lx\n", DriverObject ));
 | 
						||
    RtlInitUnicodeString(&UnicodeString, DD_NTLOCAL_MINIRDR_DEVICE_NAME_U);
 | 
						||
 | 
						||
    Status = IoCreateDevice(DriverObject,
 | 
						||
                            sizeof(MRXLOCAL_DEVICE_OBJECT) - sizeof(DEVICE_OBJECT),
 | 
						||
                            &UnicodeString,
 | 
						||
                            FILE_DEVICE_NETWORK_FILE_SYSTEM,
 | 
						||
                            FILE_REMOTE_DEVICE,
 | 
						||
                            FALSE,
 | 
						||
                            &MRxLocalDeviceObject);
 | 
						||
 | 
						||
    if (!NT_SUCCESS( Status )) {
 | 
						||
        return Status;
 | 
						||
    }
 | 
						||
 | 
						||
    //DbgBreakPoint();
 | 
						||
    MRxLocalInitializeCalldownTable();
 | 
						||
 | 
						||
    KeInitializeSpinLock( &MrxLocalOplockSpinLock );
 | 
						||
 | 
						||
    //
 | 
						||
    //  Setup Unload Routine
 | 
						||
 | 
						||
    DriverObject->DriverUnload = MRxLocalUnload;
 | 
						||
 | 
						||
    //
 | 
						||
    //
 | 
						||
    //  And return to our caller
 | 
						||
 | 
						||
    return( RxStatus(SUCCESS) );
 | 
						||
}
 | 
						||
 | 
						||
 | 
						||
//
 | 
						||
//  Unload routine
 | 
						||
//
 | 
						||
 | 
						||
VOID
 | 
						||
MRxLocalUnload(
 | 
						||
    IN PDRIVER_OBJECT DriverObject
 | 
						||
    )
 | 
						||
/*++
 | 
						||
 | 
						||
Routine Description:
 | 
						||
 | 
						||
     This is the unload routine for the MRXLOCAL.
 | 
						||
 | 
						||
Arguments:
 | 
						||
 | 
						||
     DriverObject - pointer to the driver object for the MRXLOCAL
 | 
						||
 | 
						||
Return Value:
 | 
						||
 | 
						||
     None
 | 
						||
 | 
						||
--*/
 | 
						||
 | 
						||
{
 | 
						||
    UNICODE_STRING LinkName;
 | 
						||
 | 
						||
    PAGED_CODE();
 | 
						||
 | 
						||
    RxDbgTrace( 0, (DEBUG_TRACE_ALWAYS), ("MRxLocalUnload: DriverObject =%08lx\n", DriverObject ));
 | 
						||
//    DbgBreakPoint();
 | 
						||
 | 
						||
    IoDeleteDevice((PDEVICE_OBJECT)MRxLocalDeviceObject);
 | 
						||
 | 
						||
}
 | 
						||
 | 
						||
 |