/**********************************************************************/ /** Microsoft LAN Manager **/ /** Copyright(c) Microsoft Corp., 1990 **/ /**********************************************************************/ /* winprof.hxx High-level profile APIs (PROFILE object) The PROFILE class contains a higher-level interface to the UserProfile APIs. It is meant solely for use by WINNET. All WINNET modules should use the PROFILE APIs rather than going directly to the UserProfile APIs. Applications other than WINNET will have to use the UserProfile APIs. The PROFILE class adds the following to the basic UserProfile APIs: - Establishes connections as specified in profile, including prompting for password - Displays error popups as appropriate during profile load Note that the UserProfile APIs which the PROFILE class accesses use access global variables. For this reason, it never makes sense to have more than one PROFILE object, and it is generally not desirable to have a PROFILE object of other than global scope. Those PROFILE APIs which take an HWND parameter may give control to Windows or call Windows APIs, but those which do not take an HWND parameter will never do either. Thus, of the exported APIs, only PROFILE::Load is liable to compact memory. Several PROFILE methods take a UINT *puWnErr parameter in order to return an auxiliary WN_ error code. In these cases, the following combinations of error codes are possible: Return code: Auxiliary: Meaning NERR_Success WN_SUCCESS Operation was successful NERR_Success WN_CANCEL Operation cancelled, error already displayed NERR_Success WN_CONTINUE Error occurred, error already displayed Error has not been displayed PROFILE::Init Initializes the PROFILE object. Call this before calling any other PROFILE method. Call this method while in the (DS register) context of the shell rather than the context of any application. Return Values: NERR_Success Success ERROR_NOT_ENOUGH_MEMORY Out of memory PROFILE::Free Releases the PROFILE object. Call this after calling all other PROFILE methods. Return Values: NERR_Success Success PROFILE::Load Loads one device connection from the user profile, or loads all device connections from the user profile. Also returns an advisory parameter indicating whether the connection was cancelled, or whether some error has already been reported; note that the return code is NERR_Success if the dialog is cancelled. Return Values: NERR_Success Success ERROR_NOT_ENOUGH_MEMORY Out of memory other Misc. net error PROFILE::Query Asks about a specific connection in the user profile. If PROFILE::Query returns NERR_Success, the other fields are valid. sResourceType is one of the values of field use_info_1.ui1_arg_type. sResourceName_Type is one of the values of field use_info_2.ui1_res_type. Return Values: NERR_Success Success NERR_UseNotFound Connection not in profile ERROR_NOT_ENOUGH_MEMORY Out of memory other Misc. net error PROFILE::Enum Lists all connections in the user profile. This list appears as a list of null-terminated strings with NULL-NULL at the end, e.g. D:\0G:\0LPT1\0E:\0\0 The list is in no defined order. Pass only a valid pointer to a BUFFER object. If PROFILE::Enum returns WN_SUCCESS, the bufDeviceList field is valid. Return Values: NERR_Success Success ERROR_INSUFFICIENT_BUFFER The pbufDeviceList buffer is too small. ERROR_NOT_ENOUGH_MEMORY Out of memory other Misc. net error PROFILE::Change Saves a connection into the user profile, or removes a connection from the user profile. PROFILE::Change will prompt the user before creating a new profile entry. If cnlsResourceName.strlen() == 0, PROFILE::Change will remove an existing profile entry. sResourceType is one of the values of field use_info_1.ui1_arg_type. usResourceName_Type is one of the values of field use_info_2.ui1_res_type. Return Values: NERR_Success Success ERROR_NOT_ENOUGH_MEMORY Out of memory other Misc. net error PROFILE::Remove Removes a association from the profile. If the given device is associated with a different remote name than the one passed as a parameter, this method does nothing but return success. This method is intended to be used in disconnect operations. Then, if the the profile contained a previously unavailable device, which was left in the profile when a new connection was established on top of the unavailable device, the profile will be unchanged. Thus, the previously "covered" or "hidden" unavailable device, now becomes what the local device is "connected" to again. cnlsDeviceName is the local device name in the pair. cnlsResourceName is the remote name in the pair. This name is typically that DEVICE::QueryRemoteName returns before DEVICE::Disconnect is called. Return Values: NERR_Success Success other Misc. net error PROFILE::MapNetError Miscallaneous utility routine to help convert an NERR_ error code to a WN_ error code. PROFILE::DisplayChangeError Displays an error popup for a failure to change the profile. This routine should only be used for SYS and NET error codes, not for IERR error codes. PROFILE::DisplayLoadError Displays an error popup for a failure to load some connecion in the profile. This routine should only be used for SYS and NET error codes, not for IERR error codes. If you pass fAllowCancel then the user will also be able to press a cancel button. If they did press cancel, then *pfDidCancel will be TRUE, otherwise *pfDidCancel will be FALSE. Note it is only valid to check pfDidCancel if fAllowCancel is TRUE. FILE HISTORY: jonn 06-Dec-1990 Created jonn 27-Dec-1990 Updated to CDD version 0.4 jonn 02-Jan-1991 Integrated into SHELL jonn 07-Jan-1991 All methods become static jonn 10-Jan-1991 Removed PSHORT, PUSHORT jonn 25-Feb-1991 Changed to return NERR error codes jonn 06-Mar-1991 Added Display[Read|Change]Error jonn 11-Mar-1991 Modified Display[Load|Change]Error jonn 14-Mar-1991 Provide LogonUser to UPQuery rustanl 10-Apr-1991 Added PROFILE::Remove jonn 22-May-1991 Removed PROFILE_CANCELLED return code JohnL 18-Jun-1991 Allow user to cancel loading profiles (added flags to DisplayLoadError & LoadOne). Yi-HsinS 31-Dec-1991 Unicode work - change char to TCHAR beng 06-Apr-1992 More Unicode work */ #ifndef _WINPROF_HXX #define _WINPROF_HXX #include // for USE_RES_DEFAULT class BUFFER; // declared in uibuffer.hxx class PROFILE { public: /* no constructor or destructor */ static APIERR Init( ); static APIERR Free( ); static BOOL ConfirmUsername( const TCHAR * cpszUsername ); static APIERR Load( UINT * puWnErr, HWND hParent, NLS_STR *pnlsDeviceName ); static APIERR Query( const NLS_STR& cnlsDeviceName, NLS_STR& nlsResourceName, short * psResourceType, unsigned short *pusResourceName_Type = NULL // LM21 programs should use default ); static APIERR Enum( BUFFER * pbufDeviceList ); static APIERR Change( const NLS_STR& cnlsDeviceName, const NLS_STR& cnlsResourceName, short sResourceType, unsigned short usResourceName_Type = USE_RES_DEFAULT // LM21 programs should use default // defined in miscapis.hxx ); static APIERR Remove( const NLS_STR & cnlsDeviceName, const NLS_STR & cnlsResourceName ); static UINT MapNetError( APIERR errNetErr ); static void DisplayChangeError( HWND hwndParent, APIERR errProfErr ); static void DisplayLoadError( HWND hwndParent, APIERR errProfErr, const TCHAR * pchDevice, const TCHAR * pchResource, BOOL fAllowCancel = FALSE, BOOL *pfDidCancel = NULL ); protected: /* * PROFILE::Read * * Reads user profile into cache for the use of the other internal * profile functions. * * Return Values: * NERR_Success Success * ERROR_NOT_ENOUGH_MEMORY Out of memory * other Misc. error */ static APIERR Read(); /* * PROFILE::LoadOne * * Loads one device connection from the user profile. Used only by * PROFILE::Load(). * * Return Values: * NERR_Success Success * ERROR_NOT_ENOUGH_MEMORY Out of memory * other Misc. error */ static APIERR LoadOne( UINT * puWnErr, HWND hParent, const TCHAR * cpszLogonUser, NLS_STR nlsDeviceName, BOOL fAllowCancel = FALSE, BOOL *pfDidCancel = NULL ); /* * PROFILE::LoadAll * * Loads all device connections from the user profile. Used only by * PROFILE::Load(). * * Return Values: * NERR_Success Success * ERROR_NOT_ENOUGH_MEMORY Out of memory * other Misc. error */ static APIERR LoadAll( UINT * puWnErr, HWND hParent, const TCHAR * cpszLogonUser ); /* * PROFILE::DisplayError * * Internal routine for the user of DisplayChangeError and DisplayReadError */ static void DisplayError( HWND hwndParent, MSGID msgidMsgNum, APIERR errProfErr, ULONG ulHelpTopic, const TCHAR * pchDevice, const TCHAR * pchResource, BOOL fAllowCancel = FALSE, BOOL *pfDidCancel = NULL ); }; // end of class PROFILE #endif // _WINPROF_HXX