278 lines
6.1 KiB
C
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) ;
|
|
}
|
|
}
|