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

278 lines
6.1 KiB
C

/*++
Copyright (c) 1998 Microsoft Corporation
Module Name:
sample\utils.c
Abstract:
The file contains utility functions
--*/
#include "precomp.h"
#pragma hdrstop
BOOL
IsProtocolInstalled(
IN DWORD dwProtocolId,
IN DWORD dwNameId,
IN DWORD dwLogUninstalled
)
/*++
Routine Description:
Finds if the protocol is already installed.
Arguments:
dwProtocolId - protocol id
dwNameId - protocol name
dwLogUninstalled - TRUE(if not installed display error)
FALSE(if installed display error)
Return Value:
TRUE if protocol already installed, else FALSE
--*/
{
DWORD dwErr = NO_ERROR;
WCHAR *pwszName = NULL;
dwErr = IpmontrGetInfoBlockFromGlobalInfo(dwProtocolId,
NULL,
NULL,
NULL);
pwszName = MakeString(g_hModule, dwNameId);
if ((dwErr isnot NO_ERROR) and (dwLogUninstalled is TRUE))
{
DisplayError(g_hModule, EMSG_PROTO_NOT_INSTALLED, pwszName);
}
else if ((dwErr is NO_ERROR) and (dwLogUninstalled is FALSE))
{
DisplayError(g_hModule, EMSG_PROTO_INSTALLED, pwszName);
}
if (pwszName) FreeString(pwszName);
return (dwErr is NO_ERROR) ? TRUE : FALSE;
}
DWORD
GetIfIndex(
IN HANDLE hMibServer,
IN PWCHAR pwszArgument,
OUT PDWORD pdwIfIndex
)
/*++
Routine Description:
Gets the interface index.
Arguments:
hMibServer - handle to the mib server
pwszArgument - argument specifing interface index or name
pdwIfIndex - interface index
Return Value:
NO_ERROR success
error code o/w
--*/
{
DWORD dwErr = NO_ERROR;
// if index was specified just use it
if (iswdigit(pwszArgument[0]))
{
*pdwIfIndex = wcstoul(pwszArgument, NULL, 10);
return NO_ERROR;
}
// try converting a friendly name to an interface index
dwErr = InterfaceIndexFromName(hMibServer,
pwszArgument,
pdwIfIndex);
return (dwErr is NO_ERROR) ? dwErr : ERROR_INVALID_PARAMETER;
}
DWORD
MibGet(
IN HANDLE hMibServer,
IN MODE mMode,
IN PVOID pvIn,
IN DWORD dwInSize,
OUT PVOID *ppvOut
)
/*++
Routine Description:
Gets the specified mib object.
Arguments:
hMibServer - handle to the mib server
mMode - mode of access (exact, first, next)
pvIn - buffer containing input data
dwInSize - size of input data
ppvOut - pointer to address of output data buffer
Return Value:
NO_ERROR success
error code o/w
--*/
{
DWORD dwErr = NO_ERROR;
DWORD dwOutSize = 0;
DWORD (APIENTRY *pfnMprGet) (
IN MIB_SERVER_HANDLE hMibServer,
IN DWORD dwProtocolId,
IN DWORD dwRoutingPid,
IN LPVOID lpInEntry,
IN DWORD dwInEntrySize,
OUT LPVOID* lplpOutEntry,
OUT LPDWORD lpOutEntrySize
);
*ppvOut = NULL;
switch(mMode)
{
case GET_EXACT:
pfnMprGet = MprAdminMIBEntryGet;
break;
case GET_FIRST:
pfnMprGet = MprAdminMIBEntryGetFirst;
break;
case GET_NEXT:
pfnMprGet = MprAdminMIBEntryGetNext;
break;
}
dwErr = (*pfnMprGet) (
hMibServer,
PID_IP,
MS_IP_SAMPLE,
(LPVOID) pvIn,
dwInSize,
(LPVOID *) ppvOut,
&dwOutSize);
if (dwErr isnot NO_ERROR)
return dwErr;
if (*ppvOut is NULL)
return ERROR_CAN_NOT_COMPLETE;
return NO_ERROR;
}
DWORD
GetDumpString (
IN HANDLE hModule,
IN DWORD dwValue,
IN PVALUE_TOKEN ptvTable,
IN DWORD dwNumArgs,
OUT PWCHAR *pwszString
)
/*
* Do not localize display string
*/
{
DWORD dwErr = NO_ERROR ;
ULONG i;
for (i = 0; i < dwNumArgs; i++)
{
if (dwValue is ptvTable[i].dwValue)
{
*pwszString = MALLOC((wcslen(ptvTable[i].pwszToken) + 1) *
sizeof(WCHAR));
if (*pwszString)
wcscpy(*pwszString, ptvTable[i].pwszToken);
break;
}
}
if (i is dwNumArgs)
*pwszString = MakeString(hModule, STRING_UNKNOWN) ;
if (!pwszString)
dwErr = ERROR_NOT_ENOUGH_MEMORY ;
return dwErr ;
}
DWORD
GetShowString (
IN HANDLE hModule,
IN DWORD dwValue,
IN PVALUE_STRING ptvTable,
IN DWORD dwNumArgs,
OUT PWCHAR *pwszString
)
/*
* Localize display string
*/
{
DWORD dwErr = NO_ERROR ;
ULONG i;
for (i = 0; i < dwNumArgs; i++)
{
if (dwValue is ptvTable[i].dwValue)
{
*pwszString = MakeString(hModule, ptvTable[i].dwStringId) ;
break;
}
}
if (i is dwNumArgs)
*pwszString = MakeString(hModule, STRING_UNKNOWN) ;
if (!pwszString)
dwErr = ERROR_NOT_ENOUGH_MEMORY ;
return dwErr ;
}
DWORD
GetString (
IN HANDLE hModule,
IN FORMAT fFormat,
IN DWORD dwValue,
IN PVALUE_TOKEN vtTable,
IN PVALUE_STRING vsTable,
IN DWORD dwNumArgs,
OUT PWCHAR *pwszString)
{
if (fFormat is FORMAT_DUMP)
{
return GetDumpString(hModule,
dwValue,
vtTable,
dwNumArgs,
pwszString) ;
}
else
{
return GetShowString(hModule,
dwValue,
vsTable,
dwNumArgs,
pwszString) ;
}
}