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);
|
||
|
||
}
|
||
|
||
|