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