1 //////////////////////////////////////////////////////////////////// 2 // Copyright (C) Alexander Telyatnikov, Ivan Keliukh, Yegor Anchishkin, SKIF Software, 1999-2013. Kiev, Ukraine 3 // All rights reserved 4 // This file was released under the GPLv2 on June 2015. 5 //////////////////////////////////////////////////////////////////// 6 #include "udffs.h" 7 8 VOID 9 NTAPI 10 UDFDriverUnload( 11 IN PDRIVER_OBJECT DriverObject 12 ) 13 { 14 // UNICODE_STRING uniWin32NameString; 15 LARGE_INTEGER delay; 16 17 // 18 // All *THIS* driver needs to do is to delete the device object and the 19 // symbolic link between our device name and the Win32 visible name. 20 // 21 // Almost every other driver ever written would need to do a 22 // significant amount of work here deallocating stuff. 23 // 24 25 UDFPrint( ("UDF: Unloading!!\n") ); 26 27 // prevent mount oparations 28 UDFGlobalData.UDFFlags |= UDF_DATA_FLAGS_BEING_UNLOADED; 29 30 // wait for all volumes to be dismounted 31 delay.QuadPart = 10*1000*1000*10; 32 while(TRUE) { 33 UDFPrint(("Poll...\n")); 34 KeDelayExecutionThread(KernelMode, FALSE, &delay); 35 } 36 37 // Create counted string version of our Win32 device name. 38 39 40 // RtlInitUnicodeString( &uniWin32NameString, DOS_DEVICE_NAME ); 41 42 43 // Delete the link from our device name to a name in the Win32 namespace. 44 45 46 // IoDeleteSymbolicLink( &uniWin32NameString ); 47 48 49 // Finally delete our device object 50 51 52 // IoDeleteDevice( DriverObject->DeviceObject ); 53 } 54