From 78600cf22304ecf6de01548159cef16931bffd0b Mon Sep 17 00:00:00 2001 From: Eric Kohl Date: Wed, 29 May 2019 13:27:49 +0200 Subject: [PATCH] [NETLOGON] Add the netlogon service. --- base/services/CMakeLists.txt | 1 + base/services/netlogon/CMakeLists.txt | 22 + base/services/netlogon/netlogon.c | 183 ++++++ base/services/netlogon/netlogon.rc | 5 + base/services/netlogon/netlogon.spec | 29 + base/services/netlogon/precomp.h | 34 ++ base/services/netlogon/rpcserver.c | 805 ++++++++++++++++++++++++++ 7 files changed, 1079 insertions(+) create mode 100644 base/services/netlogon/CMakeLists.txt create mode 100644 base/services/netlogon/netlogon.c create mode 100644 base/services/netlogon/netlogon.rc create mode 100644 base/services/netlogon/netlogon.spec create mode 100644 base/services/netlogon/precomp.h create mode 100644 base/services/netlogon/rpcserver.c diff --git a/base/services/CMakeLists.txt b/base/services/CMakeLists.txt index 64cd7346906..15bdd77bee3 100644 --- a/base/services/CMakeLists.txt +++ b/base/services/CMakeLists.txt @@ -3,6 +3,7 @@ add_subdirectory(audiosrv) add_subdirectory(dcomlaunch) add_subdirectory(dhcpcsvc) add_subdirectory(eventlog) +add_subdirectory(netlogon) add_subdirectory(nfsd) add_subdirectory(rpcss) add_subdirectory(schedsvc) diff --git a/base/services/netlogon/CMakeLists.txt b/base/services/netlogon/CMakeLists.txt new file mode 100644 index 00000000000..f0e533b6b65 --- /dev/null +++ b/base/services/netlogon/CMakeLists.txt @@ -0,0 +1,22 @@ + +include_directories(${REACTOS_SOURCE_DIR}/sdk/include/reactos/idl) +add_rpc_files(server ${REACTOS_SOURCE_DIR}/sdk/include/reactos/idl/netlogon.idl) +spec2def(netlogon.dll netlogon.spec ADD_IMPORTLIB) + +list(APPEND SOURCE + netlogon.c + rpcserver.c + precomp.h) + +add_library(netlogon MODULE + ${SOURCE} + netlogon.rc + ${CMAKE_CURRENT_BINARY_DIR}/netlogon_s.c + ${CMAKE_CURRENT_BINARY_DIR}/netlogon_stubs.c + ${CMAKE_CURRENT_BINARY_DIR}/netlogon.def) + +set_module_type(netlogon win32dll UNICODE) +target_link_libraries(netlogon wine ${PSEH_LIB}) +add_importlibs(netlogon advapi32 rpcrt4 msvcrt kernel32 ntdll) +add_pch(netlogon precomp.h SOURCE) +add_cd_file(TARGET netlogon DESTINATION reactos/system32 FOR all) diff --git a/base/services/netlogon/netlogon.c b/base/services/netlogon/netlogon.c new file mode 100644 index 00000000000..0f8c4e57a9f --- /dev/null +++ b/base/services/netlogon/netlogon.c @@ -0,0 +1,183 @@ +/* + * PROJECT: ReactOS NetLogon Service + * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) + * PURPOSE: NetLogon service RPC server + * COPYRIGHT: Eric Kohl 2019 + */ + +/* INCLUDES *****************************************************************/ + +#include "precomp.h" + +WINE_DEFAULT_DEBUG_CHANNEL(netlogon); + + +/* GLOBALS ******************************************************************/ + +HINSTANCE hDllInstance; + +static WCHAR ServiceName[] = L"netlogon"; + +static SERVICE_STATUS_HANDLE ServiceStatusHandle; +static SERVICE_STATUS ServiceStatus; + + +/* FUNCTIONS *****************************************************************/ + +static +VOID +UpdateServiceStatus( + DWORD dwState) +{ + ServiceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS; + ServiceStatus.dwCurrentState = dwState; + ServiceStatus.dwControlsAccepted = 0; + ServiceStatus.dwWin32ExitCode = 0; + ServiceStatus.dwServiceSpecificExitCode = 0; + ServiceStatus.dwCheckPoint = 0; + + if (dwState == SERVICE_START_PENDING || + dwState == SERVICE_STOP_PENDING || + dwState == SERVICE_PAUSE_PENDING || + dwState == SERVICE_CONTINUE_PENDING) + ServiceStatus.dwWaitHint = 10000; + else + ServiceStatus.dwWaitHint = 0; + + SetServiceStatus(ServiceStatusHandle, + &ServiceStatus); +} + + +static +DWORD +WINAPI +ServiceControlHandler( + DWORD dwControl, + DWORD dwEventType, + LPVOID lpEventData, + LPVOID lpContext) +{ + TRACE("ServiceControlHandler()\n"); + + switch (dwControl) + { + case SERVICE_CONTROL_STOP: + TRACE(" SERVICE_CONTROL_STOP received\n"); + /* Stop listening to incoming RPC messages */ + RpcMgmtStopServerListening(NULL); + UpdateServiceStatus(SERVICE_STOPPED); + return ERROR_SUCCESS; + + case SERVICE_CONTROL_PAUSE: + TRACE(" SERVICE_CONTROL_PAUSE received\n"); + UpdateServiceStatus(SERVICE_PAUSED); + return ERROR_SUCCESS; + + case SERVICE_CONTROL_CONTINUE: + TRACE(" SERVICE_CONTROL_CONTINUE received\n"); + UpdateServiceStatus(SERVICE_RUNNING); + return ERROR_SUCCESS; + + case SERVICE_CONTROL_INTERROGATE: + TRACE(" SERVICE_CONTROL_INTERROGATE received\n"); + SetServiceStatus(ServiceStatusHandle, + &ServiceStatus); + return ERROR_SUCCESS; + + case SERVICE_CONTROL_SHUTDOWN: + TRACE(" SERVICE_CONTROL_SHUTDOWN received\n"); + UpdateServiceStatus(SERVICE_STOPPED); + return ERROR_SUCCESS; + + default : + TRACE(" Control %lu received\n", dwControl); + return ERROR_CALL_NOT_IMPLEMENTED; + } +} + + +static +DWORD +ServiceInit(VOID) +{ + HANDLE hThread; + + hThread = CreateThread(NULL, + 0, + (LPTHREAD_START_ROUTINE)RpcThreadRoutine, + NULL, + 0, + NULL); + + if (!hThread) + { + ERR("Can't create PortThread\n"); + return GetLastError(); + } + else + CloseHandle(hThread); + + return ERROR_SUCCESS; +} + + +VOID WINAPI +NlNetlogonMain( + _In_ INT ArgCount, + _In_ PWSTR *ArgVector) +{ + DWORD dwError; + + UNREFERENCED_PARAMETER(ArgCount); + UNREFERENCED_PARAMETER(ArgVector); + + TRACE("NlNetlogonMain(%d %p)\n", ArgCount, ArgVector); + + ServiceStatusHandle = RegisterServiceCtrlHandlerExW(ServiceName, + ServiceControlHandler, + NULL); + if (!ServiceStatusHandle) + { + ERR("RegisterServiceCtrlHandlerExW() failed! (Error %lu)\n", GetLastError()); + return; + } + + UpdateServiceStatus(SERVICE_START_PENDING); + + dwError = ServiceInit(); + if (dwError != ERROR_SUCCESS) + { + ERR("Service stopped (dwError: %lu\n", dwError); + UpdateServiceStatus(SERVICE_STOPPED); + return; + } + + UpdateServiceStatus(SERVICE_RUNNING); +} + + +BOOL +WINAPI +DllMain( + _In_ HINSTANCE hinstDLL, + _In_ DWORD fdwReason, + _In_ PVOID pvReserved) +{ + UNREFERENCED_PARAMETER(pvReserved); + + switch (fdwReason) + { + case DLL_PROCESS_ATTACH: + DisableThreadLibraryCalls(hinstDLL); + hDllInstance = hinstDLL; + break; + + case DLL_PROCESS_DETACH: + break; + } + + return TRUE; +} + +/* EOF */ diff --git a/base/services/netlogon/netlogon.rc b/base/services/netlogon/netlogon.rc new file mode 100644 index 00000000000..19c828e00b5 --- /dev/null +++ b/base/services/netlogon/netlogon.rc @@ -0,0 +1,5 @@ +#define REACTOS_VERSION_DLL +#define REACTOS_STR_FILE_DESCRIPTION "Net Logon Services Dll" +#define REACTOS_STR_INTERNAL_NAME "netlogon" +#define REACTOS_STR_ORIGINAL_FILENAME "netlogon.dll" +#include diff --git a/base/services/netlogon/netlogon.spec b/base/services/netlogon/netlogon.spec new file mode 100644 index 00000000000..2fe6ee39586 --- /dev/null +++ b/base/services/netlogon/netlogon.spec @@ -0,0 +1,29 @@ +@ stdcall DsrGetDcName(wstr wstr ptr ptr long ptr) +@ stdcall DsrGetDcNameEx2(wstr wstr long wstr ptr wstr long ptr) +@ stub I_DsGetDcCache +@ stub I_NetLogonAddressToSiteName +@ stub I_NetLogonAppendChangeLog +@ stub I_NetLogonCloseChangeLog +@ stub I_NetLogonFree +@ stub I_NetLogonGetAuthDataEx +@ stub I_NetLogonGetDirectDomain +@ stub I_NetLogonGetIpAddresses +@ stub I_NetLogonGetSerialNumber +@ stub I_NetLogonLdapLookup +@ stub I_NetLogonLdapLookupEx +@ stub I_NetLogonMixedDomain +@ stub I_NetLogonNewChangeLog +@ stub I_NetLogonReadChangeLog +@ stub I_NetLogonSendToSamOnPdc +@ stub I_NetLogonSetServiceBits +@ stub I_NetNotifyDelta +@ stub I_NetNotifyDsChange +@ stub I_NetNotifyMachineAccount +@ stub I_NetNotifyNetlogonDllHandle +@ stub I_NetNotifyNtdsDsaDeletion +@ stub I_NetNotifyRole +@ stub I_NetNotifyTrustedDomain +@ stub InitSecurityInterfaceW +@ stdcall NetrLogonSamLogoff(wstr wstr ptr ptr long ptr) +@ stdcall NetrLogonSamLogon(wstr wstr ptr ptr long ptr long ptr ptr) +@ stdcall NlNetlogonMain(long ptr) diff --git a/base/services/netlogon/precomp.h b/base/services/netlogon/precomp.h new file mode 100644 index 00000000000..b5317958a03 --- /dev/null +++ b/base/services/netlogon/precomp.h @@ -0,0 +1,34 @@ +/* + * PROJECT: ReactOS NetLogon Service + * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) + * PURPOSE: NetLogon service RPC server + * COPYRIGHT: Eric Kohl 2019 + */ + +#ifndef _NETLOGON_PCH_ +#define _NETLOGON_PCH_ + +#define WIN32_NO_STATUS +#define _INC_WINDOWS +#define COM_NO_WINDOWS_H +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include + +extern HINSTANCE hDllInstance; + +DWORD +WINAPI +RpcThreadRoutine( + LPVOID lpParameter); + +#endif /* _NETLOGON_PCH_ */ diff --git a/base/services/netlogon/rpcserver.c b/base/services/netlogon/rpcserver.c new file mode 100644 index 00000000000..e4115ad09e5 --- /dev/null +++ b/base/services/netlogon/rpcserver.c @@ -0,0 +1,805 @@ +/* + * PROJECT: ReactOS NetLogon Service + * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) + * PURPOSE: NetLogon service RPC server + * COPYRIGHT: Eric Kohl 2019 + */ + +/* INCLUDES *****************************************************************/ + +#include "precomp.h" + +//#include "lmerr.h" + +WINE_DEFAULT_DEBUG_CHANNEL(netlogon); + +/* FUNCTIONS *****************************************************************/ + +DWORD +WINAPI +RpcThreadRoutine( + LPVOID lpParameter) +{ + RPC_STATUS Status; + + Status = RpcServerUseProtseqEpW(L"ncacn_np", 20, L"\\pipe\\netlogon", NULL); + if (Status != RPC_S_OK) + { + ERR("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status); + return 0; + } + + Status = RpcServerRegisterIf(logon_v1_0_s_ifspec, NULL, NULL); + if (Status != RPC_S_OK) + { + ERR("RpcServerRegisterIf() failed (Status %lx)\n", Status); + return 0; + } + + Status = RpcServerListen(1, RPC_C_LISTEN_MAX_CALLS_DEFAULT, FALSE); + if (Status != RPC_S_OK) + { + ERR("RpcServerListen() failed (Status %lx)\n", Status); + } + + 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); +} + + +/* Function 0 */ +NET_API_STATUS +__stdcall +NetrLogonUasLogon( + _In_opt_ LOGONSRV_HANDLE ServerName, + _In_ wchar_t *UserName, + _In_ wchar_t *Workstation, + _Out_ PNETLOGON_VALIDATION_UAS_INFO *ValidationInformation) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 1 */ +NET_API_STATUS +__stdcall +NetrLogonUasLogoff( + _In_opt_ LOGONSRV_HANDLE ServerName, + _In_ wchar_t *UserName, + _In_ wchar_t *Workstation, + _Out_ PNETLOGON_LOGOFF_UAS_INFO LogoffInformation) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 2 */ +NTSTATUS +__stdcall +NetrLogonSamLogon( + _In_opt_ LOGONSRV_HANDLE LogonServer, + _In_opt_ wchar_t *ComputerName, + _In_opt_ PNETLOGON_AUTHENTICATOR Authenticator, + _Inout_opt_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + _In_ NETLOGON_LOGON_INFO_CLASS LogonLevel, + _In_ PNETLOGON_LEVEL LogonInformation, + _In_ NETLOGON_VALIDATION_INFO_CLASS ValidationLevel, + _Out_ PNETLOGON_VALIDATION ValidationInformation, + _Out_ UCHAR *Authoritative) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 3 */ +NTSTATUS +__stdcall +NetrLogonSamLogoff( + _In_opt_ LOGONSRV_HANDLE LogonServer, + _In_opt_ wchar_t *ComputerName, + _In_opt_ PNETLOGON_AUTHENTICATOR Authenticator, + _Inout_opt_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + _In_ NETLOGON_LOGON_INFO_CLASS LogonLevel, + _In_ PNETLOGON_LEVEL LogonInformation) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 4 */ +NTSTATUS +__stdcall +NetrServerReqChallenge( + _In_opt_ LOGONSRV_HANDLE PrimaryName, + _In_ wchar_t *ComputerName, + _In_ PNETLOGON_CREDENTIAL ClientChallenge, + _Out_ PNETLOGON_CREDENTIAL ServerChallenge) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 5 */ +NTSTATUS +__stdcall +NetrServerAuthenticate( + _In_opt_ LOGONSRV_HANDLE PrimaryName, + _In_ wchar_t *AccountName, + _In_ NETLOGON_SECURE_CHANNEL_TYPE SecureChannelType, + _In_ wchar_t *ComputerName, + _In_ PNETLOGON_CREDENTIAL ClientCredential, + _Out_ PNETLOGON_CREDENTIAL ServerCredential) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 6 */ +NTSTATUS +__stdcall +NetrServerPasswordSet( + _In_opt_ LOGONSRV_HANDLE PrimaryName, + _In_ wchar_t *AccountName, + _In_ NETLOGON_SECURE_CHANNEL_TYPE SecureChannelType, + _In_ wchar_t *ComputerName, + _In_ PNETLOGON_AUTHENTICATOR Authenticator, + _Out_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + _In_ PENCRYPTED_NT_OWF_PASSWORD UasNewPassword) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 7 */ +NTSTATUS +__stdcall +NetrDatabaseDeltas( + _In_ LOGONSRV_HANDLE PrimaryName, + _In_ wchar_t *ComputerName, + _In_ PNETLOGON_AUTHENTICATOR Authenticator, + _Inout_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + _In_ DWORD DatabaseID, + _Inout_ PNLPR_MODIFIED_COUNT DomainModifiedCount, + _Out_ PNETLOGON_DELTA_ENUM_ARRAY *DeltaArray, + _In_ DWORD PreferredMaximumLength) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 8 */ +NTSTATUS +__stdcall +NetrDatabaseSync( + _In_ LOGONSRV_HANDLE PrimaryName, + _In_ wchar_t *ComputerName, + _In_ PNETLOGON_AUTHENTICATOR Authenticator, + _Inout_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + _In_ DWORD DatabaseID, + _Inout_ ULONG *SyncContext, + _Out_ PNETLOGON_DELTA_ENUM_ARRAY *DeltaArray, + _In_ DWORD PreferredMaximumLength) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 9 */ +NTSTATUS +__stdcall +NetrAccountDeltas( + _In_opt_ LOGONSRV_HANDLE PrimaryName, + _In_ wchar_t * ComputerName, + _In_ PNETLOGON_AUTHENTICATOR Authenticator, + _Inout_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + _In_ PUAS_INFO_0 RecordId, + _In_ DWORD Count, + _In_ DWORD Level, + _Out_ UCHAR *Buffer, + _In_ DWORD BufferSize, + _Out_ ULONG *CountReturned, + _Out_ ULONG *TotalEntries, + _Out_ PUAS_INFO_0 NextRecordId) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 10 */ +NTSTATUS +__stdcall +NetrAccountSync( + _In_opt_ LOGONSRV_HANDLE PrimaryName, + _In_ wchar_t *ComputerName, + _In_ PNETLOGON_AUTHENTICATOR Authenticator, + _Inout_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + _In_ DWORD Reference, + _In_ DWORD Level, + _Out_ UCHAR *Buffer, + _In_ DWORD BufferSize, + _Out_ ULONG *CountReturned, + _Out_ ULONG *TotalEntries, + _Out_ ULONG *NextReference, + _Out_ PUAS_INFO_0 LastRecordId) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 11 */ +NET_API_STATUS +__stdcall +NetrGetDCName( + _In_ LOGONSRV_HANDLE ServerName, + _In_opt_ wchar_t *DomainName, + _Out_ wchar_t **Buffer) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 12 */ +NET_API_STATUS +__stdcall +NetrLogonControl( + _In_opt_ LOGONSRV_HANDLE ServerName, + _In_ DWORD FunctionCode, + _In_ DWORD QueryLevel, + _Out_ PNETLOGON_CONTROL_QUERY_INFORMATION Buffer) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 13 */ +NET_API_STATUS +__stdcall +NetrGetAnyDCName( + _In_opt_ LOGONSRV_HANDLE ServerName, + _In_opt_ wchar_t *DomainName, + _Out_ wchar_t **Buffer) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 14 */ +NET_API_STATUS +__stdcall +NetrLogonControl2( + _In_opt_ LOGONSRV_HANDLE ServerName, + _In_ DWORD FunctionCode, + _In_ DWORD QueryLevel, + _In_ PNETLOGON_CONTROL_DATA_INFORMATION Data, + _Out_ PNETLOGON_CONTROL_QUERY_INFORMATION Buffer) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 15 */ +NTSTATUS +__stdcall +NetrServerAuthenticate2( + _In_opt_ LOGONSRV_HANDLE PrimaryName, + _In_ wchar_t *AccountName, + _In_ NETLOGON_SECURE_CHANNEL_TYPE SecureChannelType, + _In_ wchar_t *ComputerName, + _In_ PNETLOGON_CREDENTIAL ClientCredential, + _Out_ PNETLOGON_CREDENTIAL ServerCredential, + _Inout_ ULONG *NegotiateFlags) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 16 */ +NTSTATUS +__stdcall +NetrDatabaseSync2( + _In_ LOGONSRV_HANDLE PrimaryName, + _In_ wchar_t *ComputerName, + _In_ PNETLOGON_AUTHENTICATOR Authenticator, + _Inout_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + _In_ DWORD DatabaseID, + _In_ SYNC_STATE RestartState, + _Inout_ ULONG *SyncContext, + _Out_ PNETLOGON_DELTA_ENUM_ARRAY *DeltaArray, + _In_ DWORD PreferredMaximumLength) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 17 */ +NTSTATUS +__stdcall +NetrDatabaseRedo( + _In_ LOGONSRV_HANDLE PrimaryName, + _In_ wchar_t *ComputerName, + _In_ PNETLOGON_AUTHENTICATOR Authenticator, + _Inout_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + _In_ UCHAR *ChangeLogEntry, + _In_ DWORD ChangeLogEntrySize, + _Out_ PNETLOGON_DELTA_ENUM_ARRAY *DeltaArray) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 18 */ +NET_API_STATUS +__stdcall +NetrLogonControl2Ex( + _In_opt_ LOGONSRV_HANDLE ServerName, + _In_ DWORD FunctionCode, + _In_ DWORD QueryLevel, + _In_ PNETLOGON_CONTROL_DATA_INFORMATION Data, + _Out_ PNETLOGON_CONTROL_QUERY_INFORMATION Buffer) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 19 */ +NTSTATUS +__stdcall +NetrEnumerateTrustedDomains( + _In_opt_ LOGONSRV_HANDLE ServerName, + _Out_ PDOMAIN_NAME_BUFFER DomainNameBuffer) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 20 */ +NET_API_STATUS +__stdcall +DsrGetDcName( + _In_opt_ LOGONSRV_HANDLE ComputerName, + _In_opt_ wchar_t *DomainName, + _In_opt_ GUID *DomainGuid, + _In_opt_ GUID *SiteGuid, + _In_ ULONG Flags, + _Out_ PDOMAIN_CONTROLLER_INFOW *DomainControllerInfo) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 21 */ +NTSTATUS +__stdcall +NetrLogonGetCapabilities( + _In_ LOGONSRV_HANDLE ServerName, + _In_opt_ wchar_t *ComputerName, + _In_ PNETLOGON_AUTHENTICATOR Authenticator, + _Inout_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + _In_ DWORD QueryLevel, + _Out_ PNETLOGON_CAPABILITIES ServerCapabilities) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 22 */ +NTSTATUS +__stdcall +NetrLogonSetServiceBits( + _In_opt_ LOGONSRV_HANDLE ServerName, + _In_ DWORD ServiceBitsOfInterest, + _In_ DWORD ServiceBits) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 23 */ +NET_API_STATUS +__stdcall +NetrLogonGetTrustRid( + _In_opt_ LOGONSRV_HANDLE ServerName, + _In_opt_ wchar_t *DomainName, + _Out_ ULONG *Rid) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 24 */ +NET_API_STATUS +__stdcall +NetrLogonComputeServerDigest( + _In_opt_ LOGONSRV_HANDLE ServerName, + _In_ ULONG Rid, + _In_ UCHAR *Message, + _In_ ULONG MessageSize, + _Out_ CHAR NewMessageDigest[16], + _Out_ CHAR OldMessageDigest[16]) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 25 */ +NET_API_STATUS +__stdcall +NetrLogonComputeClientDigest( + _In_opt_ LOGONSRV_HANDLE ServerName, + _In_opt_ wchar_t *DomainName, + _In_ UCHAR *Message, + _In_ ULONG MessageSize, + _Out_ CHAR NewMessageDigest[16], + _Out_ CHAR OldMessageDigest[16]) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 26 */ +NTSTATUS +__stdcall +NetrServerAuthenticate3( + _In_opt_ LOGONSRV_HANDLE PrimaryName, + _In_ wchar_t *AccountName, + _In_ NETLOGON_SECURE_CHANNEL_TYPE SecureChannelType, + _In_ wchar_t *ComputerName, + _In_ PNETLOGON_CREDENTIAL ClientCredential, + _Out_ PNETLOGON_CREDENTIAL ServerCredential, + _Inout_ ULONG *NegotiateFlags, + _Out_ ULONG *AccountRid) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 27 */ +NET_API_STATUS +__stdcall +DsrGetDcNameEx( + _In_opt_ LOGONSRV_HANDLE ComputerName, + _In_opt_ wchar_t *DomainName, + _In_opt_ GUID *DomainGuid, + _In_opt_ wchar_t *SiteName, + _In_ ULONG Flags, + _Out_ PDOMAIN_CONTROLLER_INFOW *DomainControllerInfo) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 28 */ +NET_API_STATUS +__stdcall +DsrGetSiteName( + _In_opt_ LOGONSRV_HANDLE ComputerName, + _Out_ wchar_t **SiteName) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 29 */ +NTSTATUS +__stdcall +NetrLogonGetDomainInfo( + _In_ LOGONSRV_HANDLE ServerName, + _In_opt_ wchar_t *ComputerName, + _In_ PNETLOGON_AUTHENTICATOR Authenticator, + _Inout_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + _In_ DWORD Level, + _In_ PNETLOGON_WORKSTATION_INFORMATION WkstaBuffer, + _Out_ PNETLOGON_DOMAIN_INFORMATION DomBuffer) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 30 */ +NTSTATUS +__stdcall +NetrServerPasswordSet2( + _In_opt_ LOGONSRV_HANDLE PrimaryName, + _In_ wchar_t *AccountName, + _In_ NETLOGON_SECURE_CHANNEL_TYPE SecureChannelType, + _In_ wchar_t *ComputerName, + _In_ PNETLOGON_AUTHENTICATOR Authenticator, + _Out_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + _In_ PNL_TRUST_PASSWORD ClearNewPassword) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 31 */ +NTSTATUS +__stdcall +NetrServerPasswordGet( + _In_opt_ LOGONSRV_HANDLE PrimaryName, + _In_ wchar_t *AccountName, + _In_ NETLOGON_SECURE_CHANNEL_TYPE AccountType, + _In_ wchar_t *ComputerName, + _In_ PNETLOGON_AUTHENTICATOR Authenticator, + _Out_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + _Out_ PENCRYPTED_NT_OWF_PASSWORD EncryptedNtOwfPassword) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 32 */ +NTSTATUS +__stdcall +NetrLogonSendToSam( + _In_opt_ LOGONSRV_HANDLE PrimaryName, + _In_ wchar_t *ComputerName, + _In_ PNETLOGON_AUTHENTICATOR Authenticator, + _Out_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + _In_ UCHAR *OpaqueBuffer, + _In_ ULONG OpaqueBufferSize) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 33 */ +NET_API_STATUS +__stdcall +DsrAddressToSiteNamesW( + _In_opt_ LOGONSRV_HANDLE ComputerName, + _In_ DWORD EntryCount, + _In_ PNL_SOCKET_ADDRESS SocketAddresses, + _Out_ PNL_SITE_NAME_ARRAY *SiteNames) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 34 */ +NET_API_STATUS +__stdcall +DsrGetDcNameEx2( + _In_opt_ LOGONSRV_HANDLE ComputerName, + _In_opt_ wchar_t *AccountName, + _In_ ULONG AllowableAccountControlBits, + _In_opt_ wchar_t *DomainName, + _In_opt_ GUID *DomainGuid, + _In_opt_ wchar_t *SiteName, + _In_ ULONG Flags, + _Out_ PDOMAIN_CONTROLLER_INFOW *DomainControllerInfo) +{ + UNIMPLEMENTED; + return NERR_DCNotFound; +} + + +/* Function 35 */ +NET_API_STATUS +__stdcall +NetrLogonGetTimeServiceParentDomain( + _In_opt_ LOGONSRV_HANDLE ServerName, + _Out_ wchar_t **DomainName, + _Out_ int *PdcSameSite) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 36 */ +NET_API_STATUS +__stdcall +NetrEnumerateTrustedDomainsEx( + _In_opt_ LOGONSRV_HANDLE ServerName, + _Out_ PNETLOGON_TRUSTED_DOMAIN_ARRAY Domains) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 37 */ +NET_API_STATUS +__stdcall +DsrAddressToSiteNamesExW( + _In_opt_ LOGONSRV_HANDLE ComputerName, + _In_ DWORD EntryCount, + _In_ PNL_SOCKET_ADDRESS SocketAddresses, + _Out_ PNL_SITE_NAME_EX_ARRAY *SiteNames) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 38 */ +NET_API_STATUS +__stdcall +DsrGetDcSiteCoverageW( + _In_opt_ LOGONSRV_HANDLE ServerName, + _Out_ PNL_SITE_NAME_ARRAY *SiteNames) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 39 */ +NTSTATUS +__stdcall +NetrLogonSamLogonEx( + _In_ handle_t ContextHandle, + _In_opt_ wchar_t *LogonServer, + _In_opt_ wchar_t *ComputerName, + _In_ NETLOGON_LOGON_INFO_CLASS LogonLevel, + _In_ PNETLOGON_LEVEL LogonInformation, + _In_ NETLOGON_VALIDATION_INFO_CLASS ValidationLevel, + _Out_ PNETLOGON_VALIDATION ValidationInformation, + _Out_ UCHAR *Authoritative, + _Inout_ ULONG *ExtraFlags) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 40 */ +NET_API_STATUS +__stdcall +DsrEnumerateDomainTrusts( + _In_opt_ LOGONSRV_HANDLE ServerName, + _In_ ULONG Flags, + _Out_ PNETLOGON_TRUSTED_DOMAIN_ARRAY Domains) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 41 */ +NET_API_STATUS +__stdcall +DsrDeregisterDnsHostRecords( + _In_opt_ LOGONSRV_HANDLE ServerName, + _In_opt_ wchar_t *DnsDomainName, + _In_opt_ GUID *DomainGuid, + _In_opt_ GUID *DsaGuid, + _In_ wchar_t *DnsHostName) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 42 */ +NTSTATUS +__stdcall +NetrServerTrustPasswordsGet( + _In_opt_ LOGONSRV_HANDLE TrustedDcName, + _In_ wchar_t *AccountName, + _In_ NETLOGON_SECURE_CHANNEL_TYPE SecureChannelType, + _In_ wchar_t *ComputerName, + _In_ PNETLOGON_AUTHENTICATOR Authenticator, + _Out_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + _Out_ PENCRYPTED_NT_OWF_PASSWORD EncryptedNewOwfPassword, + _Out_ PENCRYPTED_NT_OWF_PASSWORD EncryptedOldOwfPassword) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 43 */ +NET_API_STATUS +__stdcall +DsrGetForestTrustInformation( + _In_opt_ LOGONSRV_HANDLE ServerName, + _In_opt_ wchar_t *TrustedDomainName, + _In_ DWORD Flags, + _Out_ PLSA_FOREST_TRUST_INFORMATION *ForestTrustInfo) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 44 */ +NTSTATUS +__stdcall +NetrGetForestTrustInformation( + _In_opt_ LOGONSRV_HANDLE ServerName, + _In_ wchar_t *ComputerName, + _In_ PNETLOGON_AUTHENTICATOR Authenticator, + _Out_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + _In_ DWORD Flags, + _Out_ PLSA_FOREST_TRUST_INFORMATION *ForestTrustInfo) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 45 */ +NTSTATUS +__stdcall +NetrLogonSamLogonWithFlags( + _In_opt_ LOGONSRV_HANDLE LogonServer, + _In_opt_ wchar_t *ComputerName, + _In_opt_ PNETLOGON_AUTHENTICATOR Authenticator, + _Inout_opt_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + _In_ NETLOGON_LOGON_INFO_CLASS LogonLevel, + _In_ PNETLOGON_LEVEL LogonInformation, + _In_ NETLOGON_VALIDATION_INFO_CLASS ValidationLevel, + _Out_ PNETLOGON_VALIDATION ValidationInformation, + _Out_ UCHAR *Authoritative, + _Inout_ ULONG *ExtraFlags) +{ + UNIMPLEMENTED; + return 0; +} + + +/* Function 46 */ +NTSTATUS +__stdcall +NetrServerGetTrustInfo( + _In_opt_ LOGONSRV_HANDLE TrustedDcName, + _In_ wchar_t *AccountName, + _In_ NETLOGON_SECURE_CHANNEL_TYPE SecureChannelType, + _In_ wchar_t *ComputerName, + _In_ PNETLOGON_AUTHENTICATOR Authenticator, + _Out_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, + _Out_ PENCRYPTED_NT_OWF_PASSWORD EncryptedNewOwfPassword, + _Out_ PENCRYPTED_NT_OWF_PASSWORD EncryptedOldOwfPassword, + _Out_ PNL_GENERIC_RPC_DATA *TrustInfo) +{ + UNIMPLEMENTED; + return 0; +} + +/* EOF */