/*++ Copyright (c) 1991 Microsoft Corporation Module Name: resinfo.cxx Abstract: Contains the entry points for the WinNet Resource Info API supported by the Multi-Provider Router. The following functions are in this file: WNetGetResourceInformationW WNetGetResourceParentW Author: Anirudh Sahni (anirudhs) 27-Apr-1995 Environment: User Mode -Win32 Notes: Revision History: 27-Apr-1995 anirudhs Created 16-Oct-1995 anirudhs Converted to use MPR base classes 05-May-1999 jschwart Make provider addition/removal dynamic --*/ // // INCLUDES // #include "precomp.hxx" //=================================================================== // WNetGetResourceInformationW //=================================================================== class CGetResourceInformation : public CRoutedOperation { public: CGetResourceInformation( LPNETRESOURCEW lpNetResource, LPVOID lpBuffer, LPDWORD lpBufferSize, LPWSTR *lplpSystem ) : CRoutedOperation(DBGPARM("GetResourceInformation") PROVIDERFUNC(GetResourceInformation)), _lpNetResource(lpNetResource), _lpBuffer (lpBuffer), _lpBufferSize (lpBufferSize), _lplpSystem (lplpSystem) { } private: LPNETRESOURCEW _lpNetResource; LPVOID _lpBuffer; LPDWORD _lpBufferSize; LPWSTR * _lplpSystem; DECLARE_CROUTED }; DWORD CGetResourceInformation::ValidateRoutedParameters( LPCWSTR * ppProviderName, LPCWSTR * ppRemoteName, LPCWSTR * ppLocalName ) { if (!(ARGUMENT_PRESENT(_lpNetResource) && ARGUMENT_PRESENT(_lpBufferSize) && ARGUMENT_PRESENT(_lplpSystem))) { return WN_BAD_POINTER; } if (_lpNetResource->lpRemoteName == NULL) { return WN_BAD_NETNAME; } // // If there is an output buffer, probe it. // if (IS_BAD_BYTE_BUFFER(_lpBuffer, _lpBufferSize)) { return WN_BAD_POINTER; } *_lplpSystem = NULL; // // Set parameters used by base class. // *ppProviderName = _lpNetResource->lpProvider; *ppRemoteName = _lpNetResource->lpRemoteName; *ppLocalName = NULL; return WN_SUCCESS; } DWORD CGetResourceInformation::TestProvider( const PROVIDER * pProvider ) { ASSERT_INITIALIZED(NETWORK); return ( pProvider->GetResourceInformation( _lpNetResource, _lpBuffer, _lpBufferSize, _lplpSystem) ); } DWORD WNetGetResourceInformationW( LPNETRESOURCEW lpNetResource, LPVOID lpBuffer, LPDWORD lpBufferSize, LPWSTR *lplpSystem ) /*++ Routine Description: This API is used to find enumeration information for a resource (whose name is typically typed in by the user). Arguments: lpNetResource - lpBuffer - lpBufferSize - lplpSystem - Return Value: WN_SUCCESS - Indicates the operation was successful. Other errors - --*/ { CGetResourceInformation GetResInfo(lpNetResource, lpBuffer, lpBufferSize, lplpSystem); return (GetResInfo.Perform(TRUE)); } //=================================================================== // WNetGetResourceParentW //=================================================================== class CGetResourceParent : public CRoutedOperation { public: CGetResourceParent( LPNETRESOURCEW lpNetResource, LPVOID lpBuffer, LPDWORD lpBufferSize ) : CRoutedOperation(DBGPARM("GetResourceParent") PROVIDERFUNC(GetResourceParent)), _lpNetResource(lpNetResource), _lpBuffer (lpBuffer), _lpBufferSize (lpBufferSize) { } private: LPNETRESOURCEW _lpNetResource; LPVOID _lpBuffer; LPDWORD _lpBufferSize; DECLARE_CROUTED }; DWORD CGetResourceParent::ValidateRoutedParameters( LPCWSTR * ppProviderName, LPCWSTR * ppRemoteName, LPCWSTR * ppLocalName ) { if (!(ARGUMENT_PRESENT(_lpNetResource) && ARGUMENT_PRESENT(_lpBufferSize))) { return WN_BAD_POINTER; } if (_lpNetResource->lpRemoteName == NULL) { return WN_BAD_NETNAME; } // // Unlike Win95, we require a provider name. This allows our providers // to make several simplifying assumptions. // if (IS_EMPTY_STRING(_lpNetResource->lpProvider)) { return WN_BAD_PROVIDER; } // // If there is an output buffer, probe it. // if (IS_BAD_BYTE_BUFFER(_lpBuffer, _lpBufferSize)) { return WN_BAD_POINTER; } // // Set parameters used by base class. // *ppProviderName = _lpNetResource->lpProvider; *ppRemoteName = _lpNetResource->lpRemoteName; *ppLocalName = NULL; return WN_SUCCESS; } DWORD CGetResourceParent::TestProvider( const PROVIDER * pProvider ) { ASSERT_INITIALIZED(NETWORK); return ( pProvider->GetResourceParent( _lpNetResource, _lpBuffer, _lpBufferSize) ); } DWORD WNetGetResourceParentW( LPNETRESOURCEW lpNetResource, LPVOID lpBuffer, LPDWORD lpBufferSize ) /*++ Routine Description: This API is used to find enumeration information for a resource (whose name is typically typed in by the user). Arguments: lpNetResource - lpBuffer - lpBufferSize - Return Value: WN_SUCCESS - Indicates the operation was successful. Other errors - --*/ { CGetResourceParent GetResParent(lpNetResource, lpBuffer, lpBufferSize); return (GetResParent.Perform(TRUE)); }