Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

202 lines
5.7 KiB

// This contains all the functions that are currently directly called inside the class managers from netman
// In order to move the class managers out later, these functions should stop being used.
#include "pch.h"
#pragma hdrstop
#define NO_CM_SEPERATE_NAMESPACES
#include "nmbase.h"
#include "cmdirect.h"
// Don't try moving these function to an inline in cmdirect.h. It won't work - it requires
// access to CDialupConnection in the root namespace, which is not defined unless
// NO_CM_SEPERATE_NAMESPACES is defined.
namespace CMDIRECT
{
namespace DIALUP
{
HRESULT CreateWanConnectionManagerEnumConnectionInstance(
NETCONMGR_ENUM_FLAGS Flags,
REFIID riid,
VOID** ppv)
{
return CWanConnectionManagerEnumConnection::CreateInstance(
Flags,
riid,
ppv);
}
HRESULT CreateInstanceFromDetails(
const RASENUMENTRYDETAILS* pEntryDetails,
REFIID riid,
VOID** ppv)
{
return CDialupConnection::CreateInstanceFromDetails (
pEntryDetails,
riid,
ppv);
}
}
namespace INBOUND
{
HRESULT CreateInstance (
IN BOOL fIsConfigConnection,
IN HRASSRVCONN hRasSrvConn,
IN PCWSTR pszwName,
IN PCWSTR pszwDeviceName,
IN DWORD dwType,
IN const GUID* pguidId,
IN REFIID riid,
OUT VOID** ppv)
{
return CInboundConnection::CreateInstance(fIsConfigConnection, hRasSrvConn, pszwName, pszwDeviceName, dwType, pguidId, riid, ppv);
}
}
}
#include "nmbase.h"
#include "conman.h"
#include "cmutil.h"
#include "ncras.h"
#include "diag.h"
#include "cmdirect.h"
// These functions are exported from class managers
EXTERN_C
VOID
WINAPI
NetManDiagFromCommandArgs (IN const DIAG_OPTIONS * pOptions)
{
Assert (pOptions);
Assert (pOptions->pDiagCtx);
g_pDiagCtx = pOptions->pDiagCtx;
INetConnectionManager * pConMan;
CMDIRECT(LANCON, HrInitializeConMan)(&pConMan);
switch (pOptions->Command)
{
case CMD_SHOW_LAN_CONNECTIONS:
CMDIRECT(LANCON, CmdShowLanConnections)(pOptions, pConMan);
break;
case CMD_SHOW_ALL_DEVICES:
CMDIRECT(LANCON, CmdShowAllDevices)(pOptions, pConMan);
break;
case CMD_SHOW_LAN_DETAILS:
CMDIRECT(LANCON, CmdShowLanDetails)(pOptions, pConMan);
break;
case CMD_LAN_CHANGE_STATE:
CMDIRECT(LANCON, CmdLanChangeState)(pOptions, pConMan);
break;
default:
break;
}
CMDIRECT(LANCON, HrUninitializeConMan(pConMan));
g_pDiagCtx = NULL;
}
#include "raserror.h"
//+---------------------------------------------------------------------------
//
// Function: HrRasConnectionNameFromGuid
//
// Purpose: Exported API used by iphlpapi et. al. to get the connection
// of a RAS connection given its GUID.
//
// Arguments:
// guid [in] The guid id representing the connection.
// pszwName [out] Pointer to a buffer to store the name.
// pcchMax [inout] On input, the length, in characters, of the buffer
// including the null terminator. On output, the
// length of the string including the null terminator
// (if it was written) or the length of the buffer
// required.
//
// Returns: HRESULT_FROM_WIN32(ERROR_NOT_FOUND) if the entry was not found.
// HRESULT_FROM_WIN32(ERROR_INSUFFICIENT_BUFFER)
// S_OK
//
// Author: shaunco 23 Sep 1998
//
// Notes:
//
EXTERN_C
HRESULT
WINAPI
HrRasConnectionNameFromGuid (
IN REFGUID guid,
OUT PWSTR pszwName,
IN OUT DWORD* pcchMax)
{
Assert (pszwName);
Assert (pcchMax);
// Initialize the output parameter.
//
*pszwName = NULL;
// We now need to enumerate all entries in this phonebook and
// find our details record with the matching guidId.
//
RASENUMENTRYDETAILS* aRasEntryDetails;
DWORD cRasEntryDetails;
HRESULT hr;
hr = HrRasEnumAllEntriesWithDetails (
NULL,
&aRasEntryDetails,
&cRasEntryDetails);
if (SUCCEEDED(hr))
{
RASENUMENTRYDETAILS* pDetails;
// Assume we don't find the entry.
//
hr = HRESULT_FROM_WIN32 (ERROR_NOT_FOUND);
for (DWORD i = 0; i < cRasEntryDetails; i++)
{
pDetails = &aRasEntryDetails[i];
if (pDetails->guidId == guid)
{
// Only copy the string if the caller has enough room in
// the output buffer.
//
hr = HRESULT_FROM_WIN32 (ERROR_INSUFFICIENT_BUFFER);
DWORD cchRequired = wcslen(pDetails->szEntryName) + 1;
if (cchRequired <= *pcchMax)
{
lstrcpynW (pszwName, pDetails->szEntryName, *pcchMax);
hr = S_OK;
}
*pcchMax = cchRequired;
break;
}
}
MemFree (aRasEntryDetails);
}
else if (HRESULT_FROM_WIN32(ERROR_CANNOT_OPEN_PHONEBOOK) == hr)
{
hr = HRESULT_FROM_WIN32(ERROR_NOT_FOUND);
}
TraceError ("HrRasConnectionNameFromGuid", hr);
return hr;
}