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