190 lines
5.6 KiB
C
190 lines
5.6 KiB
C
|
/*++
|
||
|
|
||
|
Copyright (c) 1999, Microsoft Corporation
|
||
|
|
||
|
Module Name:
|
||
|
|
||
|
sample\utils.h
|
||
|
|
||
|
Abstract:
|
||
|
|
||
|
The file contains the header for utils.c.
|
||
|
|
||
|
--*/
|
||
|
|
||
|
|
||
|
// definitions...
|
||
|
|
||
|
#define is ==
|
||
|
#define isnot !=
|
||
|
#define or ||
|
||
|
#define and &&
|
||
|
#define ever ;;
|
||
|
|
||
|
#define GetGlobalConfiguration IpmontrGetInfoBlockFromGlobalInfo
|
||
|
#define SetGlobalConfiguration IpmontrSetInfoBlockInGlobalInfo
|
||
|
#define DeleteGlobalConfiguration IpmontrDeleteInfoBlockFromGlobalInfo
|
||
|
|
||
|
#define GetInterfaceConfiguration IpmontrGetInfoBlockFromInterfaceInfo
|
||
|
#define SetInterfaceConfiguration IpmontrSetInfoBlockInInterfaceInfo
|
||
|
#define DeleteInterfaceConfiguration IpmontrDeleteInfoBlockFromInterfaceInfo
|
||
|
|
||
|
#define InterfaceNameFromGuid IpmontrGetFriendlyNameFromIfName
|
||
|
#define InterfaceGuidFromName IpmontrGetIfNameFromFriendlyName
|
||
|
#define InterfaceNameFromIndex IpmontrGetFriendlyNameFromIfIndex
|
||
|
#define InterfaceIndexFromName IpmontrGetIfIndexFromFriendlyName
|
||
|
|
||
|
#define DeleteProtocol IpmontrDeleteProtocol
|
||
|
|
||
|
|
||
|
|
||
|
// typedefs...
|
||
|
|
||
|
typedef enum { GET_EXACT, GET_FIRST, GET_NEXT } MODE;
|
||
|
|
||
|
typedef enum { FORMAT_TABLE, FORMAT_VERBOSE, FORMAT_DUMP } FORMAT;
|
||
|
|
||
|
typedef DWORD (*PGET_INDEX_FUNCTION) (
|
||
|
IN HANDLE hMibServer,
|
||
|
IN PWCHAR pwszArgument,
|
||
|
OUT PDWORD pdwIfIndex
|
||
|
);
|
||
|
|
||
|
typedef VOID (*PPRINT_FUNCTION)(
|
||
|
IN HANDLE hConsole,
|
||
|
IN HANDLE hMibServer,
|
||
|
IN PVOID pvOutput,
|
||
|
IN FORMAT fFormat
|
||
|
);
|
||
|
|
||
|
typedef struct _MIB_OBJECT_ENTRY
|
||
|
{
|
||
|
PWCHAR pwszObjectName;
|
||
|
DWORD dwObjectId;
|
||
|
PGET_INDEX_FUNCTION pfnGetIndex;
|
||
|
DWORD dwHeaderMessageId;
|
||
|
PPRINT_FUNCTION pfnPrint;
|
||
|
} MIB_OBJECT_ENTRY, *PMIB_OBJECT_ENTRY;
|
||
|
|
||
|
|
||
|
|
||
|
// macros...
|
||
|
|
||
|
#define VerifyInstalled(dwProtocolId, dwNameId) \
|
||
|
{ \
|
||
|
if (!IsProtocolInstalled(dwProtocolId, dwNameId, TRUE)) \
|
||
|
return ERROR_SUPPRESS_OUTPUT; \
|
||
|
}
|
||
|
|
||
|
#define ProcessError() \
|
||
|
{ \
|
||
|
if (dwErr is ERROR_INVALID_PARAMETER) \
|
||
|
{ \
|
||
|
DisplayError(g_hModule, \
|
||
|
EMSG_BAD_OPTION_VALUE, \
|
||
|
ppwcArguments[dwCurrentIndex + i], \
|
||
|
pttTags[pdwTagType[i]].pwszTag); \
|
||
|
dwErr = ERROR_SHOW_USAGE; \
|
||
|
} \
|
||
|
}
|
||
|
|
||
|
#define UnicodeIpAddress(pwszUnicodeIpAddress, pszAsciiIpAddress) \
|
||
|
MultiByteToWideChar(GetConsoleOutputCP(), \
|
||
|
0, \
|
||
|
(pszAsciiIpAddress), \
|
||
|
-1, \
|
||
|
(pwszUnicodeIpAddress), \
|
||
|
ADDR_LENGTH + 1)
|
||
|
|
||
|
#define INET_NTOA(x) (inet_ntoa(*(struct in_addr*)&(x)))
|
||
|
|
||
|
#define MALLOC(x) HeapAlloc(GetProcessHeap(), 0, x)
|
||
|
|
||
|
#define FREE(x) HeapFree(GetProcessHeap(), 0, x)
|
||
|
|
||
|
|
||
|
|
||
|
// inline functions...
|
||
|
|
||
|
BOOL
|
||
|
__inline
|
||
|
IsInterfaceInstalled(
|
||
|
IN PWCHAR pwszInterfaceGuid,
|
||
|
IN DWORD dwProtocolId
|
||
|
)
|
||
|
{
|
||
|
DWORD dwErr = NO_ERROR;
|
||
|
PBYTE pbBuffer = NULL;
|
||
|
|
||
|
dwErr = GetInterfaceConfiguration(pwszInterfaceGuid,
|
||
|
dwProtocolId,
|
||
|
&pbBuffer,
|
||
|
NULL,
|
||
|
NULL,
|
||
|
NULL);
|
||
|
if (pbBuffer) FREE(pbBuffer);
|
||
|
return (dwErr is NO_ERROR);
|
||
|
}
|
||
|
|
||
|
DWORD
|
||
|
__inline
|
||
|
QuotedInterfaceNameFromGuid (
|
||
|
IN PWCHAR pwszInterfaceGuid,
|
||
|
OUT PWCHAR *ppwszQuotedInterfaceName
|
||
|
)
|
||
|
{
|
||
|
DWORD dwErr = NO_ERROR;
|
||
|
DWORD dwSize = MAX_INTERFACE_NAME_LEN + 1;
|
||
|
WCHAR pwszInterfaceName[MAX_INTERFACE_NAME_LEN + 1] = L"\0";
|
||
|
|
||
|
dwErr = InterfaceNameFromGuid(pwszInterfaceGuid,
|
||
|
pwszInterfaceName,
|
||
|
&dwSize);
|
||
|
if (dwErr is NO_ERROR)
|
||
|
{
|
||
|
*ppwszQuotedInterfaceName = MakeQuotedString(pwszInterfaceName);
|
||
|
if (*ppwszQuotedInterfaceName is NULL)
|
||
|
dwErr = ERROR_NOT_ENOUGH_MEMORY;
|
||
|
}
|
||
|
|
||
|
return dwErr;
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
// functions...
|
||
|
|
||
|
BOOL
|
||
|
IsProtocolInstalled(
|
||
|
IN DWORD dwProtocolId,
|
||
|
IN DWORD dwNameId,
|
||
|
IN DWORD dwLogUninstalled
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
GetIfIndex(
|
||
|
IN HANDLE hMibServer,
|
||
|
IN PWCHAR pwszArgument,
|
||
|
OUT PDWORD pdwIfIndex
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
MibGet(
|
||
|
IN HANDLE hMibServer,
|
||
|
IN MODE mMode,
|
||
|
IN PVOID pvIn,
|
||
|
IN DWORD dwInSize,
|
||
|
OUT PVOID *ppvOut
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
GetString(
|
||
|
IN HANDLE hModule,
|
||
|
IN FORMAT fFormat,
|
||
|
IN DWORD dwValue,
|
||
|
IN PVALUE_TOKEN vtTable,
|
||
|
IN PVALUE_STRING vsTable,
|
||
|
IN DWORD dwNumArgs,
|
||
|
OUT PTCHAR *pptszString
|
||
|
);
|