/*++

Copyright (c) 1996  Microsoft Corporation

Module Name:

    intidll.c

Abstract:

    This file handles the DLLInitialize spooler API

Environment:

    Win32 subsystem, DriverUI module, user mode

Revision History:

    07/17/96 -amandan-
        Created it.

--*/


#include "precomp.h"

//
// Global instance handle and critical section
//

HINSTANCE ghInstance;
CRITICAL_SECTION gCriticalSection;


BOOL WINAPI
DllMain(
    HANDLE      hModule,
    ULONG       ulReason,
    PCONTEXT    pContext
    )

/*++

Routine Description:

    This function is called when the system loads/unloads the DriverUI module.
    At DLL_PROCESS_ATTACH, InitializeCriticalSection is called to initialize
    the critical section objects.
    At DLL_PROCESS_DETACH, DeleteCriticalSection is called to release the
    critical section objects.

Arguments:

    hModule     handle to DLL module
    ulReason    reason for the call
    pContext    pointer to context (not used by us)


Return Value:

    TRUE if DLL is initialized successfully, FALSE otherwise.

--*/

{
    WCHAR   wchDllName[MAX_PATH];
    BOOL    bKeepDllLoaded = FALSE;

    switch (ulReason)
    {
    case DLL_PROCESS_ATTACH:

        #if DBG

        if (GetEnvironmentVariable(TEXT("UnloadDriverUiDll"), NULL, 0))
            bKeepDllLoaded = FALSE;

        #endif

        //
        // Keep our driver UI dll always loaded in memory
        //

        if (bKeepDllLoaded && GetModuleFileName(hModule, wchDllName, MAX_PATH))
            LoadLibrary(wchDllName);

        ghInstance = hModule;
        InitializeCriticalSection(&gCriticalSection);
        break;

    case DLL_PROCESS_DETACH:

        DeleteCriticalSection(&gCriticalSection);
        break;
    }

    return TRUE;
}