731 lines
17 KiB
C++
731 lines
17 KiB
C++
/*++
|
|
|
|
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 );
|
|
|
|
}
|