DNSリゾルバキャッシュをクリアする
ipconfigコマンドならipconfig /flushdnsからクリアできるリゾルバキャッシュをAPIから削除する時は、
DnsAPI.dllのDnsFlushResolverCache()を用いる。
この関数、どうやら非公開っぽい*1ので直接DnsAPI.dllからLoadLibrary()してGetProcAddress()する方向で行く。
以下僕が書いたサンプルコード
#include <windows.h> BOOL DnsFlush() { // DnsFlushResolverCache()格納用 BOOL (WINAPI *DnsFlush)() = NULL; // DnsAPI.dll読み込み HMODULE hModule = LoadLibrary(TEXT("DnsAPI.dll")); if(hModule == NULL) { MessageBox(NULL, TEXT("DnsAPI.dllの読み込みに失敗しました"), TEXT("LoadLibrary Error"), MB_OK | MB_ICONERROR); return FALSE; } // DnsFlushResolverCache()を読み込む DnsFlush = (BOOL (WINAPI*)())GetProcAddress(hModule, TEXT("DnsFlushResolverCache")); if(DnsFlush == NULL) { MessageBox(NULL, TEXT("DnsFlushResolverCache()の読み込みに失敗"), TEXT("GetProcAddress Error"), MB_OK | MB_ICONERROR); FreeLibrary(hModule); return FALSE; } // DNSキャッシュを消しちゃうよ~ BOOL result = DnsFlush(); FreeLibrary(hModule); return result; } int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance , LPSTR lpCmdLine , int nCmdShow) { if(DnsFlush() == TRUE) { MessageBox(NULL, TEXT("DNSキャッシュを削除しました"), TEXT("Success"), MB_OK | MB_ICONINFORMATION); } else { MessageBox(NULL, TEXT("DNSキャッシュの削除に失敗しました"), TEXT("Error"), MB_OK | MB_ICONERROR); } return 0; }