BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpReserved ) { if( fdwReason == DLL_PROCESS_ATTACH ) { if( MH_Initialize() != MH_OK ) { return FALSE; } if( MH_CreateHook(&CreateProcessA, &HookedCreateProcessA, reinterpret_cast<void**>(&OrigCreateProcessA)) != MH_OK ) { return FALSE; } if( MH_EnableHook(&CreateProcessA) != MH_OK ) { return FALSE; } if( MH_CreateHook(&CreateProcessW, &HookedCreateProcessW, reinterpret_cast<void**>(&OrigCreateProcessW)) != MH_OK ) { return FALSE; } if( MH_EnableHook(&CreateProcessW) != MH_OK ) { return FALSE; } if( MH_CreateHook(&ResumeThread, &HookedResumeThread, reinterpret_cast<void**>(&OrigResumeThread)) != MH_OK ) { return FALSE; } if( MH_EnableHook(&ResumeThread) != MH_OK ) { return FALSE; } if( MH_CreateHook(&LoadLibraryW, &HookedLoadLibraryW, reinterpret_cast<void**>(&OrigLoadLibraryW)) != MH_OK ) { return FALSE; } if( MH_EnableHook(&LoadLibraryW) != MH_OK ) { return FALSE; } HookD3D9(::GetModuleHandleW(L"d3d9.dll")); std::wstring moduleFilename = GetModulePath(hinstDLL); WstrToUtf8(moduleFilename, &g_moduleFilenameUtf8); } return TRUE; }
static void GetDNSPrefixes(StringTimeNode **head) { DWORD dwRetVal = 0; ULONG flags = GAA_FLAG_INCLUDE_PREFIX; ULONG family = AF_UNSPEC; PIP_ADAPTER_ADDRESSES pAddresses = NULL; ULONG outBufLen = 0; PIP_ADAPTER_ADDRESSES pCurrAddresses = NULL; outBufLen = sizeof(IP_ADAPTER_ADDRESSES); pAddresses = (IP_ADAPTER_ADDRESSES *)HEAP_ALLOC(outBufLen); if (pAddresses == NULL) return; // Make an initial call to GetAdaptersAddresses to get the // size needed into the outBufLen variable ULONG ret = GetAdaptersAddresses(family, flags, NULL, pAddresses, &outBufLen); if (ERROR_BUFFER_OVERFLOW == ret) { HEAP_FREE(pAddresses); pAddresses = (IP_ADAPTER_ADDRESSES *) HEAP_ALLOC(outBufLen); } if (pAddresses == NULL) return; dwRetVal = GetAdaptersAddresses(family, flags, NULL, pAddresses, &outBufLen); if (dwRetVal == NO_ERROR) { pCurrAddresses = pAddresses; while (pCurrAddresses) { WCHAR *dnsSuffix = pCurrAddresses->DnsSuffix; if (dnsSuffix && *dnsSuffix) { char *dnsSuffix2 = WstrToUtf8(dnsSuffix); StringTimeNodeAllocAndInsert(head, dnsSuffix2); free(dnsSuffix2); } pCurrAddresses = pCurrAddresses->Next; } } HEAP_FREE(pAddresses); return; }