/**********************************************************************/ /** Microsoft Windows NT **/ /** Copyright(c) Microsoft Corp., 1991 **/ /**********************************************************************/ /* * netname.hxx * NET_NAME class * * FILE HISTORY: * Yi-HsinS 12/8/91 Created, separated from sharebas.hxx * Yi-HsinS 12/15/91 Clean up for general use * * */ #ifndef _NETNAME_HXX_ #define _NETNAME_HXX_ enum NETNAME_TYPE { TYPE_UNKNOWN, TYPE_PATH_UNC, // the form \\server\share\path TYPE_PATH_ABS, // the form x:\path }; enum UNINITIALIZED_BOOL { BOOL_UNINITIALIZED = -1, BOOL_FALSE, BOOL_TRUE }; /************************************************************************* NAME: NET_NAME SYNOPSIS: The class for manipulating net names For now, it only accepts fully qualified path names. (1) UNC path -- \\server\share[\relativepath] e.g. \\myserver\myshare or \\myserver\myshare\mydir (2) ABS path -- x:[\relativepath] where x: is either local or redirected e.g. x:\bar\boo or x:\ or x: Assumptions : (a) constructed with \\computer\share\bar\boo (b) constructed with x:\bar\boo where x: is redirected to \\computer\share ( corresponds to c:\foo on \\computer ) (c) constructed with c:\bar\boo where c: is a local drive and the local computer name is \\computer Notes: The results in (a) will be in ( ) , the results in (b) will be in [ ] and the results in (c) will be the same as (b) unless otherwise stated in { }. INTERFACE: NET_NAME - constructor, takes an optional parameter indicating what type of path it should be. If not given, will try to see if the path is TYPE_PATH_UNC or TYPE_PATH_ABS. If it's neither one, then the constructor will fail with ERROR_INVALID_NAME. ~NET_NAME - destructor QueryComputerName - returns the name of the computer where the path physically resides. ( \\computer ) [ \\computer ] QueryShare - returns the share point ( share ) [ share ] { error: NERR_RemoteOnly } QueryDrive - returns the drive letter Empty string if constructed with UNC path ( "" ) [ x: ] { c: } QueryRelativePath - returns the relative path minus the drive letter or \\computer\share. ( Might be empty ) ( bar\boo ) [ bar\boo ] QueryLastComponent - returns the last component ( boo ) [ boo ] QueryServerShare - returns \\computer\share if not constructed with local absolute path. ( \\computer\share ) [ \\computer\myshare ] { error: NERR_RemoteOnly } QueryUNCPath - returns UNC path if not constructed with local absolute path. ( \\computer\share\bar\boo ) [ \\computer\share\bar\boo ] { error: NERR_RemoteOnly } QueryLocalPath - returns the local path of the resource on the \\computer ( c:\foo\bar\boo ) [ c:\foo\bar\boo ] { c:\bar\boo } QueryLocalDrive - returns the device of the resource on the \\computer ( c: ) [ c: ] { c: } QueryType - returns the type of the path, UNC path or absolute path ( TYPE_PATH_UNC ) [ TYPE_PATH_ABS ] IsLocal - returns TRUE if path is local, FALSE otherwise IsSharable - returns TRUE if the path is on a server, FALSE otherwise PARENT: BASE USES: NLS_STR CAVEATS: NOTES: All methods are optimized so that there is no overhead of hitting the redirector unless necessary . HISTORY: Yi-HsinS 12/5/91 ChuckC's proposed NET_NAME class Combined FULL_SHARE_NAME, UNC_NAME and RELATIVE_PATH_NAME to form NET_NAME Yi-HsinS 12/15/91 Clean up for general use and hit the redirector only when necessary. **************************************************************************/ DLL_CLASS NET_NAME : public BASE { private: NETNAME_TYPE _netNameType; NLS_STR _nlsComputer; NLS_STR _nlsShare; NLS_STR _nlsRelativePath; NLS_STR _nlsDrive; NLS_STR _nlsLocalPath; // Use UNINITIALIZED_BOOL instead of BOOL because we need a value // indicating it's not initialized yet. UNINITIALIZED_BOOL _fLocal; // Use UNINITIALIZED_BOOL instead of BOOL because we need a value // indicating it's not initialized yet. UNINITIALIZED_BOOL _fSharable; // Set the members of a UNC path APIERR SetUNCPath( const TCHAR *pszNetName ); // Set the members of an absolute path APIERR SetABSPath( const TCHAR *pszNetName ); // Get the device x: information if constructed with x:\..\.. APIERR GetDeviceInfo( void ); public: NET_NAME( const TCHAR *pszNetName, NETNAME_TYPE netNameType = TYPE_UNKNOWN ); ~NET_NAME(); APIERR QueryComputerName( NLS_STR *pnlsComp ); APIERR QueryShare( NLS_STR *pnlsShare ); APIERR QueryDrive( NLS_STR *pnlsDrive ); APIERR QueryRelativePath( NLS_STR *pnlsRelPath ); APIERR QueryLastComponent( NLS_STR *pnlsLastComp ); APIERR QueryServerShare( NLS_STR *pnlsServerShare ); APIERR QueryUNCPath( NLS_STR *pnlsUNCPath ); APIERR QueryLocalPath( NLS_STR *pnlsLocalPath ); APIERR QueryLocalDrive( NLS_STR *pnlsLocalDrive ); NETNAME_TYPE QueryType( void ) { return _netNameType; } BOOL IsLocal( APIERR *perr ); BOOL IsSharable( APIERR *perr ); }; #endif