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