|
|
/*++
Copyright (c) 2002 Microsoft Corporation
Module Name:
Resonate.cpp
Abstract:
The name of the TCP loopback adapter was changed from MS Loopback Adapter to Microsoft Loopback Adapter. Resonate looks for the old name.
Notes:
This is an app specific shim.
History:
08/12/2002 robkenny Created
--*/
#include "precomp.h"
#include "Iphlpapi.h"
IMPLEMENT_SHIM_BEGIN(Resonate) #include "ShimHookMacro.h"
APIHOOK_ENUM_BEGIN APIHOOK_ENUM_ENTRY(GetAdaptersInfo) APIHOOK_ENUM_ENTRY(GetIfTable) APIHOOK_ENUM_ENTRY(GetIfEntry) APIHOOK_ENUM_END
typedef DWORD (*_pfn_GetAdaptersInfo)(PIP_ADAPTER_INFO pAdapterInfo, PULONG pOutBufLen); typedef DWORD (*_pfn_GetIfTable)( PMIB_IFTABLE pIfTable, PULONG pdwSize, BOOL bOrder ); typedef DWORD (*_pfn_GetIfEntry)( PMIB_IFROW pIfRow );
/*++
Convert the loopback adaptor name from Microsoft Loopback Adapter to MS Loopback Adapter
--*/
DWORD APIHOOK(GetAdaptersInfo)( PIP_ADAPTER_INFO pAdapterInfo, // buffer to receive data
PULONG pOutBufLen // size of data returned
) { DWORD dwRet = ORIGINAL_API(GetAdaptersInfo)(pAdapterInfo, pOutBufLen); if (dwRet == ERROR_SUCCESS) { DPFN(eDbgLevelInfo, "GetAdaptersInfo called successfully");
// Traverse the linked list, looking for the old name
for (PIP_ADAPTER_INFO ll = pAdapterInfo; ll != NULL; ll = ll->Next) { DPFN(eDbgLevelInfo, "Adapter Name(%s)", ll->AdapterName); DPFN(eDbgLevelInfo, "Adapter Desc(%s)", ll->Description); if (strcmp(ll->Description, "Microsoft Loopback Adapter") == 0) { (void)StringCchCopyA(ll->Description, MAX_ADAPTER_DESCRIPTION_LENGTH + 4, "MS Loopback Adapter"); LOGN(eDbgLevelError, "Changing name of loopback adapter to %s", ll->Description); break; } } }
return dwRet; }
DWORD APIHOOK(GetIfTable)( PMIB_IFTABLE pIfTable, // buffer for interface table
PULONG pdwSize, // size of buffer
BOOL bOrder // sort the table by index?
) { DWORD dwRet = ORIGINAL_API(GetIfTable)(pIfTable, pdwSize, bOrder); if (dwRet == NO_ERROR) { DPFN(eDbgLevelInfo, "GetIfTable called successfully");
// Traverse the array, looking for the old name
for (DWORD i = 0; i < pIfTable->dwNumEntries; ++i) { DPFN(eDbgLevelInfo, "Interface Name(%s)", pIfTable->table[i].bDescr); if (strcmp((const char *)pIfTable->table[i].bDescr, "Microsoft Loopback Adapter") == 0) { (void)StringCchCopyA((char *)pIfTable->table[i].bDescr, MAXLEN_IFDESCR, "MS LoopBack Driver"); LOGN(eDbgLevelError, "Changing name of interface to %s", pIfTable->table[i].bDescr); break; } } }
return dwRet; }
DWORD APIHOOK(GetIfEntry)( PMIB_IFROW pIfRow // pointer to interface entry
) { DWORD dwRet = ORIGINAL_API(GetIfEntry)(pIfRow); if (dwRet == NO_ERROR) { DPFN(eDbgLevelInfo, "GetIfEntry called successfully");
DPFN(eDbgLevelInfo, "Interface Name(%s)", pIfRow->bDescr); if (strcmp((const char *)pIfRow->bDescr, "Microsoft Loopback Adapter") == 0) { (void)StringCchCopyA((char *)pIfRow->bDescr, MAXLEN_IFDESCR, "MS LoopBack Driver"); LOGN(eDbgLevelError, "Changing name of interface to %s", pIfRow->bDescr); } }
return dwRet; }
/*++
Register hooked functions
--*/
HOOK_BEGIN
APIHOOK_ENTRY(Iphlpapi.DLL, GetAdaptersInfo) APIHOOK_ENTRY(Iphlpapi.DLL, GetIfTable) APIHOOK_ENTRY(Iphlpapi.DLL, GetIfEntry)
HOOK_END
IMPLEMENT_SHIM_END
|