/*++ Copyright (c) 1990-2000 Microsoft Corporation Module Name: Cufat.cxx Abstract: This module contains run-time, global support for the FAT Conversion library (CUFAT). This support includes: - creation of CLASS_DESCRIPTORs - Global objects Author: Ramon Juan San Andres (ramonsa) 23-Sep-1991 Environment: User Mode Notes: --*/ #include #include "ulib.hxx" // // Local prototypes // STATIC BOOLEAN DefineClassDescriptors( ); STATIC BOOLEAN UndefineClassDescriptors( ); extern "C" BOOLEAN InitializeCufat ( PVOID DllHandle, ULONG Reason, PCONTEXT Context ); BOOLEAN InitializeCufat ( PVOID DllHandle, ULONG Reason, PCONTEXT Context ) /*++ Routine Description: Initialize Cufat by constructing and initializing all global objects. These include: - all CLASS_DESCRIPTORs (class_cd) Arguments: None. Return Value: BOOLEAN - Returns TRUE if all global objects were succesfully constructed and initialized. --*/ { UNREFERENCED_PARAMETER( DllHandle ); UNREFERENCED_PARAMETER( Context ); #if defined( _AUTOCHECK_ ) || defined( _SETUP_LOADER_ ) UNREFERENCED_PARAMETER( Reason ); if (!DefineClassDescriptors()) { UndefineClassDescriptors(); DebugAbort( "Cufat initialization failed!!!\n" ); return( FALSE ); } DebugPrint("CUFAT.DLL got attached.\n"); #else // _AUTOCHECK_ and _SETUP_LOADER_ not defined STATIC ULONG count = 0; switch (Reason) { case DLL_PROCESS_ATTACH: case DLL_THREAD_ATTACH: if (count > 0) { ++count; DebugPrintTrace(("CUFAT.DLL got attached %d times.\n", count)); return TRUE; } if (!DefineClassDescriptors()) { UndefineClassDescriptors(); DebugAbort( "Cufat initialization failed!!!\n" ); return( FALSE ); } DebugPrint("CUFAT.DLL got attached.\n"); count++; break; case DLL_PROCESS_DETACH: case DLL_THREAD_DETACH: if (count > 1) { --count; DebugPrintTrace(("CUFAT.DLL got detached. %d time(s) left.\n", count)); return TRUE; } if (count == 1) { DebugPrint("CUFAT.DLL got detached.\n"); UndefineClassDescriptors(); count--; } else DebugPrint("CUFAT.DLL detached more than attached\n"); break; } #endif // _AUTOCHECK || _SETUP_LOADER_ return TRUE; } DECLARE_CLASS( FAT_NTFS ); STATIC BOOLEAN DefineClassDescriptors( ) { if ( DEFINE_CLASS_DESCRIPTOR( FAT_NTFS ) && TRUE ) { return TRUE; } else { DebugPrint( "Could not initialize class descriptors!"); return FALSE; } } STATIC BOOLEAN UndefineClassDescriptors( ) { UNDEFINE_CLASS_DESCRIPTOR( FAT_NTFS ); return TRUE; }