From 3024259f84ffa9763e8ea00aef8e16a1a3f38d55 Mon Sep 17 00:00:00 2001 From: dmex Date: Tue, 21 May 2013 00:34:43 +0000 Subject: [PATCH] Plugins-Extra: DnsCachePlugin; dynamic dll import git-svn-id: svn://svn.code.sf.net/p/processhacker/code@5307 21ef857c-d57f-4fe0-8362-d861dc6d29cd --- 2.x/trunk/plugins-extra/DnsCachePlugin/main.c | 47 ++++++++++++++----- 1 file changed, 34 insertions(+), 13 deletions(-) diff --git a/2.x/trunk/plugins-extra/DnsCachePlugin/main.c b/2.x/trunk/plugins-extra/DnsCachePlugin/main.c index 21aa00be1..47082c557 100644 --- a/2.x/trunk/plugins-extra/DnsCachePlugin/main.c +++ b/2.x/trunk/plugins-extra/DnsCachePlugin/main.c @@ -25,7 +25,6 @@ #include "phappresource.h" #include "resource.h" -#pragma comment(lib, "Dnsapi.lib") #pragma comment(lib, "Ws2_32.lib") #include #include @@ -39,14 +38,27 @@ typedef struct _DNS_CACHE_ENTRY ULONG dwFlags; // DNS Record Flags } DNS_CACHE_ENTRY, *PDNS_CACHE_ENTRY; -typedef DNS_STATUS (WINAPI* _DnsGetCacheDataTable)(__inout PDNS_CACHE_ENTRY DnsCacheEntry); -typedef BOOL (WINAPI* _DnsFlushResolverCache)(VOID); -typedef BOOL (WINAPI* _DnsFlushResolverCacheEntry)(__in PCWSTR pszName); // , WORD type, DWORD options, PVOID servers, PDNS_RECORDW *result, PVOID *reserved - -static HINSTANCE DnsApiHandle; -static _DnsGetCacheDataTable DnsGetCacheDataTable_I; -static _DnsFlushResolverCache DnsFlushResolverCache_I; -static _DnsFlushResolverCacheEntry DnsFlushResolverCacheEntry_I; +typedef DNS_STATUS (WINAPI* _DnsGetCacheDataTable)( + __inout PDNS_CACHE_ENTRY DnsCacheEntry + ); +typedef BOOL (WINAPI* _DnsFlushResolverCache)( + VOID + ); +typedef BOOL (WINAPI* _DnsFlushResolverCacheEntry)( + __in PCWSTR pszName // , WORD type, DWORD options, PVOID servers, PDNS_RECORDW *result, PVOID *reserved + ); +typedef DNS_STATUS (WINAPI* _DnsQuery_W)( + __in PCWSTR pszName, + __in WORD wType, + __in DWORD Options, + __inout_opt PVOID pExtra, + __out __maybenull PDNS_RECORD* ppQueryResults, + __out_opt __maybenull PVOID* pReserved + ); +typedef VOID (WINAPI* _DnsFree)( + __inout PVOID pData, + __in DNS_FREE_TYPE FreeType + ); VOID NTAPI MenuItemCallback( __in_opt PVOID Parameter, @@ -63,6 +75,13 @@ INT_PTR CALLBACK DnsCacheDlgProc( __in LPARAM lParam ); +static HINSTANCE DnsApiHandle; +static _DnsQuery_W DnsQuery_I; +static _DnsFree DnsFree_I; +static _DnsGetCacheDataTable DnsGetCacheDataTable_I; +static _DnsFlushResolverCache DnsFlushResolverCache_I; +static _DnsFlushResolverCacheEntry DnsFlushResolverCacheEntry_I; + static HWND ListViewWndHandle; static PH_LAYOUT_MANAGER LayoutManager; static PPH_PLUGIN PluginInstance; @@ -169,7 +188,7 @@ static VOID EnumDnsCacheTable( NULL ); - DNS_STATUS hrstatus = DnsQuery( + DNS_STATUS hrstatus = DnsQuery_I( pEntryInfoPtr->pszName, pEntryInfoPtr->wType, DNS_QUERY_NO_WIRE_QUERY | 32768, // Oh?? @@ -196,13 +215,13 @@ static VOID EnumDnsCacheTable( PhDereferenceObject(ipTtlString); PhDereferenceObject(ipAddressString); - DnsRecordListFree(pQueryResultsSet, DnsFreeRecordList); + DnsFree_I(pQueryResultsSet, DnsFreeRecordList); } pEntryInfoPtr = pEntryInfoPtr->pNext; } - DnsRecordListFree(pEntryInfoPtr, DnsFreeRecordList); + DnsFree_I(pEntryInfoPtr, DnsFreeRecordList); } WSACleanup(); @@ -336,10 +355,12 @@ INT_PTR CALLBACK DnsCacheDlgProc( PhAddLayoutItem(&LayoutManager, GetDlgItem(hwndDlg, IDOK), NULL, PH_ANCHOR_BOTTOM | PH_ANCHOR_RIGHT); DnsApiHandle = LoadLibrary(TEXT("dnsapi.dll")); + DnsQuery_I = (_DnsQuery_W)GetProcAddress(DnsApiHandle, "DnsQuery_W"); + DnsFree_I = (_DnsFree)GetProcAddress(DnsApiHandle, "DnsFree"); DnsGetCacheDataTable_I = (_DnsGetCacheDataTable)GetProcAddress(DnsApiHandle, "DnsGetCacheDataTable"); DnsFlushResolverCache_I = (_DnsFlushResolverCache)GetProcAddress(DnsApiHandle, "DnsFlushResolverCache"); DnsFlushResolverCacheEntry_I = (_DnsFlushResolverCacheEntry)GetProcAddress(DnsApiHandle, "DnsFlushResolverCacheEntry_W"); - + EnumDnsCacheTable(ListViewWndHandle); } break;