diff --git a/dll/win32/dnsapi/CMakeLists.txt b/dll/win32/dnsapi/CMakeLists.txt index 2dcfaa0a84b..a0edb35c99b 100644 --- a/dll/win32/dnsapi/CMakeLists.txt +++ b/dll/win32/dnsapi/CMakeLists.txt @@ -1,9 +1,12 @@ include_directories( include + ${REACTOS_SOURCE_DIR}/sdk/include/reactos/idl ${REACTOS_SOURCE_DIR}/sdk/lib/3rdparty/adns/src ${REACTOS_SOURCE_DIR}/sdk/lib/3rdparty/adns/adns_win32) +add_rpc_files(client ${REACTOS_SOURCE_DIR}/sdk/include/reactos/idl/dnsrslvr.idl) + add_definitions(-DADNS_JGAA_WIN32 -D_CRT_NO_POSIX_ERROR_CODES) spec2def(dnsapi.dll dnsapi.spec ADD_IMPORTLIB) @@ -14,8 +17,10 @@ list(APPEND SOURCE dnsapi/names.c dnsapi/query.c dnsapi/record.c + dnsapi/rpc.c dnsapi/stubs.c - dnsapi/precomp.h) + dnsapi/precomp.h + ${CMAKE_CURRENT_BINARY_DIR}/dnsrslvr_c.c) add_library(dnsapi MODULE ${SOURCE} @@ -23,7 +28,7 @@ add_library(dnsapi MODULE ${CMAKE_CURRENT_BINARY_DIR}/dnsapi.def) set_module_type(dnsapi win32dll) -target_link_libraries(dnsapi adns) -add_importlibs(dnsapi advapi32 user32 ws2_32 iphlpapi msvcrt kernel32 ntdll) +target_link_libraries(dnsapi adns ${PSEH_LIB}) +add_importlibs(dnsapi advapi32 rpcrt4 user32 ws2_32 iphlpapi msvcrt kernel32 ntdll) add_pch(dnsapi dnsapi/precomp.h SOURCE) add_cd_file(TARGET dnsapi DESTINATION reactos/system32 FOR all) diff --git a/dll/win32/dnsapi/dnsapi/precomp.h b/dll/win32/dnsapi/dnsapi/precomp.h index 687e67f5947..e792a4779fa 100644 --- a/dll/win32/dnsapi/dnsapi/precomp.h +++ b/dll/win32/dnsapi/dnsapi/precomp.h @@ -25,6 +25,8 @@ #define NTOS_MODE_USER #include +#include + /* Internal DNSAPI Headers */ #include diff --git a/dll/win32/dnsapi/dnsapi/query.c b/dll/win32/dnsapi/dnsapi/query.c index 7b40b09a867..2daa2803663 100644 --- a/dll/win32/dnsapi/dnsapi/query.c +++ b/dll/win32/dnsapi/dnsapi/query.c @@ -1072,3 +1072,26 @@ DnsIntFreeRecordList(PDNS_RECORD ToDelete) ToDelete = next; } } + +BOOL +WINAPI +DnsFlushResolverCache(VOID) +{ + DNS_STATUS Status = ERROR_SUCCESS; + + DPRINT("DnsFlushResolverCache()\n"); + + RpcTryExcept + { + Status = R_ResolverFlushCache(NULL); + DPRINT("R_ResolverFlushCache() returned %lu\n", Status); + } + RpcExcept(EXCEPTION_EXECUTE_HANDLER) + { + Status = RpcExceptionCode(); + DPRINT("Exception returned %lu\n", Status); + } + RpcEndExcept; + + return (Status == ERROR_SUCCESS); +} diff --git a/dll/win32/dnsapi/dnsapi/rpc.c b/dll/win32/dnsapi/dnsapi/rpc.c new file mode 100644 index 00000000000..528f87e6b7e --- /dev/null +++ b/dll/win32/dnsapi/dnsapi/rpc.c @@ -0,0 +1,75 @@ +#define WIN32_NO_STATUS +#define _INC_WINDOWS +#define COM_NO_WINDOWS_H +#include +#include +#include +#include + +#define NDEBUG +#include + +handle_t __RPC_USER +DNSRSLVR_HANDLE_bind(DNSRSLVR_HANDLE pszMachineName) +{ + handle_t hBinding = NULL; + LPWSTR pszStringBinding; + RPC_STATUS Status; + + DPRINT1("DNSRSLVR_HANDLE_bind(%S)\n", pszMachineName); + + Status = RpcStringBindingComposeW(NULL, + L"ncalrpc", + pszMachineName, + L"DNSResolver", + NULL, + &pszStringBinding); + if (Status != RPC_S_OK) + { + DPRINT1("RpcStringBindingCompose returned 0x%x\n", Status); + return NULL; + } + + /* Set the binding handle that will be used to bind to the server. */ + Status = RpcBindingFromStringBindingW(pszStringBinding, + &hBinding); + if (Status != RPC_S_OK) + { + DPRINT1("RpcBindingFromStringBinding returned 0x%x\n", Status); + } + + Status = RpcStringFreeW(&pszStringBinding); + if (Status != RPC_S_OK) + { + DPRINT1("RpcStringFree returned 0x%x\n", Status); + } + + return hBinding; +} + +void __RPC_USER +DNSRSLVR_HANDLE_unbind(DNSRSLVR_HANDLE pszMachineName, + handle_t hBinding) +{ + RPC_STATUS Status; + + DPRINT("DNSRSLVR_HANDLE_unbind(%S)\n", pszMachineName); + + Status = RpcBindingFree(&hBinding); + if (Status != RPC_S_OK) + { + DPRINT1("RpcBindingFree returned 0x%x\n", Status); + } +} + +void __RPC_FAR * __RPC_USER +midl_user_allocate(SIZE_T len) +{ + return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len); +} + +void __RPC_USER +midl_user_free(void __RPC_FAR * ptr) +{ + HeapFree(GetProcessHeap(), 0, ptr); +} \ No newline at end of file diff --git a/dll/win32/dnsapi/dnsapi/stubs.c b/dll/win32/dnsapi/dnsapi/stubs.c index 2832270d36b..f474f34695b 100644 --- a/dll/win32/dnsapi/dnsapi/stubs.c +++ b/dll/win32/dnsapi/dnsapi/stubs.c @@ -216,13 +216,6 @@ DnsFindAuthoritativeZone() return ERROR_OUTOFMEMORY; } -BOOL WINAPI -DnsFlushResolverCache(VOID) -{ - UNIMPLEMENTED; - return TRUE; -} - BOOL WINAPI DnsFlushResolverCacheEntry_A(PCSTR entry) {