windows-nt/Source/XPSP1/NT/ds/security/protocols/msv_sspi/msvwow.h
2020-09-26 16:20:57 +08:00

188 lines
5.4 KiB
C

/*++
Copyright (c) Microsoft Corporation 2001
File: msvwow.h
Contents: prototypes for 32-64 bit interop for the MSV1_0 package
History: 07-Jan-2001 SField
--*/
#ifndef __MSVWOW_H__
#define __MSVWOW_H__
#ifdef _WIN64
#ifdef __cplusplus
extern "C"
{
#endif // __cplusplus
//
// WOW versions of native structures
// MUST keep these in sync with ntmsv1_0.h
//
typedef UNICODE_STRING32 UNICODE_STRING_WOW64;
typedef UNICODE_STRING_WOW64 *PUNICODE_STRING_WOW64;
typedef STRING32 STRING_WOW64;
typedef STRING_WOW64 *PSTRING_WOW64;
typedef struct _MSV1_0_INTERACTIVE_LOGON_WOW64 {
MSV1_0_LOGON_SUBMIT_TYPE MessageType;
UNICODE_STRING_WOW64 LogonDomainName;
UNICODE_STRING_WOW64 UserName;
UNICODE_STRING_WOW64 Password;
} MSV1_0_INTERACTIVE_LOGON_WOW64, *PMSV1_0_INTERACTIVE_LOGON_WOW64;
typedef struct _MSV1_0_INTERACTIVE_PROFILE_WOW64 {
MSV1_0_PROFILE_BUFFER_TYPE MessageType;
USHORT LogonCount;
USHORT BadPasswordCount;
LARGE_INTEGER LogonTime;
LARGE_INTEGER LogoffTime;
LARGE_INTEGER KickOffTime;
LARGE_INTEGER PasswordLastSet;
LARGE_INTEGER PasswordCanChange;
LARGE_INTEGER PasswordMustChange;
UNICODE_STRING_WOW64 LogonScript;
UNICODE_STRING_WOW64 HomeDirectory;
UNICODE_STRING_WOW64 FullName;
UNICODE_STRING_WOW64 ProfilePath;
UNICODE_STRING_WOW64 HomeDirectoryDrive;
UNICODE_STRING_WOW64 LogonServer;
ULONG UserFlags;
} MSV1_0_INTERACTIVE_PROFILE_WOW64, *PMSV1_0_INTERACTIVE_PROFILE_WOW64;
typedef struct _MSV1_0_LM20_LOGON_WOW64 {
MSV1_0_LOGON_SUBMIT_TYPE MessageType;
UNICODE_STRING_WOW64 LogonDomainName;
UNICODE_STRING_WOW64 UserName;
UNICODE_STRING_WOW64 Workstation;
UCHAR ChallengeToClient[MSV1_0_CHALLENGE_LENGTH];
STRING_WOW64 CaseSensitiveChallengeResponse;
STRING_WOW64 CaseInsensitiveChallengeResponse;
ULONG ParameterControl;
} MSV1_0_LM20_LOGON_WOW64, * PMSV1_0_LM20_LOGON_WOW64;
typedef struct _MSV1_0_LM20_LOGON_PROFILE_WOW64 {
MSV1_0_PROFILE_BUFFER_TYPE MessageType;
LARGE_INTEGER KickOffTime;
LARGE_INTEGER LogoffTime;
ULONG UserFlags;
UCHAR UserSessionKey[MSV1_0_USER_SESSION_KEY_LENGTH];
UNICODE_STRING_WOW64 LogonDomainName;
UCHAR LanmanSessionKey[MSV1_0_LANMAN_SESSION_KEY_LENGTH];
UNICODE_STRING_WOW64 LogonServer;
UNICODE_STRING_WOW64 UserParameters;
} MSV1_0_LM20_LOGON_PROFILE_WOW64, * PMSV1_0_LM20_LOGON_PROFILE_WOW64;
typedef struct _MSV1_0_ENUMUSERS_RESPONSE_WOW64 {
MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
ULONG NumberOfLoggedOnUsers;
PLUID LogonIds;
PULONG EnumHandles;
} MSV1_0_ENUMUSERS_RESPONSE_WOW64, *PMSV1_0_ENUMUSERS_RESPONSE_WOW64;
typedef struct _MSV1_0_GETUSERINFO_RESPONSE_WOW64 {
MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
PSID UserSid;
UNICODE_STRING_WOW64 UserName;
UNICODE_STRING_WOW64 LogonDomainName;
UNICODE_STRING_WOW64 LogonServer;
SECURITY_LOGON_TYPE LogonType;
} MSV1_0_GETUSERINFO_RESPONSE_WOW64, *PMSV1_0_GETUSERINFO_RESPONSE_WOW64;
typedef struct _MSV1_0_CHANGEPASSWORD_REQUEST_WOW64 {
MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
UNICODE_STRING_WOW64 DomainName;
UNICODE_STRING_WOW64 AccountName;
UNICODE_STRING_WOW64 OldPassword;
UNICODE_STRING_WOW64 NewPassword;
BOOLEAN Impersonating;
} MSV1_0_CHANGEPASSWORD_REQUEST_WOW64, *PMSV1_0_CHANGEPASSWORD_REQUEST_WOW64;
typedef struct _MSV1_0_CHANGEPASSWORD_RESPONSE_WOW64 {
MSV1_0_PROTOCOL_MESSAGE_TYPE MessageType;
BOOLEAN PasswordInfoValid;
DOMAIN_PASSWORD_INFORMATION DomainPasswordInfo;
} MSV1_0_CHANGEPASSWORD_RESPONSE_WOW64, *PMSV1_0_CHANGEPASSWORD_RESPONSE_WOW64;
//
// If this assertion fails, we're overrunning the client's OUT buffer on
// password change requests
//
C_ASSERT(sizeof(MSV1_0_CHANGEPASSWORD_RESPONSE) == sizeof(MSV1_0_CHANGEPASSWORD_RESPONSE_WOW64));
//
// routines for working on primary structures
//
NTSTATUS
MsvConvertWOWInteractiveLogonBuffer(
IN PVOID ProtocolSubmitBuffer,
IN PVOID ClientBufferBase,
IN OUT PULONG pSubmitBufferSize,
OUT PVOID *ppTempSubmitBuffer
);
NTSTATUS
MsvConvertWOWNetworkLogonBuffer(
IN PVOID ProtocolSubmitBuffer,
IN PVOID ClientBufferBase,
IN OUT PULONG pSubmitBufferSize,
OUT PVOID *ppTempSubmitBuffer
);
NTSTATUS
MsvConvertWOWChangePasswordBuffer(
IN PVOID ProtocolSubmitBuffer,
IN PVOID ClientBufferBase,
IN OUT PULONG pSubmitBufferSize,
OUT PVOID *ppTempSubmitBuffer
);
NTSTATUS
MsvAllocateInteractiveWOWProfile (
IN PLSA_CLIENT_REQUEST ClientRequest,
OUT PMSV1_0_INTERACTIVE_PROFILE *ProfileBuffer,
OUT PULONG ProfileBufferSize,
IN PNETLOGON_VALIDATION_SAM_INFO4 NlpUser
);
NTSTATUS
MsvAllocateNetworkWOWProfile (
IN PLSA_CLIENT_REQUEST ClientRequest,
OUT PMSV1_0_LM20_LOGON_PROFILE *ProfileBuffer,
OUT PULONG ProfileBufferSize,
IN PNETLOGON_VALIDATION_SAM_INFO4 NlpUser,
IN ULONG ParameterControl
);
//
// generic helper routines
//
VOID
MsvPutWOWClientString(
IN OUT PCLIENT_BUFFER_DESC ClientBufferDesc,
IN PUNICODE_STRING_WOW64 OutString,
IN PUNICODE_STRING InString
);
#ifdef __cplusplus
}
#endif // __cplusplus
#endif // _WIN64
#endif // __MSVWOW_H__