|
|
/*****************************************************************/ /** Microsoft LAN Manager **/ /** Copyright(c) Microsoft Corp., 1989-1991 **/ /*****************************************************************/
/*
* Windows/Network Interface -- LAN Manager Version * * History * terryk 01-Nov-1991 Add WNetResourceEnum Init and * term function * Yi-HsinS 31-Dec-1991 Unicode work * terryk 03-Jan-1992 Capitalize the manifest * beng 06-Apr-1992 Unicode conversion * Yi-HsinS 20-Nov-1992 Added hmodAclEditor and * pSedDiscretionaryAclEditor */
#define INCL_WINDOWS
#define INCL_WINDOWS_GDI
#define INCL_DOSERRORS
#define INCL_NETERRORS
#define INCL_NETUSE
#define INCL_NETWKSTA
#define INCL_NETLIB
#define _WINNETWK_
#include <lmui.hxx>
#undef _WINNETWK_
extern "C" { #include <dos.h>
//#include <stdlib.h>
#include <wnet1632.h>
#include <winlocal.h>
#include <wninit.h>
#include <uimsg.h> // For range of string IDs used
#include <uirsrc.h>
#include <helpnums.h>
#include <sedapi.h>
}
#ifndef max
#define max(a,b) ((a)>(b)?(a):(b))
#endif
#define INCL_BLT_CONTROL
#define INCL_BLT_DIALOG
#define INCL_BLT_MSGPOPUP
#include <blt.hxx>
#include <uitrace.hxx>
#include <wnetdev.hxx>
#include <string.hxx>
#include <strchlit.hxx> // for STRING_TERMINATOR
#include <wnprop.hxx>
/* Local prototypes */
// reorged these for Glock
extern "C" { BOOL NEAR PASCAL LIBMAIN ( HINSTANCE hInst, UINT wDataSeg, UINT wHeapSize, LPSTR lpCmdLine );
/* Under Win32, DllMain simply calls LIBMAIN.
*/ BOOL DllMain( HINSTANCE hDll, DWORD dwReason, LPVOID lpvReserved ) ;
void FAR PASCAL Enable ( void );
void FAR PASCAL Disable ( void );
INT FAR PASCAL WEP ( UINT wWord );
void ErrorInitWarning ( APIERR err );
#ifdef DEBUG // debug scratch area
TCHAR CJJRW[64] ; #endif
}
#define FAR_HEAPS_DLL 5 /* Maximum numbe of far heaps for ::new */
BOOL fRealMode = FALSE; HINSTANCE hModule = NULL;
typedef DWORD (*PSEDDISCRETIONARYACLEDITOR)( HWND, HANDLE, LPWSTR, PSED_OBJECT_TYPE_DESCRIPTOR, PSED_APPLICATION_ACCESSES, LPWSTR, PSED_FUNC_APPLY_SEC_CALLBACK, ULONG_PTR, PSECURITY_DESCRIPTOR, BOOLEAN, LPDWORD );
HMODULE hmodAclEditor = NULL;
extern "C" { PSEDDISCRETIONARYACLEDITOR pSedDiscretionaryAclEditor = NULL; }
/*****
* * LIBMAIN * * Purpose: * Initialize DLL, which includes: * - save away instance handle * - set current capabilities * * Parameters: * hInst Instance handle of DLL * * Returns: * TRUE Init OK * FALSE Init failed */
BOOL /* NEAR PASCAL */ LIBMAIN ( HINSTANCE hInst, UINT wDataSeg, UINT wHeapSize, LPSTR lpCmdLine ) { UNREFERENCED (wDataSeg); UNREFERENCED (lpCmdLine);
::hModule = hInst;
UNREFERENCED( wHeapSize );
/* GetWinFlags goes away under Win32.
*/ ::fRealMode = FALSE;
return TRUE; } /* LIBMAIN */
/*******************************************************************
NAME: DllMain
SYNOPSIS: Win32 DLL Entry point. This function gets called when a process or thread attaches/detaches itself to this DLL. We simply call the Win3 appropriate DLL function.
ENTRY: hDll - DLL Module handle dwReason - Indicates attach/detach lpvReserved - Not used
EXIT:
RETURNS: TRUE if successful, FALSE otherwise
NOTES: This is the typical Win32 DLL entry style.
This is Win32 only.
HISTORY: Johnl 01-Nov-1991 Created
********************************************************************/
BOOL DllMain( HINSTANCE hDll, DWORD dwReason, LPVOID lpvReserved ) { UNREFERENCED( lpvReserved ) ;
switch ( dwReason ) { case DLL_PROCESS_ATTACH: DisableThreadLibraryCalls(hDll); return LIBMAIN( hDll, 0, 0, NULL ) ;
case DLL_PROCESS_DETACH: return WEP( 0 ) ;
default: // Unexpected reason given to Win32LibMain entry point
UIASSERT(FALSE); break ; }
return FALSE ; }
/*******************************************************************
NAME: InitShellUI
SYNOPSIS: The function initializes the UI side of this DLL. This helps the load time when the dll is used as a network provider for NT.
RETURNS: NERR_Success if successful, error code otherwise
NOTES: Every UI entrypoint in this DLL should call this function. It will do the right thing if we've already been initialized.
HISTORY: Johnl 07-Aug-1992 Created
********************************************************************/
BOOL fInitialized = FALSE ;
APIERR InitShellUI( void ) { APIERR err = NERR_Success ;
if ( !fInitialized ) { ::hmodAclEditor = NULL; ::pSedDiscretionaryAclEditor = NULL;
if ( (err = BLT::Init(::hModule, IDRSRC_SHELL_BASE, IDRSRC_SHELL_LAST, IDS_UI_SHELL_BASE, IDS_UI_SHELL_LAST)) || (err = I_PropDialogInit()) || (err = BLT::RegisterHelpFile( ::hModule, IDS_SHELLHELPFILENAME, HC_UI_SHELL_BASE, HC_UI_SHELL_LAST))) { /* Fall through and don't set the initialized flag
*/ } else { fInitialized = TRUE ; } }
return err ; }
/*******************************************************************
NAME: TermShellUI
SYNOPSIS: Frees the memory used to initialize this DLL
NOTES: Should only be called when the DLL is terminated and the DLL has been initialized (i.e., fInitialized=TRUE).
HISTORY: Johnl 07-Aug-1992 Created
********************************************************************/
void TermShellUI( void ) { if ( fInitialized ) { I_PropDialogUnInit() ; BLT::DeregisterHelpFile( ::hModule, 0 ); BLT::Term( ::hModule );
if ( ::hmodAclEditor != NULL ) ::FreeLibrary( ::hmodAclEditor ); } }
/*
* Enable - must be exported as ordinal @21 in .DEF file * * Lanman driver exports this function so that Windows can call * it whenever Lanman driver is started and each time it is swapped * back in off disk. * * Note: the corresponding function in Windows is Disable() which * Windows will call it whenever driver is about to swapped * out the disk and exit Windows. Enable() and Disable() * were implemented specifically for supporting the popup * mechanisms, where you need to disengage yourself before * being swapped to disk so that you won't be called when * you're not there. * */
void Enable ( void ) { /* This is only to provide a entry point whenever Windows tries
* to call Lanman driver. */ return;
} /* Enable */
/*
* Disable - must be exported as ordinal @22 in .DEF file * * Lanman driver exports this function so that Windows can call * it whenever Lanman driver is exited and each time it is swapped * out the disk. * */
void Disable ( void ) { return; } /* Disable */
/*
* WEP (Windows Export Proc--short and cryptic name because * this function is not given an ordinal) * * When Windows unloads a driver, it calls this function so that * the driver can do any last minute clean-ups. Then, Windows * calls the WEP function. All Windows libraries are required to * contain this function. It should be included in the .def file * but should not be given an ordinal. * */
INT WEP ( UINT wWord ) { UNREFERENCED( wWord ) ; TermShellUI() ; return 1; } /* WEP */
|