|
|
/*++
Copyright (c) 1992 Microsoft Corporation
Module Name:
mprui.cxx
Abstract:
Contains the entry points for the UI pieces that live in a separate DLL. The entry points are made available here, but will not load the MPRUI.DLL until it is needed.
Contains:
Author:
Chuck Y Chan (chuckc) 20-Jul-1992
Environment:
User Mode -Win32
Notes:
Revision History:
20-Jul-1992 chuckc created
25-Oct-1992 CongpaY added ShowReconnectDialog
30-Nov-1992 Yi-HsinS added WNetSupportGlobalEnum
12-May-1993 Danl WNetClearConnections: Added code to free MPRUI.DLL after calling the MPRUI function to clear connections. REASON: This code path is called by winlogon. It causes mprui.dll to get loaded. Mprui references MPR.DLL. Because MPRUI.DLL was never getting freed, winlogon could never free MPR.DLL.
05-May-1999 jschwart Make provider addition/removal dynamic
--*/
#include "precomp.hxx"
/*
* global functions */
BOOL MprGetProviderIndexFromDriveName(LPWSTR lpDriveName, LPDWORD lpnIndex );
/*******************************************************************
NAME: WNetConnectionDialog1A
SYNOPSIS: calls thru to the superset function
HISTORY: chuckc 29-Jul-1992 Created brucefo 18-May-1995 Created
********************************************************************/
DWORD WNetConnectionDialog1A( LPCONNECTDLGSTRUCTA lpConnDlgStruct ) { return MPRUI_WNetConnectionDialog1A(lpConnDlgStruct); }
/*******************************************************************
NAME: WNetConnectionDialog1W
SYNOPSIS: calls thru to the superset function
HISTORY: chuckc 29-Jul-1992 Created brucefo 18-May-1995 Created
********************************************************************/
DWORD WNetConnectionDialog1W( LPCONNECTDLGSTRUCTW lpConnDlgStruct ) { return MPRUI_WNetConnectionDialog1W(lpConnDlgStruct); }
/*******************************************************************
NAME: WNetDisconnectDialog1A
SYNOPSIS: calls thru to the superset function
HISTORY: chuckc 29-Jul-1992 Created brucefo 18-May-1995 Created
********************************************************************/
DWORD WNetDisconnectDialog1A( LPDISCDLGSTRUCTA lpDiscDlgStruct ) { return MPRUI_WNetDisconnectDialog1A(lpDiscDlgStruct); }
/*******************************************************************
NAME: WNetDisconnectDialog1W
SYNOPSIS: calls thru to the superset function
HISTORY: chuckc 29-Jul-1992 Created brucefo 18-May-1995 Created
********************************************************************/
DWORD WNetDisconnectDialog1W( LPDISCDLGSTRUCTW lpDiscDlgStruct ) { return MPRUI_WNetDisconnectDialog1W(lpDiscDlgStruct); }
/*******************************************************************
NAME: WNetConnectionDialog
SYNOPSIS: calls thru to the actual implementation in MPRUI.DLL
HISTORY: chuckc 29-Jul-1992 Created
********************************************************************/
DWORD WNetConnectionDialog( HWND hwnd, DWORD dwType ) { return MPRUI_WNetConnectionDialog(hwnd, dwType); }
/*******************************************************************
NAME: WNetConnectionDialog2
SYNOPSIS: calls thru to the actual implementation in MPRUI.DLL
HISTORY: chuckc 29-Jul-1992 Created JSchwart 11-Mar-2001 Readded for winfile.exe support
********************************************************************/
DWORD WNetConnectionDialog2( HWND hwnd, DWORD dwType, LPWSTR lpHelpFile, DWORD nHelpContext ) { return WNetConnectionDialog(hwnd, dwType); }
/*******************************************************************
NAME: WNetDisconnectDialog
SYNOPSIS: calls thru to the actual implementation in MPRUI.DLL
HISTORY: chuckc 29-Jul-1992 Created
********************************************************************/
DWORD WNetDisconnectDialog( HWND hwnd, DWORD dwType ) { return MPRUI_WNetDisconnectDialog(hwnd, dwType); }
/*******************************************************************
NAME: WNetConnectionDialog2
SYNOPSIS: calls thru to the actual implementation in MPRUI.DLL
HISTORY: chuckc 29-Jul-1992 Created JSchwart 11-Mar-2001 Readded for winfile.exe support
********************************************************************/
DWORD WNetDisconnectDialog2( HWND hwnd, DWORD dwType, LPWSTR lpHelpFile, DWORD nHelpContext ) { return WNetDisconnectDialog(hwnd, dwType); }
/*******************************************************************
NAME: WNetClearConnections
SYNOPSIS: calls thru to the actual implementation in MPRUI.DLL
HISTORY: chuckc 29-Jul-1992 Created
********************************************************************/
DWORD WNetClearConnections( HWND hWndParent ) { return MPRUI_WNetClearConnections(hWndParent); }
/*******************************************************************
NAME: DoPasswordDialog
SYNOPSIS: calls thru to the actual implementation in MPRUI.DLL
HISTORY: chuckc 29-Jul-1992 Created
********************************************************************/
DWORD DoPasswordDialog( HWND hwndOwner, LPWSTR pchResource, LPWSTR pchUserName, LPWSTR pchPasswordReturnBuffer, ULONG cbPasswordReturnBuffer, // bytes!
BOOL * pfDidCancel, DWORD dwError ) { return MPRUI_DoPasswordDialog(hwndOwner, pchResource, pchUserName, pchPasswordReturnBuffer, cbPasswordReturnBuffer, pfDidCancel, dwError); }
/*******************************************************************
NAME: DoProfileErrorDialog
SYNOPSIS: calls thru to the actual implementation in MPRUI.DLL
HISTORY: chuckc 29-Jul-1992 Created
********************************************************************/
DWORD DoProfileErrorDialog( HWND hwndOwner, const TCHAR * pchDevice, const TCHAR * pchResource, const TCHAR * pchProvider, DWORD dwError, BOOL fAllowCancel, BOOL * pfDidCancel, BOOL * pfDisconnect, BOOL * pfHideErrors ) { return MPRUI_DoProfileErrorDialog(hwndOwner, pchDevice, pchResource, pchProvider, dwError, fAllowCancel, pfDidCancel, pfDisconnect, pfHideErrors); }
/*******************************************************************
NAME: ShowReconnectDialog
SYNOPSIS: calls thru to the actual implementation in MPRUI.DLL
HISTORY: congpay 25-Oct-1992 Created
********************************************************************/
DWORD ShowReconnectDialog( HWND hwndParent, PARAMETERS *Params ) { return MPRUI_ShowReconnectDialog(hwndParent, Params); }
/*******************************************************************
NAME: WNetGetSearchDialog
SYNOPSIS: gets the pointer to NPSearchDialog() from named provider
ENTRY: Assumes the provider table in router has been setup, which is always the case after DLL init.
lpProvider - name of provider to query
EXIT:
NOTES:
HISTORY: chuckc 19-Mar-1992 Created
********************************************************************/
FARPROC WNetGetSearchDialog(LPWSTR lpProvider) { ULONG index ; BOOL fOK ; DWORD status;
MprCheckProviders();
CProviderSharedLock PLock;
//
// INIT_IF_NECESSARY
//
if (!(GlobalInitLevel & NETWORK_LEVEL)) { status = MprLevel2Init(NETWORK_LEVEL); if (status != WN_SUCCESS) { return(NULL); } }
if (lpProvider == NULL) return NULL ;
fOK = MprGetProviderIndex(lpProvider, &index) ;
if (!fOK) return(NULL) ;
return((FARPROC)GlobalProviderInfo[index].SearchDialog) ; }
/*******************************************************************
NAME: WNetSupportGlobalEnum
SYNOPSIS: Check if the provider supports global enumeration
ENTRY: Assumes the provider table in router has been setup, which is always the case after DLL init.
lpProvider - name of provider to query
EXIT:
NOTES:
HISTORY: Yi-HsinS 30-Nov-1992 Created
********************************************************************/
BOOL WNetSupportGlobalEnum( LPWSTR lpProvider ) { MprCheckProviders();
CProviderSharedLock PLock;
//
// INIT_IF_NECESSARY
//
DWORD status; if (!(GlobalInitLevel & NETWORK_LEVEL)) { status = MprLevel2Init(NETWORK_LEVEL); if (status != WN_SUCCESS) { return(FALSE); } }
if ( lpProvider != NULL ) { ULONG index;
if ( MprGetProviderIndex( lpProvider, &index ) && ( GlobalProviderInfo[index].GetCaps(WNNC_ENUMERATION) & WNNC_ENUM_GLOBAL ) ) { return TRUE; } }
return FALSE; }
/*******************************************************************
NAME: WNetFMXGetPermCaps
SYNOPSIS: Gets the permission capabilites from the provider supporting the given drive.
ENTRY: Assumes the provider table in router has been setup, which is always the case after DLL init.
lpDriveName - Name of drive
EXIT: Returns a bitmask representing the permission capabilities of the provider.
NOTES:
HISTORY: YiHsinS 11-Apr-1994 Created
********************************************************************/
DWORD WNetFMXGetPermCaps( LPWSTR lpDriveName ) { ULONG index ; BOOL fOK ; DWORD status;
MprCheckProviders();
CProviderSharedLock PLock;
//
// INIT_IF_NECESSARY
//
if (!(GlobalInitLevel & NETWORK_LEVEL)) { status = MprLevel2Init(NETWORK_LEVEL); if (status != WN_SUCCESS) return 0; }
if ( lpDriveName != NULL) { fOK = MprGetProviderIndexFromDriveName( lpDriveName, &index);
if ( fOK && ( GlobalProviderInfo[index].FMXGetPermCaps != NULL ) ) { return( GlobalProviderInfo[index].FMXGetPermCaps( lpDriveName)); } }
return 0; }
/*******************************************************************
NAME: WNetFMXEditPerm
SYNOPSIS: Asks the provider supporting the given drive to pop up its own permission editor.
ENTRY: Assumes the provider table in router has been setup, which is always the case after DLL init.
lpDriveName - Name of drive hwndFMX - Handle of the FMX window in File Manager nDialogType - Specify the type of permission dialog to bring up. It can be one of the following values: WNPERM_DLG_PERM WNPERM_DLG_AUDIT WNPERM_DLG_OWNER
EXIT: Returns WN_SUCCESS or any error that occurred
NOTES:
HISTORY: YiHsinS 11-Apr-1994 Created
********************************************************************/
DWORD WNetFMXEditPerm( LPWSTR lpDriveName, HWND hwndFMX, DWORD nDialogType ) { ULONG index ; BOOL fOK ; DWORD status = WN_SUCCESS;
MprCheckProviders();
CProviderSharedLock PLock;
//
// INIT_IF_NECESSARY
//
if (!(GlobalInitLevel & NETWORK_LEVEL)) { status = MprLevel2Init(NETWORK_LEVEL); if (status != WN_SUCCESS) return status; }
//
// Check input parameters
//
if ( ( lpDriveName == NULL) || ( hwndFMX == NULL ) || ( nDialogType != WNPERM_DLG_PERM && nDialogType != WNPERM_DLG_AUDIT && nDialogType != WNPERM_DLG_OWNER ) ) { status = WN_BAD_VALUE; } else { fOK = MprGetProviderIndexFromDriveName( lpDriveName, &index) ;
if ( !fOK ) { status = WN_NO_NET_OR_BAD_PATH; } else { if ( GlobalProviderInfo[index].FMXEditPerm == NULL ) status = WN_NOT_SUPPORTED;
else status = GlobalProviderInfo[index].FMXEditPerm( lpDriveName, hwndFMX, nDialogType ); } }
if ( status != WN_SUCCESS ) SetLastError( status );
return status; }
/*******************************************************************
NAME: WNetFMXGetPermHelp
SYNOPSIS: Requests the provider supporting the given drive for the help file name and help context for the menu item with the given type of permission dialog. i.e. the help when F1 is pressed when a menu item is selected.
ENTRY: Assumes the provider table in router has been setup, which is always the case after DLL init.
lpDriveName - Name of drive nDialogType - Specify the type of help requested. It can be one of the following values: WNPERM_DLG_PERM WNPERM_DLG_AUDIT WNPERM_DLG_OWNER fDirectory - TRUE if the selected item is a directory, FALSE otherwise lpFileNameBuffer - Pointer to buffer that will receive the help file name lpBufferSize - Specify the size of lpBuffer lpnHelpContext - Points to a DWORD that will receive the help context
EXIT: Returns WN_SUCCESS or any error that occurred
NOTES:
HISTORY: YiHsinS 11-Apr-1994 Created
********************************************************************/
DWORD WNetFMXGetPermHelp( LPWSTR lpDriveName, DWORD nDialogType, BOOL fDirectory, LPVOID lpFileNameBuffer, LPDWORD lpBufferSize, LPDWORD lpnHelpContext ) { ULONG index ; BOOL fOK ; DWORD status = WN_SUCCESS;
MprCheckProviders();
CProviderSharedLock PLock;
//
// INIT_IF_NECESSARY
//
if (!(GlobalInitLevel & NETWORK_LEVEL)) { status = MprLevel2Init(NETWORK_LEVEL); if (status != WN_SUCCESS) return status; }
//
// Check input parameters
//
if ( ( lpDriveName == NULL) || ( nDialogType != WNPERM_DLG_PERM && nDialogType != WNPERM_DLG_AUDIT && nDialogType != WNPERM_DLG_OWNER ) ) { status = WN_BAD_VALUE; } else { fOK = MprGetProviderIndexFromDriveName( lpDriveName, &index) ;
if ( !fOK ) { status = WN_NO_NET_OR_BAD_PATH; } else { if ( GlobalProviderInfo[index].FMXGetPermHelp == NULL ) status = WN_NOT_SUPPORTED; else status = GlobalProviderInfo[index].FMXGetPermHelp( lpDriveName, nDialogType, fDirectory, lpFileNameBuffer, lpBufferSize, lpnHelpContext ); } }
if ( status != WN_SUCCESS ) SetLastError( status );
return status; }
/*******************************************************************
NAME: MprGetProviderIndexFromDriveName
SYNOPSIS: Gets the index of the provider in the provider array supporting the drive name connection.
ENTRY: lpDriveName - Name of the drive lpnIndex - Points to a DWORD that will receive the index
EXIT: TRUE if we successfully retrieved the index, FALSE otherwise.
NOTES:
HISTORY: YiHsinS 11-Apr-1994 Created
********************************************************************/
BOOL MprGetProviderIndexFromDriveName(LPWSTR lpDriveName, LPDWORD lpnIndex ) { DWORD status; WCHAR szRemoteName[MAX_PATH]; DWORD nBufferSize = sizeof(szRemoteName);
status = MprGetConnection( lpDriveName, szRemoteName, &nBufferSize, lpnIndex );
//
// *lpnIndex will be correct if status is WN_SUCCESS or WN_MORE_DATA
// and we don't really need the remote name. Hence, we don't need to
// call MprGetConnection again with a bigger buffer if WN_MORE_DATA
// is returned.
//
return ( status == WN_SUCCESS || status == WN_MORE_DATA );
}
|