Reactos

[NETLOGON] Add the netlogon service.

+1079
+1
base/services/CMakeLists.txt
··· 3 3 add_subdirectory(dcomlaunch) 4 4 add_subdirectory(dhcpcsvc) 5 5 add_subdirectory(eventlog) 6 + add_subdirectory(netlogon) 6 7 add_subdirectory(nfsd) 7 8 add_subdirectory(rpcss) 8 9 add_subdirectory(schedsvc)
+22
base/services/netlogon/CMakeLists.txt
··· 1 + 2 + include_directories(${REACTOS_SOURCE_DIR}/sdk/include/reactos/idl) 3 + add_rpc_files(server ${REACTOS_SOURCE_DIR}/sdk/include/reactos/idl/netlogon.idl) 4 + spec2def(netlogon.dll netlogon.spec ADD_IMPORTLIB) 5 + 6 + list(APPEND SOURCE 7 + netlogon.c 8 + rpcserver.c 9 + precomp.h) 10 + 11 + add_library(netlogon MODULE 12 + ${SOURCE} 13 + netlogon.rc 14 + ${CMAKE_CURRENT_BINARY_DIR}/netlogon_s.c 15 + ${CMAKE_CURRENT_BINARY_DIR}/netlogon_stubs.c 16 + ${CMAKE_CURRENT_BINARY_DIR}/netlogon.def) 17 + 18 + set_module_type(netlogon win32dll UNICODE) 19 + target_link_libraries(netlogon wine ${PSEH_LIB}) 20 + add_importlibs(netlogon advapi32 rpcrt4 msvcrt kernel32 ntdll) 21 + add_pch(netlogon precomp.h SOURCE) 22 + add_cd_file(TARGET netlogon DESTINATION reactos/system32 FOR all)
+183
base/services/netlogon/netlogon.c
··· 1 + /* 2 + * PROJECT: ReactOS NetLogon Service 3 + * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) 4 + * PURPOSE: NetLogon service RPC server 5 + * COPYRIGHT: Eric Kohl 2019 <eric.kohl@reactos.org> 6 + */ 7 + 8 + /* INCLUDES *****************************************************************/ 9 + 10 + #include "precomp.h" 11 + 12 + WINE_DEFAULT_DEBUG_CHANNEL(netlogon); 13 + 14 + 15 + /* GLOBALS ******************************************************************/ 16 + 17 + HINSTANCE hDllInstance; 18 + 19 + static WCHAR ServiceName[] = L"netlogon"; 20 + 21 + static SERVICE_STATUS_HANDLE ServiceStatusHandle; 22 + static SERVICE_STATUS ServiceStatus; 23 + 24 + 25 + /* FUNCTIONS *****************************************************************/ 26 + 27 + static 28 + VOID 29 + UpdateServiceStatus( 30 + DWORD dwState) 31 + { 32 + ServiceStatus.dwServiceType = SERVICE_WIN32_OWN_PROCESS; 33 + ServiceStatus.dwCurrentState = dwState; 34 + ServiceStatus.dwControlsAccepted = 0; 35 + ServiceStatus.dwWin32ExitCode = 0; 36 + ServiceStatus.dwServiceSpecificExitCode = 0; 37 + ServiceStatus.dwCheckPoint = 0; 38 + 39 + if (dwState == SERVICE_START_PENDING || 40 + dwState == SERVICE_STOP_PENDING || 41 + dwState == SERVICE_PAUSE_PENDING || 42 + dwState == SERVICE_CONTINUE_PENDING) 43 + ServiceStatus.dwWaitHint = 10000; 44 + else 45 + ServiceStatus.dwWaitHint = 0; 46 + 47 + SetServiceStatus(ServiceStatusHandle, 48 + &ServiceStatus); 49 + } 50 + 51 + 52 + static 53 + DWORD 54 + WINAPI 55 + ServiceControlHandler( 56 + DWORD dwControl, 57 + DWORD dwEventType, 58 + LPVOID lpEventData, 59 + LPVOID lpContext) 60 + { 61 + TRACE("ServiceControlHandler()\n"); 62 + 63 + switch (dwControl) 64 + { 65 + case SERVICE_CONTROL_STOP: 66 + TRACE(" SERVICE_CONTROL_STOP received\n"); 67 + /* Stop listening to incoming RPC messages */ 68 + RpcMgmtStopServerListening(NULL); 69 + UpdateServiceStatus(SERVICE_STOPPED); 70 + return ERROR_SUCCESS; 71 + 72 + case SERVICE_CONTROL_PAUSE: 73 + TRACE(" SERVICE_CONTROL_PAUSE received\n"); 74 + UpdateServiceStatus(SERVICE_PAUSED); 75 + return ERROR_SUCCESS; 76 + 77 + case SERVICE_CONTROL_CONTINUE: 78 + TRACE(" SERVICE_CONTROL_CONTINUE received\n"); 79 + UpdateServiceStatus(SERVICE_RUNNING); 80 + return ERROR_SUCCESS; 81 + 82 + case SERVICE_CONTROL_INTERROGATE: 83 + TRACE(" SERVICE_CONTROL_INTERROGATE received\n"); 84 + SetServiceStatus(ServiceStatusHandle, 85 + &ServiceStatus); 86 + return ERROR_SUCCESS; 87 + 88 + case SERVICE_CONTROL_SHUTDOWN: 89 + TRACE(" SERVICE_CONTROL_SHUTDOWN received\n"); 90 + UpdateServiceStatus(SERVICE_STOPPED); 91 + return ERROR_SUCCESS; 92 + 93 + default : 94 + TRACE(" Control %lu received\n", dwControl); 95 + return ERROR_CALL_NOT_IMPLEMENTED; 96 + } 97 + } 98 + 99 + 100 + static 101 + DWORD 102 + ServiceInit(VOID) 103 + { 104 + HANDLE hThread; 105 + 106 + hThread = CreateThread(NULL, 107 + 0, 108 + (LPTHREAD_START_ROUTINE)RpcThreadRoutine, 109 + NULL, 110 + 0, 111 + NULL); 112 + 113 + if (!hThread) 114 + { 115 + ERR("Can't create PortThread\n"); 116 + return GetLastError(); 117 + } 118 + else 119 + CloseHandle(hThread); 120 + 121 + return ERROR_SUCCESS; 122 + } 123 + 124 + 125 + VOID WINAPI 126 + NlNetlogonMain( 127 + _In_ INT ArgCount, 128 + _In_ PWSTR *ArgVector) 129 + { 130 + DWORD dwError; 131 + 132 + UNREFERENCED_PARAMETER(ArgCount); 133 + UNREFERENCED_PARAMETER(ArgVector); 134 + 135 + TRACE("NlNetlogonMain(%d %p)\n", ArgCount, ArgVector); 136 + 137 + ServiceStatusHandle = RegisterServiceCtrlHandlerExW(ServiceName, 138 + ServiceControlHandler, 139 + NULL); 140 + if (!ServiceStatusHandle) 141 + { 142 + ERR("RegisterServiceCtrlHandlerExW() failed! (Error %lu)\n", GetLastError()); 143 + return; 144 + } 145 + 146 + UpdateServiceStatus(SERVICE_START_PENDING); 147 + 148 + dwError = ServiceInit(); 149 + if (dwError != ERROR_SUCCESS) 150 + { 151 + ERR("Service stopped (dwError: %lu\n", dwError); 152 + UpdateServiceStatus(SERVICE_STOPPED); 153 + return; 154 + } 155 + 156 + UpdateServiceStatus(SERVICE_RUNNING); 157 + } 158 + 159 + 160 + BOOL 161 + WINAPI 162 + DllMain( 163 + _In_ HINSTANCE hinstDLL, 164 + _In_ DWORD fdwReason, 165 + _In_ PVOID pvReserved) 166 + { 167 + UNREFERENCED_PARAMETER(pvReserved); 168 + 169 + switch (fdwReason) 170 + { 171 + case DLL_PROCESS_ATTACH: 172 + DisableThreadLibraryCalls(hinstDLL); 173 + hDllInstance = hinstDLL; 174 + break; 175 + 176 + case DLL_PROCESS_DETACH: 177 + break; 178 + } 179 + 180 + return TRUE; 181 + } 182 + 183 + /* EOF */
+5
base/services/netlogon/netlogon.rc
··· 1 + #define REACTOS_VERSION_DLL 2 + #define REACTOS_STR_FILE_DESCRIPTION "Net Logon Services Dll" 3 + #define REACTOS_STR_INTERNAL_NAME "netlogon" 4 + #define REACTOS_STR_ORIGINAL_FILENAME "netlogon.dll" 5 + #include <reactos/version.rc>
+29
base/services/netlogon/netlogon.spec
··· 1 + @ stdcall DsrGetDcName(wstr wstr ptr ptr long ptr) 2 + @ stdcall DsrGetDcNameEx2(wstr wstr long wstr ptr wstr long ptr) 3 + @ stub I_DsGetDcCache 4 + @ stub I_NetLogonAddressToSiteName 5 + @ stub I_NetLogonAppendChangeLog 6 + @ stub I_NetLogonCloseChangeLog 7 + @ stub I_NetLogonFree 8 + @ stub I_NetLogonGetAuthDataEx 9 + @ stub I_NetLogonGetDirectDomain 10 + @ stub I_NetLogonGetIpAddresses 11 + @ stub I_NetLogonGetSerialNumber 12 + @ stub I_NetLogonLdapLookup 13 + @ stub I_NetLogonLdapLookupEx 14 + @ stub I_NetLogonMixedDomain 15 + @ stub I_NetLogonNewChangeLog 16 + @ stub I_NetLogonReadChangeLog 17 + @ stub I_NetLogonSendToSamOnPdc 18 + @ stub I_NetLogonSetServiceBits 19 + @ stub I_NetNotifyDelta 20 + @ stub I_NetNotifyDsChange 21 + @ stub I_NetNotifyMachineAccount 22 + @ stub I_NetNotifyNetlogonDllHandle 23 + @ stub I_NetNotifyNtdsDsaDeletion 24 + @ stub I_NetNotifyRole 25 + @ stub I_NetNotifyTrustedDomain 26 + @ stub InitSecurityInterfaceW 27 + @ stdcall NetrLogonSamLogoff(wstr wstr ptr ptr long ptr) 28 + @ stdcall NetrLogonSamLogon(wstr wstr ptr ptr long ptr long ptr ptr) 29 + @ stdcall NlNetlogonMain(long ptr)
+34
base/services/netlogon/precomp.h
··· 1 + /* 2 + * PROJECT: ReactOS NetLogon Service 3 + * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) 4 + * PURPOSE: NetLogon service RPC server 5 + * COPYRIGHT: Eric Kohl 2019 <eric.kohl@reactos.org> 6 + */ 7 + 8 + #ifndef _NETLOGON_PCH_ 9 + #define _NETLOGON_PCH_ 10 + 11 + #define WIN32_NO_STATUS 12 + #define _INC_WINDOWS 13 + #define COM_NO_WINDOWS_H 14 + #include <limits.h> 15 + #include <stdarg.h> 16 + #include <stdio.h> 17 + #include <windef.h> 18 + #include <winbase.h> 19 + #include <winreg.h> 20 + #include <winsvc.h> 21 + #include <lmerr.h> 22 + 23 + #include <netlogon_s.h> 24 + 25 + #include <wine/debug.h> 26 + 27 + extern HINSTANCE hDllInstance; 28 + 29 + DWORD 30 + WINAPI 31 + RpcThreadRoutine( 32 + LPVOID lpParameter); 33 + 34 + #endif /* _NETLOGON_PCH_ */
+805
base/services/netlogon/rpcserver.c
··· 1 + /* 2 + * PROJECT: ReactOS NetLogon Service 3 + * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+) 4 + * PURPOSE: NetLogon service RPC server 5 + * COPYRIGHT: Eric Kohl 2019 <eric.kohl@reactos.org> 6 + */ 7 + 8 + /* INCLUDES *****************************************************************/ 9 + 10 + #include "precomp.h" 11 + 12 + //#include "lmerr.h" 13 + 14 + WINE_DEFAULT_DEBUG_CHANNEL(netlogon); 15 + 16 + /* FUNCTIONS *****************************************************************/ 17 + 18 + DWORD 19 + WINAPI 20 + RpcThreadRoutine( 21 + LPVOID lpParameter) 22 + { 23 + RPC_STATUS Status; 24 + 25 + Status = RpcServerUseProtseqEpW(L"ncacn_np", 20, L"\\pipe\\netlogon", NULL); 26 + if (Status != RPC_S_OK) 27 + { 28 + ERR("RpcServerUseProtseqEpW() failed (Status %lx)\n", Status); 29 + return 0; 30 + } 31 + 32 + Status = RpcServerRegisterIf(logon_v1_0_s_ifspec, NULL, NULL); 33 + if (Status != RPC_S_OK) 34 + { 35 + ERR("RpcServerRegisterIf() failed (Status %lx)\n", Status); 36 + return 0; 37 + } 38 + 39 + Status = RpcServerListen(1, RPC_C_LISTEN_MAX_CALLS_DEFAULT, FALSE); 40 + if (Status != RPC_S_OK) 41 + { 42 + ERR("RpcServerListen() failed (Status %lx)\n", Status); 43 + } 44 + 45 + return 0; 46 + } 47 + 48 + 49 + void __RPC_FAR * __RPC_USER midl_user_allocate(SIZE_T len) 50 + { 51 + return HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, len); 52 + } 53 + 54 + 55 + void __RPC_USER midl_user_free(void __RPC_FAR * ptr) 56 + { 57 + HeapFree(GetProcessHeap(), 0, ptr); 58 + } 59 + 60 + 61 + /* Function 0 */ 62 + NET_API_STATUS 63 + __stdcall 64 + NetrLogonUasLogon( 65 + _In_opt_ LOGONSRV_HANDLE ServerName, 66 + _In_ wchar_t *UserName, 67 + _In_ wchar_t *Workstation, 68 + _Out_ PNETLOGON_VALIDATION_UAS_INFO *ValidationInformation) 69 + { 70 + UNIMPLEMENTED; 71 + return 0; 72 + } 73 + 74 + 75 + /* Function 1 */ 76 + NET_API_STATUS 77 + __stdcall 78 + NetrLogonUasLogoff( 79 + _In_opt_ LOGONSRV_HANDLE ServerName, 80 + _In_ wchar_t *UserName, 81 + _In_ wchar_t *Workstation, 82 + _Out_ PNETLOGON_LOGOFF_UAS_INFO LogoffInformation) 83 + { 84 + UNIMPLEMENTED; 85 + return 0; 86 + } 87 + 88 + 89 + /* Function 2 */ 90 + NTSTATUS 91 + __stdcall 92 + NetrLogonSamLogon( 93 + _In_opt_ LOGONSRV_HANDLE LogonServer, 94 + _In_opt_ wchar_t *ComputerName, 95 + _In_opt_ PNETLOGON_AUTHENTICATOR Authenticator, 96 + _Inout_opt_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, 97 + _In_ NETLOGON_LOGON_INFO_CLASS LogonLevel, 98 + _In_ PNETLOGON_LEVEL LogonInformation, 99 + _In_ NETLOGON_VALIDATION_INFO_CLASS ValidationLevel, 100 + _Out_ PNETLOGON_VALIDATION ValidationInformation, 101 + _Out_ UCHAR *Authoritative) 102 + { 103 + UNIMPLEMENTED; 104 + return 0; 105 + } 106 + 107 + 108 + /* Function 3 */ 109 + NTSTATUS 110 + __stdcall 111 + NetrLogonSamLogoff( 112 + _In_opt_ LOGONSRV_HANDLE LogonServer, 113 + _In_opt_ wchar_t *ComputerName, 114 + _In_opt_ PNETLOGON_AUTHENTICATOR Authenticator, 115 + _Inout_opt_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, 116 + _In_ NETLOGON_LOGON_INFO_CLASS LogonLevel, 117 + _In_ PNETLOGON_LEVEL LogonInformation) 118 + { 119 + UNIMPLEMENTED; 120 + return 0; 121 + } 122 + 123 + 124 + /* Function 4 */ 125 + NTSTATUS 126 + __stdcall 127 + NetrServerReqChallenge( 128 + _In_opt_ LOGONSRV_HANDLE PrimaryName, 129 + _In_ wchar_t *ComputerName, 130 + _In_ PNETLOGON_CREDENTIAL ClientChallenge, 131 + _Out_ PNETLOGON_CREDENTIAL ServerChallenge) 132 + { 133 + UNIMPLEMENTED; 134 + return 0; 135 + } 136 + 137 + 138 + /* Function 5 */ 139 + NTSTATUS 140 + __stdcall 141 + NetrServerAuthenticate( 142 + _In_opt_ LOGONSRV_HANDLE PrimaryName, 143 + _In_ wchar_t *AccountName, 144 + _In_ NETLOGON_SECURE_CHANNEL_TYPE SecureChannelType, 145 + _In_ wchar_t *ComputerName, 146 + _In_ PNETLOGON_CREDENTIAL ClientCredential, 147 + _Out_ PNETLOGON_CREDENTIAL ServerCredential) 148 + { 149 + UNIMPLEMENTED; 150 + return 0; 151 + } 152 + 153 + 154 + /* Function 6 */ 155 + NTSTATUS 156 + __stdcall 157 + NetrServerPasswordSet( 158 + _In_opt_ LOGONSRV_HANDLE PrimaryName, 159 + _In_ wchar_t *AccountName, 160 + _In_ NETLOGON_SECURE_CHANNEL_TYPE SecureChannelType, 161 + _In_ wchar_t *ComputerName, 162 + _In_ PNETLOGON_AUTHENTICATOR Authenticator, 163 + _Out_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, 164 + _In_ PENCRYPTED_NT_OWF_PASSWORD UasNewPassword) 165 + { 166 + UNIMPLEMENTED; 167 + return 0; 168 + } 169 + 170 + 171 + /* Function 7 */ 172 + NTSTATUS 173 + __stdcall 174 + NetrDatabaseDeltas( 175 + _In_ LOGONSRV_HANDLE PrimaryName, 176 + _In_ wchar_t *ComputerName, 177 + _In_ PNETLOGON_AUTHENTICATOR Authenticator, 178 + _Inout_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, 179 + _In_ DWORD DatabaseID, 180 + _Inout_ PNLPR_MODIFIED_COUNT DomainModifiedCount, 181 + _Out_ PNETLOGON_DELTA_ENUM_ARRAY *DeltaArray, 182 + _In_ DWORD PreferredMaximumLength) 183 + { 184 + UNIMPLEMENTED; 185 + return 0; 186 + } 187 + 188 + 189 + /* Function 8 */ 190 + NTSTATUS 191 + __stdcall 192 + NetrDatabaseSync( 193 + _In_ LOGONSRV_HANDLE PrimaryName, 194 + _In_ wchar_t *ComputerName, 195 + _In_ PNETLOGON_AUTHENTICATOR Authenticator, 196 + _Inout_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, 197 + _In_ DWORD DatabaseID, 198 + _Inout_ ULONG *SyncContext, 199 + _Out_ PNETLOGON_DELTA_ENUM_ARRAY *DeltaArray, 200 + _In_ DWORD PreferredMaximumLength) 201 + { 202 + UNIMPLEMENTED; 203 + return 0; 204 + } 205 + 206 + 207 + /* Function 9 */ 208 + NTSTATUS 209 + __stdcall 210 + NetrAccountDeltas( 211 + _In_opt_ LOGONSRV_HANDLE PrimaryName, 212 + _In_ wchar_t * ComputerName, 213 + _In_ PNETLOGON_AUTHENTICATOR Authenticator, 214 + _Inout_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, 215 + _In_ PUAS_INFO_0 RecordId, 216 + _In_ DWORD Count, 217 + _In_ DWORD Level, 218 + _Out_ UCHAR *Buffer, 219 + _In_ DWORD BufferSize, 220 + _Out_ ULONG *CountReturned, 221 + _Out_ ULONG *TotalEntries, 222 + _Out_ PUAS_INFO_0 NextRecordId) 223 + { 224 + UNIMPLEMENTED; 225 + return 0; 226 + } 227 + 228 + 229 + /* Function 10 */ 230 + NTSTATUS 231 + __stdcall 232 + NetrAccountSync( 233 + _In_opt_ LOGONSRV_HANDLE PrimaryName, 234 + _In_ wchar_t *ComputerName, 235 + _In_ PNETLOGON_AUTHENTICATOR Authenticator, 236 + _Inout_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, 237 + _In_ DWORD Reference, 238 + _In_ DWORD Level, 239 + _Out_ UCHAR *Buffer, 240 + _In_ DWORD BufferSize, 241 + _Out_ ULONG *CountReturned, 242 + _Out_ ULONG *TotalEntries, 243 + _Out_ ULONG *NextReference, 244 + _Out_ PUAS_INFO_0 LastRecordId) 245 + { 246 + UNIMPLEMENTED; 247 + return 0; 248 + } 249 + 250 + 251 + /* Function 11 */ 252 + NET_API_STATUS 253 + __stdcall 254 + NetrGetDCName( 255 + _In_ LOGONSRV_HANDLE ServerName, 256 + _In_opt_ wchar_t *DomainName, 257 + _Out_ wchar_t **Buffer) 258 + { 259 + UNIMPLEMENTED; 260 + return 0; 261 + } 262 + 263 + 264 + /* Function 12 */ 265 + NET_API_STATUS 266 + __stdcall 267 + NetrLogonControl( 268 + _In_opt_ LOGONSRV_HANDLE ServerName, 269 + _In_ DWORD FunctionCode, 270 + _In_ DWORD QueryLevel, 271 + _Out_ PNETLOGON_CONTROL_QUERY_INFORMATION Buffer) 272 + { 273 + UNIMPLEMENTED; 274 + return 0; 275 + } 276 + 277 + 278 + /* Function 13 */ 279 + NET_API_STATUS 280 + __stdcall 281 + NetrGetAnyDCName( 282 + _In_opt_ LOGONSRV_HANDLE ServerName, 283 + _In_opt_ wchar_t *DomainName, 284 + _Out_ wchar_t **Buffer) 285 + { 286 + UNIMPLEMENTED; 287 + return 0; 288 + } 289 + 290 + 291 + /* Function 14 */ 292 + NET_API_STATUS 293 + __stdcall 294 + NetrLogonControl2( 295 + _In_opt_ LOGONSRV_HANDLE ServerName, 296 + _In_ DWORD FunctionCode, 297 + _In_ DWORD QueryLevel, 298 + _In_ PNETLOGON_CONTROL_DATA_INFORMATION Data, 299 + _Out_ PNETLOGON_CONTROL_QUERY_INFORMATION Buffer) 300 + { 301 + UNIMPLEMENTED; 302 + return 0; 303 + } 304 + 305 + 306 + /* Function 15 */ 307 + NTSTATUS 308 + __stdcall 309 + NetrServerAuthenticate2( 310 + _In_opt_ LOGONSRV_HANDLE PrimaryName, 311 + _In_ wchar_t *AccountName, 312 + _In_ NETLOGON_SECURE_CHANNEL_TYPE SecureChannelType, 313 + _In_ wchar_t *ComputerName, 314 + _In_ PNETLOGON_CREDENTIAL ClientCredential, 315 + _Out_ PNETLOGON_CREDENTIAL ServerCredential, 316 + _Inout_ ULONG *NegotiateFlags) 317 + { 318 + UNIMPLEMENTED; 319 + return 0; 320 + } 321 + 322 + 323 + /* Function 16 */ 324 + NTSTATUS 325 + __stdcall 326 + NetrDatabaseSync2( 327 + _In_ LOGONSRV_HANDLE PrimaryName, 328 + _In_ wchar_t *ComputerName, 329 + _In_ PNETLOGON_AUTHENTICATOR Authenticator, 330 + _Inout_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, 331 + _In_ DWORD DatabaseID, 332 + _In_ SYNC_STATE RestartState, 333 + _Inout_ ULONG *SyncContext, 334 + _Out_ PNETLOGON_DELTA_ENUM_ARRAY *DeltaArray, 335 + _In_ DWORD PreferredMaximumLength) 336 + { 337 + UNIMPLEMENTED; 338 + return 0; 339 + } 340 + 341 + 342 + /* Function 17 */ 343 + NTSTATUS 344 + __stdcall 345 + NetrDatabaseRedo( 346 + _In_ LOGONSRV_HANDLE PrimaryName, 347 + _In_ wchar_t *ComputerName, 348 + _In_ PNETLOGON_AUTHENTICATOR Authenticator, 349 + _Inout_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, 350 + _In_ UCHAR *ChangeLogEntry, 351 + _In_ DWORD ChangeLogEntrySize, 352 + _Out_ PNETLOGON_DELTA_ENUM_ARRAY *DeltaArray) 353 + { 354 + UNIMPLEMENTED; 355 + return 0; 356 + } 357 + 358 + 359 + /* Function 18 */ 360 + NET_API_STATUS 361 + __stdcall 362 + NetrLogonControl2Ex( 363 + _In_opt_ LOGONSRV_HANDLE ServerName, 364 + _In_ DWORD FunctionCode, 365 + _In_ DWORD QueryLevel, 366 + _In_ PNETLOGON_CONTROL_DATA_INFORMATION Data, 367 + _Out_ PNETLOGON_CONTROL_QUERY_INFORMATION Buffer) 368 + { 369 + UNIMPLEMENTED; 370 + return 0; 371 + } 372 + 373 + 374 + /* Function 19 */ 375 + NTSTATUS 376 + __stdcall 377 + NetrEnumerateTrustedDomains( 378 + _In_opt_ LOGONSRV_HANDLE ServerName, 379 + _Out_ PDOMAIN_NAME_BUFFER DomainNameBuffer) 380 + { 381 + UNIMPLEMENTED; 382 + return 0; 383 + } 384 + 385 + 386 + /* Function 20 */ 387 + NET_API_STATUS 388 + __stdcall 389 + DsrGetDcName( 390 + _In_opt_ LOGONSRV_HANDLE ComputerName, 391 + _In_opt_ wchar_t *DomainName, 392 + _In_opt_ GUID *DomainGuid, 393 + _In_opt_ GUID *SiteGuid, 394 + _In_ ULONG Flags, 395 + _Out_ PDOMAIN_CONTROLLER_INFOW *DomainControllerInfo) 396 + { 397 + UNIMPLEMENTED; 398 + return 0; 399 + } 400 + 401 + 402 + /* Function 21 */ 403 + NTSTATUS 404 + __stdcall 405 + NetrLogonGetCapabilities( 406 + _In_ LOGONSRV_HANDLE ServerName, 407 + _In_opt_ wchar_t *ComputerName, 408 + _In_ PNETLOGON_AUTHENTICATOR Authenticator, 409 + _Inout_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, 410 + _In_ DWORD QueryLevel, 411 + _Out_ PNETLOGON_CAPABILITIES ServerCapabilities) 412 + { 413 + UNIMPLEMENTED; 414 + return 0; 415 + } 416 + 417 + 418 + /* Function 22 */ 419 + NTSTATUS 420 + __stdcall 421 + NetrLogonSetServiceBits( 422 + _In_opt_ LOGONSRV_HANDLE ServerName, 423 + _In_ DWORD ServiceBitsOfInterest, 424 + _In_ DWORD ServiceBits) 425 + { 426 + UNIMPLEMENTED; 427 + return 0; 428 + } 429 + 430 + 431 + /* Function 23 */ 432 + NET_API_STATUS 433 + __stdcall 434 + NetrLogonGetTrustRid( 435 + _In_opt_ LOGONSRV_HANDLE ServerName, 436 + _In_opt_ wchar_t *DomainName, 437 + _Out_ ULONG *Rid) 438 + { 439 + UNIMPLEMENTED; 440 + return 0; 441 + } 442 + 443 + 444 + /* Function 24 */ 445 + NET_API_STATUS 446 + __stdcall 447 + NetrLogonComputeServerDigest( 448 + _In_opt_ LOGONSRV_HANDLE ServerName, 449 + _In_ ULONG Rid, 450 + _In_ UCHAR *Message, 451 + _In_ ULONG MessageSize, 452 + _Out_ CHAR NewMessageDigest[16], 453 + _Out_ CHAR OldMessageDigest[16]) 454 + { 455 + UNIMPLEMENTED; 456 + return 0; 457 + } 458 + 459 + 460 + /* Function 25 */ 461 + NET_API_STATUS 462 + __stdcall 463 + NetrLogonComputeClientDigest( 464 + _In_opt_ LOGONSRV_HANDLE ServerName, 465 + _In_opt_ wchar_t *DomainName, 466 + _In_ UCHAR *Message, 467 + _In_ ULONG MessageSize, 468 + _Out_ CHAR NewMessageDigest[16], 469 + _Out_ CHAR OldMessageDigest[16]) 470 + { 471 + UNIMPLEMENTED; 472 + return 0; 473 + } 474 + 475 + 476 + /* Function 26 */ 477 + NTSTATUS 478 + __stdcall 479 + NetrServerAuthenticate3( 480 + _In_opt_ LOGONSRV_HANDLE PrimaryName, 481 + _In_ wchar_t *AccountName, 482 + _In_ NETLOGON_SECURE_CHANNEL_TYPE SecureChannelType, 483 + _In_ wchar_t *ComputerName, 484 + _In_ PNETLOGON_CREDENTIAL ClientCredential, 485 + _Out_ PNETLOGON_CREDENTIAL ServerCredential, 486 + _Inout_ ULONG *NegotiateFlags, 487 + _Out_ ULONG *AccountRid) 488 + { 489 + UNIMPLEMENTED; 490 + return 0; 491 + } 492 + 493 + 494 + /* Function 27 */ 495 + NET_API_STATUS 496 + __stdcall 497 + DsrGetDcNameEx( 498 + _In_opt_ LOGONSRV_HANDLE ComputerName, 499 + _In_opt_ wchar_t *DomainName, 500 + _In_opt_ GUID *DomainGuid, 501 + _In_opt_ wchar_t *SiteName, 502 + _In_ ULONG Flags, 503 + _Out_ PDOMAIN_CONTROLLER_INFOW *DomainControllerInfo) 504 + { 505 + UNIMPLEMENTED; 506 + return 0; 507 + } 508 + 509 + 510 + /* Function 28 */ 511 + NET_API_STATUS 512 + __stdcall 513 + DsrGetSiteName( 514 + _In_opt_ LOGONSRV_HANDLE ComputerName, 515 + _Out_ wchar_t **SiteName) 516 + { 517 + UNIMPLEMENTED; 518 + return 0; 519 + } 520 + 521 + 522 + /* Function 29 */ 523 + NTSTATUS 524 + __stdcall 525 + NetrLogonGetDomainInfo( 526 + _In_ LOGONSRV_HANDLE ServerName, 527 + _In_opt_ wchar_t *ComputerName, 528 + _In_ PNETLOGON_AUTHENTICATOR Authenticator, 529 + _Inout_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, 530 + _In_ DWORD Level, 531 + _In_ PNETLOGON_WORKSTATION_INFORMATION WkstaBuffer, 532 + _Out_ PNETLOGON_DOMAIN_INFORMATION DomBuffer) 533 + { 534 + UNIMPLEMENTED; 535 + return 0; 536 + } 537 + 538 + 539 + /* Function 30 */ 540 + NTSTATUS 541 + __stdcall 542 + NetrServerPasswordSet2( 543 + _In_opt_ LOGONSRV_HANDLE PrimaryName, 544 + _In_ wchar_t *AccountName, 545 + _In_ NETLOGON_SECURE_CHANNEL_TYPE SecureChannelType, 546 + _In_ wchar_t *ComputerName, 547 + _In_ PNETLOGON_AUTHENTICATOR Authenticator, 548 + _Out_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, 549 + _In_ PNL_TRUST_PASSWORD ClearNewPassword) 550 + { 551 + UNIMPLEMENTED; 552 + return 0; 553 + } 554 + 555 + 556 + /* Function 31 */ 557 + NTSTATUS 558 + __stdcall 559 + NetrServerPasswordGet( 560 + _In_opt_ LOGONSRV_HANDLE PrimaryName, 561 + _In_ wchar_t *AccountName, 562 + _In_ NETLOGON_SECURE_CHANNEL_TYPE AccountType, 563 + _In_ wchar_t *ComputerName, 564 + _In_ PNETLOGON_AUTHENTICATOR Authenticator, 565 + _Out_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, 566 + _Out_ PENCRYPTED_NT_OWF_PASSWORD EncryptedNtOwfPassword) 567 + { 568 + UNIMPLEMENTED; 569 + return 0; 570 + } 571 + 572 + 573 + /* Function 32 */ 574 + NTSTATUS 575 + __stdcall 576 + NetrLogonSendToSam( 577 + _In_opt_ LOGONSRV_HANDLE PrimaryName, 578 + _In_ wchar_t *ComputerName, 579 + _In_ PNETLOGON_AUTHENTICATOR Authenticator, 580 + _Out_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, 581 + _In_ UCHAR *OpaqueBuffer, 582 + _In_ ULONG OpaqueBufferSize) 583 + { 584 + UNIMPLEMENTED; 585 + return 0; 586 + } 587 + 588 + 589 + /* Function 33 */ 590 + NET_API_STATUS 591 + __stdcall 592 + DsrAddressToSiteNamesW( 593 + _In_opt_ LOGONSRV_HANDLE ComputerName, 594 + _In_ DWORD EntryCount, 595 + _In_ PNL_SOCKET_ADDRESS SocketAddresses, 596 + _Out_ PNL_SITE_NAME_ARRAY *SiteNames) 597 + { 598 + UNIMPLEMENTED; 599 + return 0; 600 + } 601 + 602 + 603 + /* Function 34 */ 604 + NET_API_STATUS 605 + __stdcall 606 + DsrGetDcNameEx2( 607 + _In_opt_ LOGONSRV_HANDLE ComputerName, 608 + _In_opt_ wchar_t *AccountName, 609 + _In_ ULONG AllowableAccountControlBits, 610 + _In_opt_ wchar_t *DomainName, 611 + _In_opt_ GUID *DomainGuid, 612 + _In_opt_ wchar_t *SiteName, 613 + _In_ ULONG Flags, 614 + _Out_ PDOMAIN_CONTROLLER_INFOW *DomainControllerInfo) 615 + { 616 + UNIMPLEMENTED; 617 + return NERR_DCNotFound; 618 + } 619 + 620 + 621 + /* Function 35 */ 622 + NET_API_STATUS 623 + __stdcall 624 + NetrLogonGetTimeServiceParentDomain( 625 + _In_opt_ LOGONSRV_HANDLE ServerName, 626 + _Out_ wchar_t **DomainName, 627 + _Out_ int *PdcSameSite) 628 + { 629 + UNIMPLEMENTED; 630 + return 0; 631 + } 632 + 633 + 634 + /* Function 36 */ 635 + NET_API_STATUS 636 + __stdcall 637 + NetrEnumerateTrustedDomainsEx( 638 + _In_opt_ LOGONSRV_HANDLE ServerName, 639 + _Out_ PNETLOGON_TRUSTED_DOMAIN_ARRAY Domains) 640 + { 641 + UNIMPLEMENTED; 642 + return 0; 643 + } 644 + 645 + 646 + /* Function 37 */ 647 + NET_API_STATUS 648 + __stdcall 649 + DsrAddressToSiteNamesExW( 650 + _In_opt_ LOGONSRV_HANDLE ComputerName, 651 + _In_ DWORD EntryCount, 652 + _In_ PNL_SOCKET_ADDRESS SocketAddresses, 653 + _Out_ PNL_SITE_NAME_EX_ARRAY *SiteNames) 654 + { 655 + UNIMPLEMENTED; 656 + return 0; 657 + } 658 + 659 + 660 + /* Function 38 */ 661 + NET_API_STATUS 662 + __stdcall 663 + DsrGetDcSiteCoverageW( 664 + _In_opt_ LOGONSRV_HANDLE ServerName, 665 + _Out_ PNL_SITE_NAME_ARRAY *SiteNames) 666 + { 667 + UNIMPLEMENTED; 668 + return 0; 669 + } 670 + 671 + 672 + /* Function 39 */ 673 + NTSTATUS 674 + __stdcall 675 + NetrLogonSamLogonEx( 676 + _In_ handle_t ContextHandle, 677 + _In_opt_ wchar_t *LogonServer, 678 + _In_opt_ wchar_t *ComputerName, 679 + _In_ NETLOGON_LOGON_INFO_CLASS LogonLevel, 680 + _In_ PNETLOGON_LEVEL LogonInformation, 681 + _In_ NETLOGON_VALIDATION_INFO_CLASS ValidationLevel, 682 + _Out_ PNETLOGON_VALIDATION ValidationInformation, 683 + _Out_ UCHAR *Authoritative, 684 + _Inout_ ULONG *ExtraFlags) 685 + { 686 + UNIMPLEMENTED; 687 + return 0; 688 + } 689 + 690 + 691 + /* Function 40 */ 692 + NET_API_STATUS 693 + __stdcall 694 + DsrEnumerateDomainTrusts( 695 + _In_opt_ LOGONSRV_HANDLE ServerName, 696 + _In_ ULONG Flags, 697 + _Out_ PNETLOGON_TRUSTED_DOMAIN_ARRAY Domains) 698 + { 699 + UNIMPLEMENTED; 700 + return 0; 701 + } 702 + 703 + 704 + /* Function 41 */ 705 + NET_API_STATUS 706 + __stdcall 707 + DsrDeregisterDnsHostRecords( 708 + _In_opt_ LOGONSRV_HANDLE ServerName, 709 + _In_opt_ wchar_t *DnsDomainName, 710 + _In_opt_ GUID *DomainGuid, 711 + _In_opt_ GUID *DsaGuid, 712 + _In_ wchar_t *DnsHostName) 713 + { 714 + UNIMPLEMENTED; 715 + return 0; 716 + } 717 + 718 + 719 + /* Function 42 */ 720 + NTSTATUS 721 + __stdcall 722 + NetrServerTrustPasswordsGet( 723 + _In_opt_ LOGONSRV_HANDLE TrustedDcName, 724 + _In_ wchar_t *AccountName, 725 + _In_ NETLOGON_SECURE_CHANNEL_TYPE SecureChannelType, 726 + _In_ wchar_t *ComputerName, 727 + _In_ PNETLOGON_AUTHENTICATOR Authenticator, 728 + _Out_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, 729 + _Out_ PENCRYPTED_NT_OWF_PASSWORD EncryptedNewOwfPassword, 730 + _Out_ PENCRYPTED_NT_OWF_PASSWORD EncryptedOldOwfPassword) 731 + { 732 + UNIMPLEMENTED; 733 + return 0; 734 + } 735 + 736 + 737 + /* Function 43 */ 738 + NET_API_STATUS 739 + __stdcall 740 + DsrGetForestTrustInformation( 741 + _In_opt_ LOGONSRV_HANDLE ServerName, 742 + _In_opt_ wchar_t *TrustedDomainName, 743 + _In_ DWORD Flags, 744 + _Out_ PLSA_FOREST_TRUST_INFORMATION *ForestTrustInfo) 745 + { 746 + UNIMPLEMENTED; 747 + return 0; 748 + } 749 + 750 + 751 + /* Function 44 */ 752 + NTSTATUS 753 + __stdcall 754 + NetrGetForestTrustInformation( 755 + _In_opt_ LOGONSRV_HANDLE ServerName, 756 + _In_ wchar_t *ComputerName, 757 + _In_ PNETLOGON_AUTHENTICATOR Authenticator, 758 + _Out_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, 759 + _In_ DWORD Flags, 760 + _Out_ PLSA_FOREST_TRUST_INFORMATION *ForestTrustInfo) 761 + { 762 + UNIMPLEMENTED; 763 + return 0; 764 + } 765 + 766 + 767 + /* Function 45 */ 768 + NTSTATUS 769 + __stdcall 770 + NetrLogonSamLogonWithFlags( 771 + _In_opt_ LOGONSRV_HANDLE LogonServer, 772 + _In_opt_ wchar_t *ComputerName, 773 + _In_opt_ PNETLOGON_AUTHENTICATOR Authenticator, 774 + _Inout_opt_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, 775 + _In_ NETLOGON_LOGON_INFO_CLASS LogonLevel, 776 + _In_ PNETLOGON_LEVEL LogonInformation, 777 + _In_ NETLOGON_VALIDATION_INFO_CLASS ValidationLevel, 778 + _Out_ PNETLOGON_VALIDATION ValidationInformation, 779 + _Out_ UCHAR *Authoritative, 780 + _Inout_ ULONG *ExtraFlags) 781 + { 782 + UNIMPLEMENTED; 783 + return 0; 784 + } 785 + 786 + 787 + /* Function 46 */ 788 + NTSTATUS 789 + __stdcall 790 + NetrServerGetTrustInfo( 791 + _In_opt_ LOGONSRV_HANDLE TrustedDcName, 792 + _In_ wchar_t *AccountName, 793 + _In_ NETLOGON_SECURE_CHANNEL_TYPE SecureChannelType, 794 + _In_ wchar_t *ComputerName, 795 + _In_ PNETLOGON_AUTHENTICATOR Authenticator, 796 + _Out_ PNETLOGON_AUTHENTICATOR ReturnAuthenticator, 797 + _Out_ PENCRYPTED_NT_OWF_PASSWORD EncryptedNewOwfPassword, 798 + _Out_ PENCRYPTED_NT_OWF_PASSWORD EncryptedOldOwfPassword, 799 + _Out_ PNL_GENERIC_RPC_DATA *TrustInfo) 800 + { 801 + UNIMPLEMENTED; 802 + return 0; 803 + } 804 + 805 + /* EOF */