167 lines
5.1 KiB
C++
167 lines
5.1 KiB
C++
/**********************************************************************/
|
|
/** Microsoft Windows/NT **/
|
|
/** Copyright(c) Microsoft Corporation, 1997 - 1999 **/
|
|
/**********************************************************************/
|
|
|
|
/*
|
|
ndisutil.cpp
|
|
|
|
FILE HISTORY:
|
|
|
|
*/
|
|
|
|
#include "stdafx.h"
|
|
#include "ndisutil.h"
|
|
#include "rtrstr.h"
|
|
|
|
#include "raserror.h"
|
|
|
|
#include "ustringp.h"
|
|
#include <ndispnp.h>
|
|
|
|
|
|
|
|
//-------------------------------------------------------------------
|
|
// Function: HrSendNdisHandlePnpEvent
|
|
//
|
|
// Purpose: Send to Ndis a HandlePnpEvent notification
|
|
//
|
|
// Parameters:
|
|
// uiLayer - either NDIS or TDI
|
|
// uiOperation - either BIND, RECONFIGURE, or UNBIND
|
|
// pszUpper - a WIDE string containing the upper component name
|
|
// pszLower - a WIDE string containing the lower component name
|
|
// This is one of the Export names from that component
|
|
// The values NULL and c_szEmpty are both supported
|
|
// pmszBindList - a WIDE string containing the NULL terminiated list of strings
|
|
// representing the bindlist, vaid only for reconfigure
|
|
// The values NULL and c_szEmpty are both supported
|
|
// pvData - Pointer to ndis component notification data. Content
|
|
// determined by each component.
|
|
// dwSizeData - Count of bytes in pvData
|
|
//
|
|
// Returns: HRESULT S_OK on success, HrFromLastWin32Error otherwise
|
|
//
|
|
// Notes: Do not use this routine directly, see...
|
|
// HrSendNdisPnpBindOrderChange,
|
|
// HrSendNdisPnpBindStateChange, or
|
|
// HrSendNdisPnpReconfig
|
|
//
|
|
//-------------------------------------------------------------------
|
|
HRESULT
|
|
HrSendNdisHandlePnpEvent (
|
|
UINT uiLayer,
|
|
UINT uiOperation,
|
|
LPCWSTR pszUpper,
|
|
LPCWSTR pszLower,
|
|
LPCWSTR pmszBindList,
|
|
PVOID pvData,
|
|
DWORD dwSizeData)
|
|
{
|
|
UNICODE_STRING umstrBindList;
|
|
UNICODE_STRING ustrLower;
|
|
UNICODE_STRING ustrUpper;
|
|
UINT nRet;
|
|
HRESULT hr = S_OK;
|
|
|
|
Assert(NULL != pszUpper);
|
|
Assert((NDIS == uiLayer)||(TDI == uiLayer));
|
|
Assert( (BIND == uiOperation) || (RECONFIGURE == uiOperation) || (UNBIND == uiOperation) );
|
|
// AssertSz( FImplies( ((NULL != pmszBindList) && (0 != lstrlenW( pmszBindList ))),
|
|
// (RECONFIGURE == uiOperation) &&
|
|
// (TDI == uiLayer) &&
|
|
// (0 == lstrlenW( pszLower ))),
|
|
// "bind order change requires a bind list, no lower, only for TDI, and with Reconfig for the operation" );
|
|
|
|
// optional strings must be sent as empty strings
|
|
//
|
|
if (NULL == pszLower)
|
|
{
|
|
pszLower = c_szEmpty;
|
|
}
|
|
if (NULL == pmszBindList)
|
|
{
|
|
pmszBindList = c_szEmpty;
|
|
}
|
|
|
|
// build UNICDOE_STRINGs
|
|
SetUnicodeMultiString( &umstrBindList, pmszBindList );
|
|
SetUnicodeString( &ustrUpper, pszUpper );
|
|
SetUnicodeString( &ustrLower, pszLower );
|
|
|
|
// Now submit the notification
|
|
nRet = NdisHandlePnPEvent( uiLayer,
|
|
uiOperation,
|
|
&ustrLower,
|
|
&ustrUpper,
|
|
&umstrBindList,
|
|
(PVOID)pvData,
|
|
dwSizeData );
|
|
if (!nRet)
|
|
{
|
|
hr = HRESULT_FROM_WIN32(GetLastError());
|
|
}
|
|
|
|
// TraceError( "HrSendNdisHandlePnpEvent", hr );
|
|
return( hr );
|
|
}
|
|
|
|
|
|
|
|
//-------------------------------------------------------------------
|
|
// Function: HrSendNdisPnpReconfig
|
|
//
|
|
// Purpose: Send to Ndis a HandlePnpEvent reconfig notification
|
|
//
|
|
// Parameters: uiLayer - either NDIS or TDI
|
|
// wszUpper - a WIDE string containing the upper component name
|
|
// (typically a protocol)
|
|
// wszLower - a WIDE string containing the lower component name
|
|
// (typically an adapter bindname) The values NULL and
|
|
// c_szEmpty are both supported
|
|
// pvData - Pointer to ndis component notification data. Content
|
|
// determined by each component.
|
|
// dwSizeData - Count of bytes in pvData
|
|
//
|
|
// Returns: HRESULT S_OK on success, HrFromLastWin32Error otherwise
|
|
//
|
|
//-------------------------------------------------------------------
|
|
HRESULT
|
|
HrSendNdisPnpReconfig (
|
|
UINT uiLayer,
|
|
LPCWSTR wszUpper,
|
|
LPCWSTR wszLower,
|
|
PVOID pvData,
|
|
DWORD dwSizeData)
|
|
{
|
|
Assert(NULL != wszUpper);
|
|
Assert((NDIS == uiLayer)||(TDI == uiLayer));
|
|
|
|
if (NULL == wszLower)
|
|
{
|
|
wszLower = c_szEmpty;
|
|
}
|
|
|
|
CString strLower;
|
|
// tstring strLower;
|
|
|
|
// If a lower component is specified, prefix with "\Device\" else
|
|
// strLower's default of an empty string will be used.
|
|
if ( wszLower && lstrlenW(wszLower))
|
|
{
|
|
strLower = c_szDevice;
|
|
strLower += wszLower;
|
|
}
|
|
|
|
HRESULT hr = HrSendNdisHandlePnpEvent( uiLayer,
|
|
RECONFIGURE,
|
|
wszUpper,
|
|
strLower,
|
|
c_szEmpty,
|
|
pvData,
|
|
dwSizeData);
|
|
// TraceError( "HrSendNdisPnpReconfig", hr);
|
|
return hr;
|
|
}
|
|
|