/*++ 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) ; } }