Source code of Windows XP (NT5)
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

172 lines
3.2 KiB

/*++
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 <pch.cxx>
#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;
}