|
|
/*++
Copyright (c) 1989 Microsoft Corporation
Module Name:
driver.c
Abstract:
This module contains the driver entry and unload routines for ws2ifsl.sys driver.
Author:
Vadim Eydelman (VadimE) Dec-1996
Revision History:
--*/
#include "precomp.h"
// Local routine declarations
NTSTATUS DriverEntry ( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath );
NTSTATUS DriverUnload ( IN PDRIVER_OBJECT DriverObject );
#ifdef ALLOC_PRAGMA
#pragma alloc_text(INIT, DriverEntry )
#pragma alloc_text(PAGE, DriverUnload)
#endif
PDEVICE_OBJECT DeviceObject;
FAST_IO_DISPATCH FastIoDispatchTable = { sizeof (FAST_IO_DISPATCH), // SizeOfFastIoDispatch
NULL, // FastIoCheckIfPossible
NULL, // FastIoRead
NULL, // FastIoWrite
NULL, // FastIoQueryBasicInfo
NULL, // FastIoQueryStandardInfo
NULL, // FastIoLock
NULL, // FastIoUnlockSingle
NULL, // FastIoUnlockAll
NULL, // FastIoUnlockAllByKey
FastIoDeviceControl // FastIoDeviceControl
};
NTSTATUS DriverEntry ( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath ) /*++
Routine Description:
This is the initialization routine for the ws2ifsl device driver.
Arguments:
DriverObject - Pointer to driver object created by the system. RegistryPath - path to driver's registry ley
Return Value:
Final status from the initialization operation.
--*/
{ NTSTATUS status; UNICODE_STRING deviceName;
PAGED_CODE( );
#if DBG
ReadDbgInfo (RegistryPath); #endif
//
// Create the device object. (IoCreateDevice zeroes the memory
// occupied by the object.)
//
RtlInitUnicodeString( &deviceName, WS2IFSL_DEVICE_NAME );
status = IoCreateDevice( DriverObject, // DriverObject
0, // DeviceExtension
&deviceName, // DeviceName
FILE_DEVICE_WS2IFSL, // DeviceType
0, // DeviceCharacteristics
FALSE, // Exclusive
&DeviceObject // DeviceObject
);
if (NT_SUCCESS(status)) { // Initialize device object
// DeviceObject->Flags |= 0; // Neither direct nor buffering
DeviceObject->StackSize = 1; // No underlying drivers
//
// Initialize the driver object.
//
DriverObject->MajorFunction[IRP_MJ_CREATE] = DispatchCreate; DriverObject->MajorFunction[IRP_MJ_CLOSE] = DispatchClose; DriverObject->MajorFunction[IRP_MJ_CLEANUP] = DispatchCleanup; DriverObject->MajorFunction[IRP_MJ_READ] = DriverObject->MajorFunction[IRP_MJ_WRITE] = DispatchReadWrite; DriverObject->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DispatchDeviceControl; DriverObject->MajorFunction[IRP_MJ_PNP] = DispatchPnP; DriverObject->DriverUnload = DriverUnload; DriverObject->FastIoDispatch = &FastIoDispatchTable;
//
// Initialize global data.
//
WsPrint (DBG_LOAD, ("WS2IFSL DriverEntry: driver loaded OK\n")); return STATUS_SUCCESS; } else { WsPrint (DBG_FAILURES|DBG_LOAD, ("WS2IFSL DriverEntry: unable to create device object: %X\n", status )); }
return status; } // DriverEntry
NTSTATUS DriverUnload ( IN PDRIVER_OBJECT DriverObject ) /*++
Routine Description:
This routine releases all resources allocated by the driver when it is unloaded.
Arguments:
DriverObject - Pointer to driver object created by the system.
Return Value:
STATUS_SUCCESS
--*/
{ PAGED_CODE( ); // Release global resources
IoDeleteDevice (DeviceObject);
WsPrint (DBG_LOAD, ("WS2IFSL DriverUnload: driver unloaded OK\n"));
return STATUS_SUCCESS; } // DriverUnload
|