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

178 lines
4.2 KiB
C

/*++
Copyright (c) 1999, Microsoft Corporation
Module Name:
sample\common.c
Abstract:
The file contains interactions with netsh and functions common across
all contexts registered by this helper DLL (IPSAMPLEMON).
--*/
#include "precomp.h"
#pragma hdrstop
// statics
static const GUID g_IpGuid = IPMONTR_GUID;
// generate a new GUID for each helper (uuidgen)
// aedb0ad8-1496-11d3-8005-08002bc35d9c
static const GUID g_MyGuid =
{ 0xaedb0ad8, 0x1496, 0x11d3, {0x80, 0x5, 0x8, 0x0, 0x2b, 0xc3, 0x5d, 0x9c} };
// globals...
// variables
HANDLE g_hModule; // set by DllMain
DWORD
WINAPI
IpsamplemonStartHelper(
IN CONST GUID *pguidParent,
IN DWORD dwVersion
)
/*++
Routine Description
Registers contexts. Called by netsh to start helper.
Arguments
pguidParent GUID of parent helper (IPMON)
dwVersion Version number of parent helper
Return Value
Error code returned from registering last context.
--*/
{
DWORD dwErr;
// the following types depend on the parent helper (IPMON)
IP_CONTEXT_ATTRIBUTES icaMyAttributes;
// register the SAMPLE context
SampleInitialize(); // initialize sample's global information
ZeroMemory(&icaMyAttributes, sizeof(icaMyAttributes));
icaMyAttributes.guidHelper = g_MyGuid; // context's helper
icaMyAttributes.dwVersion = g_ceSample.dwVersion;
icaMyAttributes.pwszContext = g_ceSample.pwszName;
icaMyAttributes.pfnDumpFn = g_ceSample.pfnDump;
icaMyAttributes.ulNumTopCmds= g_ceSample.ulNumTopCmds;
icaMyAttributes.pTopCmds = (CMD_ENTRY (*)[])
g_ceSample.pTopCmds;
icaMyAttributes.ulNumGroups = g_ceSample.ulNumGroupCmds;
icaMyAttributes.pCmdGroups = (CMD_GROUP_ENTRY (*)[])
g_ceSample.pGroupCmds;
dwErr = RegisterContext(&icaMyAttributes);
return dwErr;
}
DWORD
WINAPI
InitHelperDll(
IN DWORD dwNetshVersion,
OUT PNS_DLL_ATTRIBUTES pDllTable
)
/*++
Routine Description
Registers helper. Called by netsh.
Arguments
pUtilityTable netsh functions
pDllTable DLL attributes
Return Value
Error code returned from registering helper.
--*/
{
DWORD dwErr;
NS_HELPER_ATTRIBUTES nhaMyAttributes;
pDllTable->dwVersion = NETSH_VERSION_50;
pDllTable->pfnStopFn = NULL;
// Register helper. One option is to register a single helper that
// registers a context for each protocol supported. Alternatively we
// could register a different helper for each protocol, where each
// helper registers a single context. There's only a difference if we
// support sub-helpers. Since a sub-helper registers with a parent
// helper, not a parent context, it is valid in every context its
// parent helper registers.
ZeroMemory(&nhaMyAttributes, sizeof(NS_HELPER_ATTRIBUTES));
// attributes of this helper
// version
nhaMyAttributes.guidHelper = g_MyGuid;
nhaMyAttributes.dwVersion = SAMPLE_HELPER_VERSION;
// start function
nhaMyAttributes.pfnStart = IpsamplemonStartHelper;
// define stop function if need to perform cleanup before unload
nhaMyAttributes.pfnStop = NULL;
dwErr = RegisterHelper(&g_IpGuid, // GUID of parent helper (IPMON)
&nhaMyAttributes);
return dwErr;
}
BOOL
WINAPI
DllMain(
IN HINSTANCE hInstance,
IN DWORD dwReason,
IN PVOID pvImpLoad
)
/*++
Routine Description
DLL entry and exit point handler.
Arguments
hInstance Instance handle of DLL
dwReason Reason function called
pvImpLoad Implicitly loaded DLL?
Return Value
TRUE Successfully loaded DLL
--*/
{
switch(dwReason)
{
case DLL_PROCESS_ATTACH:
g_hModule = hInstance;
DisableThreadLibraryCalls(hInstance);
break;
case DLL_PROCESS_DETACH:
break;
default:
break;
}
return TRUE;
}