/*
 * PROJECT:     ReactOS NetLogon Service
 * LICENSE:     GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
 * PURPOSE:     NetLogon service RPC server
 * COPYRIGHT:   Eric Kohl 2019 <eric.kohl@reactos.org>
 */

/* 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 */