windows-nt/Source/XPSP1/NT/public/internal/ds/inc/logonmsv.h
2020-09-26 16:20:57 +08:00

734 lines
21 KiB
C

/*++
Copyright (c) 1987-1991 Microsoft Corporation
Module Name:
logonmsv.h
Abstract:
Definition of API's to the Netlogon service which are callable
by the MSV1_0 authentication package.
Author:
Cliff Van Dyke (cliffv) 23-Jun-1991
Environment:
User mode only.
Contains NT-specific code.
Requires ANSI C extensions: slash-slash comments, long external names.
Revision History:
--*/
#ifndef __LOGONMSV_H__
#define __LOGONMSV_H__
#include <lsass.h> // OLD_LARGE_INTEGER
//
// Name of secret in LSA secret storage where account passwords are kept.
//
#define SSI_SECRET_PREFIX L"$"
#define SSI_SECRET_PREFIX_LENGTH 1
#define SSI_SECRET_POSTFIX L"MACHINE.ACC"
#define SSI_SECRET_NAME L"$MACHINE.ACC"
//
// Name of the event used to synchronize between the security process and
// the service controller.
//
#define SECURITY_SERVICES_STARTED L"SECURITY_SERVICES_STARTED"
//
// The structures supporting remote logon APIs
//
typedef CYPHER_BLOCK NETLOGON_CREDENTIAL, *PNETLOGON_CREDENTIAL ;
typedef struct _NETLOGON_AUTHENTICATOR {
NETLOGON_CREDENTIAL Credential;
DWORD timestamp;
} NETLOGON_AUTHENTICATOR, *PNETLOGON_AUTHENTICATOR ;
typedef struct _NETLOGON_SESSION_KEY {
BYTE Key[CRYPT_TXT_LEN * 2];
} NETLOGON_SESSION_KEY, *PNETLOGON_SESSION_KEY;
typedef enum _NETLOGON_SECURE_CHANNEL_TYPE {
NullSecureChannel = 0,
MsvApSecureChannel,
WorkstationSecureChannel,
TrustedDnsDomainSecureChannel,
TrustedDomainSecureChannel,
UasServerSecureChannel,
ServerSecureChannel
} NETLOGON_SECURE_CHANNEL_TYPE;
#define IsDomainSecureChannelType( _T ) \
( (_T) == TrustedDnsDomainSecureChannel || \
(_T) == TrustedDomainSecureChannel )
//
// Input information to NetLogonSamLogon.
//
// begin_ntsubauth
typedef enum _NETLOGON_LOGON_INFO_CLASS {
NetlogonInteractiveInformation = 1,
NetlogonNetworkInformation,
NetlogonServiceInformation,
NetlogonGenericInformation,
NetlogonInteractiveTransitiveInformation,
NetlogonNetworkTransitiveInformation,
NetlogonServiceTransitiveInformation
} NETLOGON_LOGON_INFO_CLASS;
typedef struct _NETLOGON_LOGON_IDENTITY_INFO {
UNICODE_STRING LogonDomainName;
ULONG ParameterControl;
OLD_LARGE_INTEGER LogonId;
UNICODE_STRING UserName;
UNICODE_STRING Workstation;
} NETLOGON_LOGON_IDENTITY_INFO,
*PNETLOGON_LOGON_IDENTITY_INFO;
typedef struct _NETLOGON_INTERACTIVE_INFO {
NETLOGON_LOGON_IDENTITY_INFO Identity;
LM_OWF_PASSWORD LmOwfPassword;
NT_OWF_PASSWORD NtOwfPassword;
} NETLOGON_INTERACTIVE_INFO,
*PNETLOGON_INTERACTIVE_INFO;
typedef struct _NETLOGON_SERVICE_INFO {
NETLOGON_LOGON_IDENTITY_INFO Identity;
LM_OWF_PASSWORD LmOwfPassword;
NT_OWF_PASSWORD NtOwfPassword;
} NETLOGON_SERVICE_INFO, *PNETLOGON_SERVICE_INFO;
typedef struct _NETLOGON_NETWORK_INFO {
NETLOGON_LOGON_IDENTITY_INFO Identity;
LM_CHALLENGE LmChallenge;
STRING NtChallengeResponse;
STRING LmChallengeResponse;
} NETLOGON_NETWORK_INFO, *PNETLOGON_NETWORK_INFO;
typedef struct _NETLOGON_GENERIC_INFO {
NETLOGON_LOGON_IDENTITY_INFO Identity;
UNICODE_STRING PackageName;
ULONG DataLength;
#ifdef MIDL_PASS
[size_is(DataLength)]
#endif
PUCHAR LogonData;
} NETLOGON_GENERIC_INFO, *PNETLOGON_GENERIC_INFO;
// end_ntsubauth
//
// Structure to pass a SID_AND_ATTRIBUTES over the network.
//
typedef struct _NETLOGON_SID_AND_ATTRIBUTES {
#if defined(MIDL_PASS) || defined(RPC_SERVER)
PISID Sid;
#else
PSID Sid;
#endif
ULONG Attributes;
} NETLOGON_SID_AND_ATTRIBUTES, *PNETLOGON_SID_AND_ATTRIBUTES;
//
// Values of ParameterControl
//
// (Obsolete: Use the ParameterControl values from ntmsv1_0.h)
#define CLEARTEXT_PASSWORD_ALLOWED 0x02 // Challenge response fields may
// actually be clear text passwords.
//
// Output information to NetLogonSamLogon.
//
typedef enum _NETLOGON_VALIDATION_INFO_CLASS {
NetlogonValidationUasInfo = 1,
NetlogonValidationSamInfo,
NetlogonValidationSamInfo2,
NetlogonValidationGenericInfo,
NetlogonValidationGenericInfo2,
NetlogonValidationSamInfo4
} NETLOGON_VALIDATION_INFO_CLASS;
typedef struct _NETLOGON_VALIDATION_SAM_INFO {
//
// Information retrieved from SAM.
//
OLD_LARGE_INTEGER LogonTime; // 0 for Network logon
OLD_LARGE_INTEGER LogoffTime;
OLD_LARGE_INTEGER KickOffTime;
OLD_LARGE_INTEGER PasswordLastSet; // 0 for Network logon
OLD_LARGE_INTEGER PasswordCanChange; // 0 for Network logon
OLD_LARGE_INTEGER PasswordMustChange; // 0 for Network logon
UNICODE_STRING EffectiveName; // 0 for Network logon
UNICODE_STRING FullName; // 0 for Network logon
UNICODE_STRING LogonScript; // 0 for Network logon
UNICODE_STRING ProfilePath; // 0 for Network logon
UNICODE_STRING HomeDirectory; // 0 for Network logon
UNICODE_STRING HomeDirectoryDrive; // 0 for Network logon
USHORT LogonCount; // 0 for Network logon
USHORT BadPasswordCount; // 0 for Network logon
ULONG UserId;
ULONG PrimaryGroupId;
ULONG GroupCount;
#ifdef MIDL_PASS
[size_is(GroupCount)]
#endif // MIDL_PASS
PGROUP_MEMBERSHIP GroupIds;
//
// Information supplied by the MSV AP/Netlogon service.
//
ULONG UserFlags;
USER_SESSION_KEY UserSessionKey;
UNICODE_STRING LogonServer;
UNICODE_STRING LogonDomainName;
#if defined(MIDL_PASS) || defined(RPC_SERVER)
PISID LogonDomainId;
#else
PSID LogonDomainId;
#endif
ULONG ExpansionRoom[10]; // Put new fields here
} NETLOGON_VALIDATION_SAM_INFO, *PNETLOGON_VALIDATION_SAM_INFO ;
//
// New output information for NetLogonSamLogon. This structure is identical
// to the above structure with some new fields added at the end.
//
typedef struct _NETLOGON_VALIDATION_SAM_INFO2 {
//
// Information retrieved from SAM.
//
OLD_LARGE_INTEGER LogonTime; // 0 for Network logon
OLD_LARGE_INTEGER LogoffTime;
OLD_LARGE_INTEGER KickOffTime;
OLD_LARGE_INTEGER PasswordLastSet; // 0 for Network logon
OLD_LARGE_INTEGER PasswordCanChange; // 0 for Network logon
OLD_LARGE_INTEGER PasswordMustChange; // 0 for Network logon
UNICODE_STRING EffectiveName; // 0 for Network logon
UNICODE_STRING FullName; // 0 for Network logon
UNICODE_STRING LogonScript; // 0 for Network logon
UNICODE_STRING ProfilePath; // 0 for Network logon
UNICODE_STRING HomeDirectory; // 0 for Network logon
UNICODE_STRING HomeDirectoryDrive; // 0 for Network logon
USHORT LogonCount; // 0 for Network logon
USHORT BadPasswordCount; // 0 for Network logon
ULONG UserId;
ULONG PrimaryGroupId;
ULONG GroupCount;
#ifdef MIDL_PASS
[size_is(GroupCount)]
#endif // MIDL_PASS
PGROUP_MEMBERSHIP GroupIds;
//
// Information supplied by the MSV AP/Netlogon service.
//
ULONG UserFlags;
USER_SESSION_KEY UserSessionKey;
UNICODE_STRING LogonServer;
UNICODE_STRING LogonDomainName;
#if defined(MIDL_PASS) || defined(RPC_SERVER)
PISID LogonDomainId;
#else
PSID LogonDomainId;
#endif
ULONG ExpansionRoom[10]; // Put new fields here
//
// The new fields in this structure are a count and a pointer to
// an array of SIDs and attributes.
//
ULONG SidCount;
#ifdef MIDL_PASS
[size_is(SidCount)]
#endif // MIDL_PASS
PNETLOGON_SID_AND_ATTRIBUTES ExtraSids;
} NETLOGON_VALIDATION_SAM_INFO2, *PNETLOGON_VALIDATION_SAM_INFO2 ;
//
// Info level 3 is a version used internally by kerberos. It never appears on the wire.
//
typedef struct _NETLOGON_VALIDATION_SAM_INFO3 {
//
// Information retrieved from SAM.
//
OLD_LARGE_INTEGER LogonTime; // 0 for Network logon
OLD_LARGE_INTEGER LogoffTime;
OLD_LARGE_INTEGER KickOffTime;
OLD_LARGE_INTEGER PasswordLastSet; // 0 for Network logon
OLD_LARGE_INTEGER PasswordCanChange; // 0 for Network logon
OLD_LARGE_INTEGER PasswordMustChange; // 0 for Network logon
UNICODE_STRING EffectiveName; // 0 for Network logon
UNICODE_STRING FullName; // 0 for Network logon
UNICODE_STRING LogonScript; // 0 for Network logon
UNICODE_STRING ProfilePath; // 0 for Network logon
UNICODE_STRING HomeDirectory; // 0 for Network logon
UNICODE_STRING HomeDirectoryDrive; // 0 for Network logon
USHORT LogonCount; // 0 for Network logon
USHORT BadPasswordCount; // 0 for Network logon
ULONG UserId;
ULONG PrimaryGroupId;
ULONG GroupCount;
#ifdef MIDL_PASS
[size_is(GroupCount)]
#endif // MIDL_PASS
PGROUP_MEMBERSHIP GroupIds;
//
// Information supplied by the MSV AP/Netlogon service.
//
ULONG UserFlags;
USER_SESSION_KEY UserSessionKey;
UNICODE_STRING LogonServer;
UNICODE_STRING LogonDomainName;
#if defined(MIDL_PASS) || defined(RPC_SERVER)
PISID LogonDomainId;
#else
PSID LogonDomainId;
#endif
ULONG ExpansionRoom[10]; // Put new fields here
//
// The new fields in this structure are a count and a pointer to
// an array of SIDs and attributes.
//
ULONG SidCount;
#ifdef MIDL_PASS
[size_is(SidCount)]
#endif // MIDL_PASS
PNETLOGON_SID_AND_ATTRIBUTES ExtraSids;
//
// Resource groups. These are present if LOGON_RESOURCE_GROUPS bit is
// set in the user flags
//
#if defined(MIDL_PASS) || defined(RPC_SERVER)
PISID ResourceGroupDomainSid;
#else
PSID ResourceGroupDomainSid;
#endif
ULONG ResourceGroupCount;
#ifdef MIDL_PASS
[size_is(ResourceGroupCount)]
#endif // MIDL_PASS
PGROUP_MEMBERSHIP ResourceGroupIds;
} NETLOGON_VALIDATION_SAM_INFO3, *PNETLOGON_VALIDATION_SAM_INFO3 ;
//
// New output information for NetLogonSamLogon. This structure is identical
// to the NETLOGON_VALIDATION_SAM_INFO2 with some new fields added at the end.
//
// This version was introduced in Whistler.
//
typedef struct _NETLOGON_VALIDATION_SAM_INFO4 {
//
// Information retrieved from SAM.
//
OLD_LARGE_INTEGER LogonTime; // 0 for Network logon
OLD_LARGE_INTEGER LogoffTime;
OLD_LARGE_INTEGER KickOffTime;
OLD_LARGE_INTEGER PasswordLastSet; // 0 for Network logon
OLD_LARGE_INTEGER PasswordCanChange; // 0 for Network logon
OLD_LARGE_INTEGER PasswordMustChange; // 0 for Network logon
UNICODE_STRING EffectiveName; // 0 for Network logon
UNICODE_STRING FullName; // 0 for Network logon
UNICODE_STRING LogonScript; // 0 for Network logon
UNICODE_STRING ProfilePath; // 0 for Network logon
UNICODE_STRING HomeDirectory; // 0 for Network logon
UNICODE_STRING HomeDirectoryDrive; // 0 for Network logon
USHORT LogonCount; // 0 for Network logon
USHORT BadPasswordCount; // 0 for Network logon
ULONG UserId;
ULONG PrimaryGroupId;
ULONG GroupCount;
#ifdef MIDL_PASS
[size_is(GroupCount)]
#endif // MIDL_PASS
PGROUP_MEMBERSHIP GroupIds;
//
// Information supplied by the MSV AP/Netlogon service.
//
ULONG UserFlags;
USER_SESSION_KEY UserSessionKey;
UNICODE_STRING LogonServer;
UNICODE_STRING LogonDomainName;
#if defined(MIDL_PASS) || defined(RPC_SERVER)
PISID LogonDomainId;
#else
PSID LogonDomainId;
#endif
//
// The First two longwords (8 bytes) of ExpansionRoom are reserved for the
// LanManSession Key.
//
#define SAMINFO_LM_SESSION_KEY 0
#define SAMINFO_LM_SESSION_KEY_EXT 1
#define SAMINFO_LM_SESSION_KEY_SIZE (2*sizeof(ULONG))
//
// The third longword (4 bytes) of ExpansionRoom is the user account
// control flag from the account.
//
#define SAMINFO_USER_ACCOUNT_CONTROL 2
#define SAMINFO_USER_ACCOUNT_CONTROL_SIZE sizeof(ULONG)
//
// The fourth longword (4 bytes) of ExpansionRoom is for the status
// returned for subauth users, not from subauth packages (NT5 onwards)
//
#define SAMINFO_SUBAUTH_STATUS 3
#define SAMINFO_SUBAUTH_STATUS_SIZE sizeof(ULONG)
ULONG ExpansionRoom[10]; // Put new fields here
//
// The new fields in this structure are a count and a pointer to
// an array of SIDs and attributes.
//
ULONG SidCount;
#ifdef MIDL_PASS
[size_is(SidCount)]
#endif // MIDL_PASS
PNETLOGON_SID_AND_ATTRIBUTES ExtraSids;
//
// New fields added for version 4 of the structure
//
UNICODE_STRING DnsLogonDomainName; // Dns version of LogonDomainName
UNICODE_STRING Upn; // UPN of the user account
UNICODE_STRING ExpansionString1; // Put new strings here
UNICODE_STRING ExpansionString2; // Put new strings here
UNICODE_STRING ExpansionString3; // Put new strings here
UNICODE_STRING ExpansionString4; // Put new strings here
UNICODE_STRING ExpansionString5; // Put new strings here
UNICODE_STRING ExpansionString6; // Put new strings here
UNICODE_STRING ExpansionString7; // Put new strings here
UNICODE_STRING ExpansionString8; // Put new strings here
UNICODE_STRING ExpansionString9; // Put new strings here
UNICODE_STRING ExpansionString10; // Put new strings here
} NETLOGON_VALIDATION_SAM_INFO4, *PNETLOGON_VALIDATION_SAM_INFO4 ;
// This structure is bogus since it doesn't have a size_is
// Everyone should use the generic info2 structure
typedef struct _NETLOGON_VALIDATION_GENERIC_INFO {
ULONG DataLength;
PUCHAR ValidationData;
} NETLOGON_VALIDATION_GENERIC_INFO, *PNETLOGON_VALIDATION_GENERIC_INFO;
typedef struct _NETLOGON_VALIDATION_GENERIC_INFO2 {
ULONG DataLength;
#ifdef MIDL_PASS
[size_is(DataLength)]
#endif // MIDL_PASS
PUCHAR ValidationData;
} NETLOGON_VALIDATION_GENERIC_INFO2, *PNETLOGON_VALIDATION_GENERIC_INFO2;
//
// Status codes that indicate the password is bad and the call should
// be passed through to the PDC of the domain.
//
#define BAD_PASSWORD( _x ) \
((_x) == STATUS_WRONG_PASSWORD || \
(_x) == STATUS_PASSWORD_EXPIRED || \
(_x) == STATUS_PASSWORD_MUST_CHANGE || \
(_x) == STATUS_ACCOUNT_LOCKED_OUT )
//
// The actual logon and logoff routines.
//
// The following 2 procedure definitions must match
NTSTATUS
I_NetLogonSamLogon(
IN LPWSTR LogonServer OPTIONAL,
IN LPWSTR ComputerName OPTIONAL,
IN PNETLOGON_AUTHENTICATOR Authenticator OPTIONAL,
OUT PNETLOGON_AUTHENTICATOR ReturnAuthenticator OPTIONAL,
IN NETLOGON_LOGON_INFO_CLASS LogonLevel,
IN LPBYTE LogonInformation,
IN NETLOGON_VALIDATION_INFO_CLASS ValidationLevel,
OUT LPBYTE * ValidationInformation,
OUT PBOOLEAN Authoritative
);
typedef NTSTATUS
(*PNETLOGON_SAM_LOGON_PROCEDURE)(
IN LPWSTR LogonServer OPTIONAL,
IN LPWSTR ComputerName OPTIONAL,
IN PNETLOGON_AUTHENTICATOR Authenticator OPTIONAL,
OUT PNETLOGON_AUTHENTICATOR ReturnAuthenticator OPTIONAL,
IN NETLOGON_LOGON_INFO_CLASS LogonLevel,
IN LPBYTE LogonInformation,
IN NETLOGON_VALIDATION_INFO_CLASS ValidationLevel,
OUT LPBYTE * ValidationInformation,
OUT PBOOLEAN Authoritative
);
//
// Values of ExtraFlags
//
// For OS earlier that WIN 2K. This field didn't exist.
//
// A WIN 2K client always passes zero and ignores the return.
// A WIN 2K server always returns what it is passed.
//
// A whistler client can pass the NETLOGON_SUPPORTS_CROSS_FOREST bits and ignores the return.
// A whistler server always returns what it is passed.
//
// In all cases, the flags correspond to the hop at hand. Each hop computes which flags it
// want to pass to the next hop. It will only set bits that it understands.
//
// Flags introduced with NETLOGON_SUPPORTS_CROSS_FOREST
#define NL_EXFLAGS_EXPEDITE_TO_ROOT 0x0001 // Pass this request to DC at root of forest
#define NL_EXFLAGS_CROSS_FOREST_HOP 0x0002 // Request is first hop over cross forest trust TDO
NTSTATUS
I_NetLogonSamLogonEx (
IN PVOID ContextHandle,
IN LPWSTR LogonServer OPTIONAL,
IN LPWSTR ComputerName OPTIONAL,
IN NETLOGON_LOGON_INFO_CLASS LogonLevel,
IN LPBYTE LogonInformation,
IN NETLOGON_VALIDATION_INFO_CLASS ValidationLevel,
OUT LPBYTE * ValidationInformation,
OUT PBOOLEAN Authoritative,
IN OUT PULONG ExtraFlags,
OUT PBOOLEAN RpcFailed
);
NTSTATUS
I_NetLogonSamLogonWithFlags (
IN LPWSTR LogonServer OPTIONAL,
IN LPWSTR ComputerName OPTIONAL,
IN PNETLOGON_AUTHENTICATOR Authenticator OPTIONAL,
OUT PNETLOGON_AUTHENTICATOR ReturnAuthenticator OPTIONAL,
IN NETLOGON_LOGON_INFO_CLASS LogonLevel,
IN LPBYTE LogonInformation,
IN NETLOGON_VALIDATION_INFO_CLASS ValidationLevel,
OUT LPBYTE * ValidationInformation,
OUT PBOOLEAN Authoritative,
IN OUT PULONG ExtraFlags
);
// The following 2 procedure definitions must match
NTSTATUS
I_NetLogonSamLogoff (
IN LPWSTR LogonServer OPTIONAL,
IN LPWSTR ComputerName OPTIONAL,
IN PNETLOGON_AUTHENTICATOR Authenticator OPTIONAL,
OUT PNETLOGON_AUTHENTICATOR ReturnAuthenticator OPTIONAL,
IN NETLOGON_LOGON_INFO_CLASS LogonLevel,
IN LPBYTE LogonInformation
);
typedef NTSTATUS
(*PNETLOGON_SAM_LOGOFF_PROCEDURE) (
IN LPWSTR LogonServer OPTIONAL,
IN LPWSTR ComputerName OPTIONAL,
IN PNETLOGON_AUTHENTICATOR Authenticator OPTIONAL,
OUT PNETLOGON_AUTHENTICATOR ReturnAuthenticator OPTIONAL,
IN NETLOGON_LOGON_INFO_CLASS LogonLevel,
IN LPBYTE LogonInformation
);
//
// Actual logon/logoff routines for Cairo
//
NET_API_STATUS
NetlogonInitialize(
PVOID Context
);
NTSTATUS
NetlogonSamLogon (
IN NETLOGON_LOGON_INFO_CLASS LogonLevel,
IN LPBYTE LogonInformation,
IN NETLOGON_VALIDATION_INFO_CLASS ValidationLevel,
OUT LPBYTE *ValidationInformation,
OUT PBOOLEAN Authoritative
);
//
// Routine to get a list of NT DC's in the specified domain.
//
NET_API_STATUS NET_API_FUNCTION
I_NetGetDCList (
IN LPWSTR ServerName OPTIONAL,
IN LPWSTR TrustedDomainName,
OUT PULONG DCCount,
OUT PUNICODE_STRING * DCNames
);
//
// Validation routine which lives in msv1_0.dll
//
NTSTATUS
MsvSamValidate (
IN SAM_HANDLE DomainHandle,
IN BOOLEAN UasCompatibilityRequired,
IN NETLOGON_SECURE_CHANNEL_TYPE SecureChannelType,
IN PUNICODE_STRING LogonServer,
IN PUNICODE_STRING LogonDomainName,
IN PSID LogonDomainId,
IN NETLOGON_LOGON_INFO_CLASS LogonLevel,
IN PVOID LogonInformation,
IN NETLOGON_VALIDATION_INFO_CLASS ValidationLevel,
OUT PVOID * ValidationInformation,
OUT PBOOLEAN Authoritative,
OUT PBOOLEAN BadPasswordCountZeroed,
IN DWORD AccountsToTry
);
//
// Routine to get running number of logon attempts which lives in msv1_0.dll
//
ULONG
MsvGetLogonAttemptCount (
VOID
);
// Values for AccountsToTry
#define MSVSAM_SPECIFIED 0x01 // Try specified account
#define MSVSAM_GUEST 0x02 // Try guest account
NTSTATUS
MsvSamLogoff (
IN SAM_HANDLE DomainHandle,
IN NETLOGON_LOGON_INFO_CLASS LogonLevel,
IN PVOID LogonInformation
);
// begin_ntsubauth
// Values for Flags
#define MSV1_0_PASSTHRU 0x01
#define MSV1_0_GUEST_LOGON 0x02
NTSTATUS NTAPI
Msv1_0SubAuthenticationRoutine(
IN NETLOGON_LOGON_INFO_CLASS LogonLevel,
IN PVOID LogonInformation,
IN ULONG Flags,
IN PUSER_ALL_INFORMATION UserAll,
OUT PULONG WhichFields,
OUT PULONG UserFlags,
OUT PBOOLEAN Authoritative,
OUT PLARGE_INTEGER LogoffTime,
OUT PLARGE_INTEGER KickoffTime
);
typedef struct _MSV1_0_VALIDATION_INFO {
LARGE_INTEGER LogoffTime;
LARGE_INTEGER KickoffTime;
UNICODE_STRING LogonServer;
UNICODE_STRING LogonDomainName;
USER_SESSION_KEY SessionKey;
BOOLEAN Authoritative;
ULONG UserFlags;
ULONG WhichFields;
ULONG UserId;
} MSV1_0_VALIDATION_INFO, *PMSV1_0_VALIDATION_INFO;
// values for WhichFields
#define MSV1_0_VALIDATION_LOGOFF_TIME 0x00000001
#define MSV1_0_VALIDATION_KICKOFF_TIME 0x00000002
#define MSV1_0_VALIDATION_LOGON_SERVER 0x00000004
#define MSV1_0_VALIDATION_LOGON_DOMAIN 0x00000008
#define MSV1_0_VALIDATION_SESSION_KEY 0x00000010
#define MSV1_0_VALIDATION_USER_FLAGS 0x00000020
#define MSV1_0_VALIDATION_USER_ID 0x00000040
// legal values for ActionsPerformed
#define MSV1_0_SUBAUTH_ACCOUNT_DISABLED 0x00000001
#define MSV1_0_SUBAUTH_PASSWORD 0x00000002
#define MSV1_0_SUBAUTH_WORKSTATIONS 0x00000004
#define MSV1_0_SUBAUTH_LOGON_HOURS 0x00000008
#define MSV1_0_SUBAUTH_ACCOUNT_EXPIRY 0x00000010
#define MSV1_0_SUBAUTH_PASSWORD_EXPIRY 0x00000020
#define MSV1_0_SUBAUTH_ACCOUNT_TYPE 0x00000040
#define MSV1_0_SUBAUTH_LOCKOUT 0x00000080
NTSTATUS NTAPI
Msv1_0SubAuthenticationRoutineEx(
IN NETLOGON_LOGON_INFO_CLASS LogonLevel,
IN PVOID LogonInformation,
IN ULONG Flags,
IN PUSER_ALL_INFORMATION UserAll,
IN SAM_HANDLE UserHandle,
IN OUT PMSV1_0_VALIDATION_INFO ValidationInfo,
OUT PULONG ActionsPerformed
);
NTSTATUS NTAPI
Msv1_0SubAuthenticationRoutineGeneric(
IN PVOID SubmitBuffer,
IN ULONG SubmitBufferLength,
OUT PULONG ReturnBufferLength,
OUT PVOID *ReturnBuffer
);
NTSTATUS NTAPI
Msv1_0SubAuthenticationFilter(
IN NETLOGON_LOGON_INFO_CLASS LogonLevel,
IN PVOID LogonInformation,
IN ULONG Flags,
IN PUSER_ALL_INFORMATION UserAll,
OUT PULONG WhichFields,
OUT PULONG UserFlags,
OUT PBOOLEAN Authoritative,
OUT PLARGE_INTEGER LogoffTime,
OUT PLARGE_INTEGER KickoffTime
);
// end_ntsubauth
#endif // __LOGONMSV_H__