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));
|
|||
|
}
|
|||
|
|