Index: base/services/CMakeLists.txt =================================================================== --- base/services/CMakeLists.txt (revision 73174) +++ base/services/CMakeLists.txt (working copy) @@ -1,6 +1,7 @@ add_subdirectory(audiosrv) add_subdirectory(dhcpcsvc) +add_subdirectory(dnsrslvr) add_subdirectory(eventlog) add_subdirectory(rpcss) add_subdirectory(schedsvc) Index: base/services/dnsrslvr/CMakeLists.txt =================================================================== --- base/services/dnsrslvr/CMakeLists.txt (nonexistent) +++ base/services/dnsrslvr/CMakeLists.txt (working copy) @@ -0,0 +1,20 @@ + +include_directories(${REACTOS_SOURCE_DIR}/sdk/include/reactos/idl) +add_rpc_files(server ${REACTOS_SOURCE_DIR}/sdk/include/reactos/idl/dnsrslvr.idl) + +list(APPEND SOURCE + dnsrslvr.c + rpcserver.c + precomp.h + ${CMAKE_CURRENT_BINARY_DIR}/dnsrslvr_s.c) + +add_library(dnsrslvr SHARED ${SOURCE} dnsrslvr.rc) + +if(NOT MSVC) + target_link_libraries(dnsrslvr ${PSEH_LIB}) +endif() + +set_module_type(dnsrslvr win32dll UNICODE) +add_importlibs(dnsrslvr advapi32 rpcrt4 iphlpapi msvcrt kernel32 ntdll) +add_pch(dnsrslvr precomp.h SOURCE) +add_cd_file(TARGET dnsrslvr DESTINATION reactos/system32 FOR all) Property changes on: base/services/dnsrslvr/CMakeLists.txt ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Index: base/services/dnsrslvr/dnsrslvr.c =================================================================== --- base/services/dnsrslvr/dnsrslvr.c (nonexistent) +++ base/services/dnsrslvr/dnsrslvr.c (working copy) @@ -0,0 +1,129 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS DNS Resolver + * FILE: base/services/dnsrslvr/dnsrslvr.c + * PURPOSE: DNS Resolver Service + * PROGRAMMER: Christoph von Wittich + */ + +/* INCLUDES *****************************************************************/ + +#include "precomp.h" + +#define NDEBUG +#include + +/* GLOBALS ******************************************************************/ + +#define SERVICE_NAME L"DNS-Client" + +SERVICE_STATUS_HANDLE ServiceStatusHandle; +SERVICE_STATUS SvcStatus; +static WCHAR ServiceName[] = L"Dnscache"; + +DWORD WINAPI RpcThreadRoutine(LPVOID lpParameter); + +/* FUNCTIONS *****************************************************************/ + +static void UpdateServiceStatus(HANDLE hServiceStatus, DWORD NewStatus, DWORD Increment) +{ + if (Increment > 0) + SvcStatus.dwCheckPoint += Increment; + else + SvcStatus.dwCheckPoint = 0; + + SvcStatus.dwCurrentState = NewStatus; + SetServiceStatus(hServiceStatus, &SvcStatus); +} + +static DWORD WINAPI +ServiceControlHandler(DWORD dwControl, + DWORD dwEventType, + LPVOID lpEventData, + LPVOID lpContext) +{ + switch (dwControl) + { + case SERVICE_CONTROL_SHUTDOWN: + case SERVICE_CONTROL_STOP: + UpdateServiceStatus(ServiceStatusHandle, SERVICE_STOP_PENDING, 1); + RpcMgmtStopServerListening(NULL); + UpdateServiceStatus(ServiceStatusHandle, SERVICE_STOPPED, 0); + break; + case SERVICE_CONTROL_INTERROGATE: + return NO_ERROR; + default: + return ERROR_CALL_NOT_IMPLEMENTED; + } + return NO_ERROR; +} + +static VOID CALLBACK +ServiceMain(DWORD argc, LPWSTR *argv) +{ + HANDLE hThread; + + UNREFERENCED_PARAMETER(argc); + UNREFERENCED_PARAMETER(argv); + + DPRINT("ServiceMain() called\n"); + + SvcStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS; + SvcStatus.dwCurrentState = SERVICE_START_PENDING; + SvcStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN; + SvcStatus.dwCheckPoint = 0; + SvcStatus.dwWin32ExitCode = NO_ERROR; + SvcStatus.dwServiceSpecificExitCode = 0; + SvcStatus.dwWaitHint = 4000; + + ServiceStatusHandle = RegisterServiceCtrlHandlerExW(ServiceName, + ServiceControlHandler, + NULL); + + UpdateServiceStatus(ServiceStatusHandle, SERVICE_RUNNING, 0); + + hThread = CreateThread(NULL, + 0, + (LPTHREAD_START_ROUTINE) + RpcThreadRoutine, + NULL, + 0, + NULL); + + if (!hThread) + { + DPRINT("Can't create RpcThread\n"); + UpdateServiceStatus(ServiceStatusHandle, SERVICE_STOPPED, 0); + } + else + { + CloseHandle(hThread); + } + + DPRINT("ServiceMain() done\n"); +} + +int +wmain(int argc, WCHAR *argv[]) +{ + SERVICE_TABLE_ENTRYW ServiceTable[2] = + { + {ServiceName, ServiceMain}, + {NULL, NULL} + }; + + UNREFERENCED_PARAMETER(argc); + UNREFERENCED_PARAMETER(argv); + + DPRINT("dnsrslvr: main() started\n"); + + StartServiceCtrlDispatcherW(ServiceTable); + + DPRINT("dnsrslvr: main() done\n"); + + ExitThread(0); + + return 0; +} + +/* EOF */ Property changes on: base/services/dnsrslvr/dnsrslvr.c ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Index: base/services/dnsrslvr/dnsrslvr.rc =================================================================== --- base/services/dnsrslvr/dnsrslvr.rc (nonexistent) +++ base/services/dnsrslvr/dnsrslvr.rc (working copy) @@ -0,0 +1,4 @@ +#define REACTOS_STR_FILE_DESCRIPTION "DNS-Client" +#define REACTOS_STR_INTERNAL_NAME "dnsrslvr" +#define REACTOS_STR_ORIGINAL_FILENAME "dnsrslvr.dll" +#include Property changes on: base/services/dnsrslvr/dnsrslvr.rc ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Index: base/services/dnsrslvr/precomp.h =================================================================== --- base/services/dnsrslvr/precomp.h (nonexistent) +++ base/services/dnsrslvr/precomp.h (working copy) @@ -0,0 +1,18 @@ +#ifndef _DNSRSLVR_PCH_ +#define _DNSRSLVR_PCH_ + +#include + +#define WIN32_NO_STATUS +#define _INC_WINDOWS +#define COM_NO_WINDOWS_H + +#include +#include +#include +#include + +#include +#include + +#endif /* _DNSRSLVR_PCH_ */ Property changes on: base/services/dnsrslvr/precomp.h ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Index: base/services/dnsrslvr/rpcserver.c =================================================================== --- base/services/dnsrslvr/rpcserver.c (nonexistent) +++ base/services/dnsrslvr/rpcserver.c (working copy) @@ -0,0 +1,76 @@ +/* + * PROJECT: ReactOS DNS Resolver + * LICENSE: GPL - See COPYING in the top level directory + * FILE: base/services/dnsrslvr/rpcserver.c + * PURPOSE: RPC server interface + * COPYRIGHT: Copyright 2016 Christoph von Wittich + */ + +#include "precomp.h" + +#define NDEBUG +#include + +DWORD WINAPI RpcThreadRoutine(LPVOID lpParameter) +{ + RPC_STATUS Status; + + Status = RpcServerUseProtseqEpW(L"ncalrpc", 20, L"DNSResolver", NULL); + if (Status != RPC_S_OK) + { + DPRINT("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status); + return 0; + } + + Status = RpcServerRegisterIf(DnsResolver_v2_0_s_ifspec, NULL, NULL); + if (Status != RPC_S_OK) + { + DPRINT("RpcServerRegisterIf() failed (Status %lx)\n", Status); + return 0; + } + + Status = RpcServerListen(1, RPC_C_LISTEN_MAX_CALLS_DEFAULT, 0); + if (Status != RPC_S_OK) + { + DPRINT("RpcServerListen() failed (Status %lx)\n", Status); + } + + DPRINT("RpcServerListen finished\n"); + return 0; +} + +DWORD R_ResolverFlushCache( + DNSRSLVR_HANDLE pwszServerName) +{ + UNIMPLEMENTED; + return 0; +} + +DWORD R_ResolverQuery( + DNSRSLVR_HANDLE pwszServerName, + LPCWSTR pwsName, + WORD wType, + DWORD Flags, + DWORD *dwRecords, + _DnsRecordW** ppResultRecords) +{ + UNIMPLEMENTED; + return 0; +} + +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); +} + + +void __RPC_USER WLANSVC_RPC_HANDLE_rundown(DNSRSLVR_HANDLE hClientHandle) +{ +} + Property changes on: base/services/dnsrslvr/rpcserver.c ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Index: base/services/dnsrslvr/CMakeLists.txt =================================================================== --- base/services/dnsrslvr/CMakeLists.txt (nonexistent) +++ base/services/dnsrslvr/CMakeLists.txt (working copy) @@ -0,0 +1,20 @@ + +include_directories(${REACTOS_SOURCE_DIR}/sdk/include/reactos/idl) +add_rpc_files(server ${REACTOS_SOURCE_DIR}/sdk/include/reactos/idl/dnsrslvr.idl) + +list(APPEND SOURCE + dnsrslvr.c + rpcserver.c + precomp.h + ${CMAKE_CURRENT_BINARY_DIR}/dnsrslvr_s.c) + +add_library(dnsrslvr SHARED ${SOURCE} dnsrslvr.rc) + +if(NOT MSVC) + target_link_libraries(dnsrslvr ${PSEH_LIB}) +endif() + +set_module_type(dnsrslvr win32dll UNICODE) +add_importlibs(dnsrslvr advapi32 rpcrt4 iphlpapi msvcrt kernel32 ntdll) +add_pch(dnsrslvr precomp.h SOURCE) +add_cd_file(TARGET dnsrslvr DESTINATION reactos/system32 FOR all) Property changes on: base/services/dnsrslvr/CMakeLists.txt ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Index: base/services/dnsrslvr/dnsrslvr.c =================================================================== --- base/services/dnsrslvr/dnsrslvr.c (nonexistent) +++ base/services/dnsrslvr/dnsrslvr.c (working copy) @@ -0,0 +1,129 @@ +/* + * COPYRIGHT: See COPYING in the top level directory + * PROJECT: ReactOS DNS Resolver + * FILE: base/services/dnsrslvr/dnsrslvr.c + * PURPOSE: DNS Resolver Service + * PROGRAMMER: Christoph von Wittich + */ + +/* INCLUDES *****************************************************************/ + +#include "precomp.h" + +#define NDEBUG +#include + +/* GLOBALS ******************************************************************/ + +#define SERVICE_NAME L"DNS-Client" + +SERVICE_STATUS_HANDLE ServiceStatusHandle; +SERVICE_STATUS SvcStatus; +static WCHAR ServiceName[] = L"Dnscache"; + +DWORD WINAPI RpcThreadRoutine(LPVOID lpParameter); + +/* FUNCTIONS *****************************************************************/ + +static void UpdateServiceStatus(HANDLE hServiceStatus, DWORD NewStatus, DWORD Increment) +{ + if (Increment > 0) + SvcStatus.dwCheckPoint += Increment; + else + SvcStatus.dwCheckPoint = 0; + + SvcStatus.dwCurrentState = NewStatus; + SetServiceStatus(hServiceStatus, &SvcStatus); +} + +static DWORD WINAPI +ServiceControlHandler(DWORD dwControl, + DWORD dwEventType, + LPVOID lpEventData, + LPVOID lpContext) +{ + switch (dwControl) + { + case SERVICE_CONTROL_SHUTDOWN: + case SERVICE_CONTROL_STOP: + UpdateServiceStatus(ServiceStatusHandle, SERVICE_STOP_PENDING, 1); + RpcMgmtStopServerListening(NULL); + UpdateServiceStatus(ServiceStatusHandle, SERVICE_STOPPED, 0); + break; + case SERVICE_CONTROL_INTERROGATE: + return NO_ERROR; + default: + return ERROR_CALL_NOT_IMPLEMENTED; + } + return NO_ERROR; +} + +static VOID CALLBACK +ServiceMain(DWORD argc, LPWSTR *argv) +{ + HANDLE hThread; + + UNREFERENCED_PARAMETER(argc); + UNREFERENCED_PARAMETER(argv); + + DPRINT("ServiceMain() called\n"); + + SvcStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS; + SvcStatus.dwCurrentState = SERVICE_START_PENDING; + SvcStatus.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_SHUTDOWN; + SvcStatus.dwCheckPoint = 0; + SvcStatus.dwWin32ExitCode = NO_ERROR; + SvcStatus.dwServiceSpecificExitCode = 0; + SvcStatus.dwWaitHint = 4000; + + ServiceStatusHandle = RegisterServiceCtrlHandlerExW(ServiceName, + ServiceControlHandler, + NULL); + + UpdateServiceStatus(ServiceStatusHandle, SERVICE_RUNNING, 0); + + hThread = CreateThread(NULL, + 0, + (LPTHREAD_START_ROUTINE) + RpcThreadRoutine, + NULL, + 0, + NULL); + + if (!hThread) + { + DPRINT("Can't create RpcThread\n"); + UpdateServiceStatus(ServiceStatusHandle, SERVICE_STOPPED, 0); + } + else + { + CloseHandle(hThread); + } + + DPRINT("ServiceMain() done\n"); +} + +int +wmain(int argc, WCHAR *argv[]) +{ + SERVICE_TABLE_ENTRYW ServiceTable[2] = + { + {ServiceName, ServiceMain}, + {NULL, NULL} + }; + + UNREFERENCED_PARAMETER(argc); + UNREFERENCED_PARAMETER(argv); + + DPRINT("dnsrslvr: main() started\n"); + + StartServiceCtrlDispatcherW(ServiceTable); + + DPRINT("dnsrslvr: main() done\n"); + + ExitThread(0); + + return 0; +} + +/* EOF */ Property changes on: base/services/dnsrslvr/dnsrslvr.c ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Index: base/services/dnsrslvr/dnsrslvr.rc =================================================================== --- base/services/dnsrslvr/dnsrslvr.rc (nonexistent) +++ base/services/dnsrslvr/dnsrslvr.rc (working copy) @@ -0,0 +1,4 @@ +#define REACTOS_STR_FILE_DESCRIPTION "DNS-Client" +#define REACTOS_STR_INTERNAL_NAME "dnsrslvr" +#define REACTOS_STR_ORIGINAL_FILENAME "dnsrslvr.dll" +#include Property changes on: base/services/dnsrslvr/dnsrslvr.rc ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Index: base/services/dnsrslvr/precomp.h =================================================================== --- base/services/dnsrslvr/precomp.h (nonexistent) +++ base/services/dnsrslvr/precomp.h (working copy) @@ -0,0 +1,18 @@ +#ifndef _DNSRSLVR_PCH_ +#define _DNSRSLVR_PCH_ + +#include + +#define WIN32_NO_STATUS +#define _INC_WINDOWS +#define COM_NO_WINDOWS_H + +#include +#include +#include +#include + +#include +#include + +#endif /* _DNSRSLVR_PCH_ */ Property changes on: base/services/dnsrslvr/precomp.h ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Index: base/services/dnsrslvr/rpcserver.c =================================================================== --- base/services/dnsrslvr/rpcserver.c (nonexistent) +++ base/services/dnsrslvr/rpcserver.c (working copy) @@ -0,0 +1,76 @@ +/* + * PROJECT: ReactOS DNS Resolver + * LICENSE: GPL - See COPYING in the top level directory + * FILE: base/services/dnsrslvr/rpcserver.c + * PURPOSE: RPC server interface + * COPYRIGHT: Copyright 2016 Christoph von Wittich + */ + +#include "precomp.h" + +#define NDEBUG +#include + +DWORD WINAPI RpcThreadRoutine(LPVOID lpParameter) +{ + RPC_STATUS Status; + + Status = RpcServerUseProtseqEpW(L"ncalrpc", 20, L"DNSResolver", NULL); + if (Status != RPC_S_OK) + { + DPRINT("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status); + return 0; + } + + Status = RpcServerRegisterIf(DnsResolver_v2_0_s_ifspec, NULL, NULL); + if (Status != RPC_S_OK) + { + DPRINT("RpcServerRegisterIf() failed (Status %lx)\n", Status); + return 0; + } + + Status = RpcServerListen(1, RPC_C_LISTEN_MAX_CALLS_DEFAULT, 0); + if (Status != RPC_S_OK) + { + DPRINT("RpcServerListen() failed (Status %lx)\n", Status); + } + + DPRINT("RpcServerListen finished\n"); + return 0; +} + +DWORD R_ResolverFlushCache( + DNSRSLVR_HANDLE pwszServerName) +{ + UNIMPLEMENTED; + return 0; +} + +DWORD R_ResolverQuery( + DNSRSLVR_HANDLE pwszServerName, + LPCWSTR pwsName, + WORD wType, + DWORD Flags, + DWORD *dwRecords, + _DnsRecordW** ppResultRecords) +{ + UNIMPLEMENTED; + return 0; +} + +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); +} + + +void __RPC_USER WLANSVC_RPC_HANDLE_rundown(DNSRSLVR_HANDLE hClientHandle) +{ +} + Property changes on: base/services/dnsrslvr/rpcserver.c ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Index: boot/bootdata/hivesys.inf =================================================================== --- boot/bootdata/hivesys.inf (revision 73174) +++ boot/bootdata/hivesys.inf (working copy) @@ -1942,6 +1942,17 @@ HKLM,"SYSTEM\CurrentControlSet\Services\Spooler","Start",0x00010001,0x00000002 HKLM,"SYSTEM\CurrentControlSet\Services\Spooler","Type",0x00010001,0x00000110 +; DNS-Client +HKLM,"SYSTEM\CurrentControlSet\Services\Dnscache","DisplayName",0x00000000,"DNS-Client" +HKLM,"SYSTEM\CurrentControlSet\Services\Dnscache","Description",0x00000000,"DNS-Client" +HKLM,"SYSTEM\CurrentControlSet\Services\Dnscache","ErrorControl",0x00010001,0x00000001 +HKLM,"SYSTEM\CurrentControlSet\Services\Dnscache","Group",0x00000000,"TDI" +HKLM,"SYSTEM\CurrentControlSet\Services\Dnscache","ImagePath",0x00020000,"%SystemRoot%\system32\svchost.exe -k netsvcs" +HKLM,"SYSTEM\CurrentControlSet\Services\Dnscache","ObjectName",0x00000000,"LocalSystem" +HKLM,"SYSTEM\CurrentControlSet\Services\Dnscache","Start",0x00010001,0x00000002 +HKLM,"SYSTEM\CurrentControlSet\Services\Dnscache","Type",0x00010001,0x00000020 +HKLM,"SYSTEM\CurrentControlSet\Services\Dnscache\Parameters","ServiceDll",0x00020000,"%SystemRoot%\system32\dnsrslvr.dll" + ; WLAN service HKLM,"SYSTEM\CurrentControlSet\Services\WlanSvc","DependOnService",0x00010000,"RPCSS" HKLM,"SYSTEM\CurrentControlSet\Services\WlanSvc","DisplayName",0x00000000,"WLAN Service" Index: dll/win32/dnsapi/CMakeLists.txt =================================================================== --- dll/win32/dnsapi/CMakeLists.txt (revision 73174) +++ dll/win32/dnsapi/CMakeLists.txt (working copy) @@ -1,3 +1,5 @@ +include_directories( ${REACTOS_SOURCE_DIR}/sdk/include/reactos/idl) +add_rpc_files(client ${REACTOS_SOURCE_DIR}/sdk/include/reactos/idl/dnsrslvr.idl) include_directories( include @@ -19,11 +21,13 @@ add_library(dnsapi SHARED ${SOURCE} + dnsapi/rpc.c + ${CMAKE_CURRENT_BINARY_DIR}/dnsrslvr_c.c dnsapi.rc ${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) +add_importlibs(dnsapi advapi32 user32 rpcrt4 ws2_32 iphlpapi msvcrt kernel32 ntdll) add_pch(dnsapi dnsapi/precomp.h SOURCE) add_cd_file(TARGET dnsapi DESTINATION reactos/system32 FOR all) Index: dll/win32/dnsapi/dnsapi/rpc.c =================================================================== --- dll/win32/dnsapi/dnsapi/rpc.c (nonexistent) +++ dll/win32/dnsapi/dnsapi/rpc.c (working copy) @@ -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 szMachineName) +{ + handle_t hBinding = NULL; + LPWSTR pszStringBinding; + RPC_STATUS Status; + + DPRINT("RPC_SERVICE_STATUS_HANDLE_bind() called\n"); + + Status = RpcStringBindingComposeW(NULL, + L"ncalrpc", + szMachineName, + 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 szMachineName, + handle_t hBinding) +{ + RPC_STATUS Status; + + DPRINT("DNSRSLVR_HANDLE() called\n"); + + 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); +} Property changes on: dll/win32/dnsapi/dnsapi/rpc.c ___________________________________________________________________ Added: svn:eol-style ## -0,0 +1 ## +native \ No newline at end of property Index: sdk/include/psdk/windns.h =================================================================== --- sdk/include/psdk/windns.h (revision 73174) +++ sdk/include/psdk/windns.h (working copy) @@ -559,7 +559,7 @@ DWORD dwTtl; DWORD dwReserved; [switch_is(wType)] DNS_DATAW Data; -} _DnsRecordW; +} DNS_RECORDW, *PDNS_RECORDW; #else typedef struct _DnsRecordA { struct _DnsRecordA* pNext; @@ -626,6 +626,7 @@ DNS_WINSR_DATAW WINSR, WinsR, NBSTAT, Nbstat; } Data; } DNS_RECORDW, *PDNS_RECORDW; +#endif #ifdef UNICODE #define DNS_RECORD DNS_RECORDW @@ -635,8 +636,6 @@ #define PDNS_RECORD PDNS_RECORDA #endif -#endif - typedef struct _DnsRRSet { PDNS_RECORD pFirstRR; PDNS_RECORD pLastRR;