windows-nt/Source/XPSP1/NT/net/rras/netsh/ipx/protocols/common.c
2020-09-26 16:20:57 +08:00

302 lines
7 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*++
Copyright (c) 1995 Microsoft Corporation
Module Name:
common.c
Abstract:
Common initialization functions for IPXPROMN.DLL
Author:
V Raman 1/5/1998
--*/
#include "precomp.h"
#pragma hdrstop
//
// GUID for IPXPROMN.DLL
//
// {d3fcba3a-a4e9-11d2-b944-00c04fc2ab1c}
//
static const GUID g_MyGuid =
{
0xd3fcba3a, 0xa4e9, 0x11d2,
{
0xb9, 0x44, 0x0, 0xc0, 0x4f, 0xc2, 0xab, 0x1c
}
};
static const GUID g_IpxGuid = IPXMONTR_GUID;
#define IPXPROMON_HELPER_VERSION 1
//
// ipxmon functions
//
PIM_DEL_INFO_BLK_IF DeleteInfoBlockFromInterfaceInfo ;
PIM_DEL_INFO_BLK_GLOBAL DeleteInfoBlockFromGlobalInfo ;
PIM_DEL_PROTO DeleteProtocol ;
PIM_GET_INFO_BLK_GLOBAL GetInfoBlockFromGlobalInfo ;
PIM_GET_INFO_BLK_IF GetInfoBlockFromInterfaceInfo ;
PIM_SET_INFO_BLK_GLOBAL SetInfoBlockInGlobalInfo ;
PIM_SET_INFO_BLK_IF SetInfoBlockInInterfaceInfo ;
PIM_IF_ENUM InterfaceEnum ;
PIM_GET_IF_TYPE GetInterfaceType ;
PIM_PROTO_LIST GetProtocolList ;
PIM_ROUTER_STATUS IsRouterRunning ;
PIM_MATCH_ROUT_PROTO MatchRoutingProtoTag ;
ULONG StartedCommonInitialization, CompletedCommonInitialization ;
HANDLE g_hModule;
//
// Handle to router being administered
//
HANDLE g_hMprConfig;
HANDLE g_hMprAdmin;
HANDLE g_hMIBServer;
BOOL
WINAPI
DllMain(
HINSTANCE hInstDll,
DWORD fdwReason,
LPVOID pReserved
)
{
HANDLE hDll;
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
{
// printf("Trying to attach\n");
g_hModule = hInstDll;
DisableThreadLibraryCalls(hInstDll);
break;
}
case DLL_PROCESS_DETACH:
{
//
// Clean up any structures used for commit
//
break;
}
default:
{
break;
}
}
return TRUE;
}
BOOL
IA64VersionCheck
(
IN UINT CIMOSType,
IN UINT CIMOSProductSuite,
IN LPCWSTR CIMOSVersion,
IN LPCWSTR CIMOSBuildNumber,
IN LPCWSTR CIMServicePackMajorVersion,
IN LPCWSTR CIMServicePackMinorVersion,
IN UINT CIMProcessorArchitecture,
IN DWORD dwReserved
)
{
if (CIMProcessorArchitecture == PROCESSOR_ARCHITECTURE_INTEL)// IA64=6 (x86 == 0)
return TRUE;
else
return FALSE;
}
DWORD
WINAPI
IpxpromonStartHelper(
IN CONST GUID *pguidParent,
IN DWORD dwVersion
)
{
DWORD dwErr;
NS_CONTEXT_ATTRIBUTES attMyAttributes;
//
// If you add any more contexts, then this should be converted
// to use an array instead of duplicating code!
//
//
// Register the RIP context
//
ZeroMemory(&attMyAttributes, sizeof(attMyAttributes));
attMyAttributes.pwszContext = L"rip";
attMyAttributes.guidHelper = g_MyGuid;
attMyAttributes.dwVersion = 1;
attMyAttributes.dwFlags = 0;
attMyAttributes.ulNumTopCmds= 0;
attMyAttributes.pTopCmds = NULL;
attMyAttributes.ulNumGroups = g_ulIpxRipNumGroups;
attMyAttributes.pCmdGroups = (CMD_GROUP_ENTRY (*)[])&g_IpxRipCmdGroups;
attMyAttributes.pfnDumpFn = IpxRipDump;
attMyAttributes.pfnConnectFn= ConnectToRouter;
attMyAttributes.pfnOsVersionCheck = IA64VersionCheck;
dwErr = RegisterContext( &attMyAttributes );
//
// Register the SAP context
//
ZeroMemory(&attMyAttributes, sizeof(attMyAttributes));
attMyAttributes.pwszContext = L"sap";
attMyAttributes.guidHelper = g_MyGuid;
attMyAttributes.dwVersion = 1;
attMyAttributes.dwFlags = 0;
attMyAttributes.ulNumTopCmds= 0;
attMyAttributes.pTopCmds = NULL;
attMyAttributes.ulNumGroups = g_ulIpxSapNumGroups;
attMyAttributes.pCmdGroups = (CMD_GROUP_ENTRY (*)[])&g_IpxSapCmdGroups;
attMyAttributes.pfnDumpFn = IpxSapDump;
attMyAttributes.pfnConnectFn= ConnectToRouter;
attMyAttributes.pfnOsVersionCheck = IA64VersionCheck;
dwErr = RegisterContext( &attMyAttributes );
//
// Register the NB context
//
ZeroMemory(&attMyAttributes, sizeof(attMyAttributes));
attMyAttributes.pwszContext = L"netbios";
attMyAttributes.guidHelper = g_MyGuid;
attMyAttributes.dwVersion = 1;
attMyAttributes.dwFlags = 0;
attMyAttributes.ulNumTopCmds= 0;
attMyAttributes.pTopCmds = NULL;
attMyAttributes.ulNumGroups = g_ulIpxNbNumGroups;
attMyAttributes.pCmdGroups = (CMD_GROUP_ENTRY (*)[])&g_IpxNbCmdGroups;
attMyAttributes.pfnDumpFn = IpxNbDump;
attMyAttributes.pfnConnectFn= ConnectToRouter;
attMyAttributes.pfnOsVersionCheck = IA64VersionCheck;
dwErr = RegisterContext( &attMyAttributes );
return dwErr;
}
DWORD WINAPI
InitHelperDll(
IN DWORD dwNetshVersion,
OUT PNS_DLL_ATTRIBUTES pDllTable
)
{
DWORD dwErr;
NS_HELPER_ATTRIBUTES attMyAttributes;
pDllTable->dwVersion = NETSH_VERSION_50;
pDllTable->pfnStopFn = NULL;
//
// Register helpers. We could either register 1 helper which
// registers three contexts, or we could register 3 helpers
// which each register one context. There's only a difference
// if we support sub-helpers, which this DLL does not.
// If we later support sub-helpers, then it's better to have
// 3 helpers so that sub-helpers can register with 1 of them,
// since it registers with a parent helper, not a parent context.
// For now, we just use a single 3-context helper for efficiency.
//
ZeroMemory( &attMyAttributes, sizeof(attMyAttributes) );
attMyAttributes.guidHelper = g_MyGuid;
attMyAttributes.dwVersion = IPXPROMON_HELPER_VERSION;
attMyAttributes.pfnStart = IpxpromonStartHelper;
attMyAttributes.pfnStop = NULL;
dwErr = RegisterHelper( &g_IpxGuid, &attMyAttributes );
return dwErr;
}
DWORD WINAPI
ConnectToRouter(
IN LPCWSTR pwszRouter
)
{
DWORD dwErr;
//
// Connect to router config if required
// (when is this ever required)
//
if ( !g_hMprConfig )
{
dwErr = MprConfigServerConnect( (LPWSTR)pwszRouter, &g_hMprConfig );
if ( dwErr isnot NO_ERROR )
{
return ERROR_CONNECT_REMOTE_CONFIG;
}
}
//
// Check to see if router is running. If so, get the handles
//
do
{
if ( MprAdminIsServiceRunning( (LPWSTR)pwszRouter ) )
{
if ( MprAdminServerConnect( (LPWSTR)pwszRouter, &g_hMprAdmin ) ==
NO_ERROR )
{
if ( MprAdminMIBServerConnect( (LPWSTR)pwszRouter, &g_hMIBServer ) ==
NO_ERROR )
{
// DEBUG("Got server handle");
break;
}
else
{
MprAdminServerDisconnect( g_hMprAdmin );
}
}
}
g_hMprAdmin = g_hMIBServer = NULL;
} while (FALSE);
return NO_ERROR;
}