//+---------------------------------------------------------------------------
//
//  Microsoft Windows
//  Copyright (C) Microsoft Corporation, 1992 - 1997.
//
//  File:       server.h
//
//  Contents:
//
//  Classes:
//
//  Functions:
//
//  History:    3-14-97   RichardW   Created
//
//----------------------------------------------------------------------------

#ifndef __SERVER_H__
#define __SERVER_H__


typedef struct _XTCB_AUTH_REQ_MESSAGE {
    STRING  Challenge ;
    STRING  Response ;
    STRING  UserName ;
} XTCB_AUTH_REQ_MESSAGE, * PXTCB_AUTH_REQ_MESSAGE ;

typedef struct _XTCB_AUTH_RESP_MESSAGE {
    NTSTATUS Result ;
    NTSTATUS SubCode ;
    PUCHAR  AuthInfo ;
    ULONG   AuthInfoLength ;
} XTCB_AUTH_RESP_MESSAGE, * PXTCB_AUTH_RESP_MESSAGE ;

typedef enum {
    XtcbSrvAuthReq,
    XtcbSrvAuthResp,
    XtcbSrvMax
} XTCB_SERVER_MESSAGE_CODE ;

#define XTCB_SERVER_MESSAGE_TAG      'S5DM'
#define XTCB_MESSAGE_SELF_RELATIVE   0x00000001      // Pointers are offsets
#define XTCB_MESSAGE_ONE_BLOCK       0x00000002      // Pointers are within block

typedef struct _XTCB_SERVER_MESSAGE {
    ULONG Tag ;
    XTCB_SERVER_MESSAGE_CODE Code ;
    ULONG Flags ;
    ULONG DataLength ;
    union {
        XTCB_AUTH_REQ_MESSAGE AuthReq ;
        XTCB_AUTH_RESP_MESSAGE AuthResp ;
    } Message ;
    UCHAR   Data[1] ;
} XTCB_SERVER_MESSAGE, * PXTCB_SERVER_MESSAGE ;

#define XtcbMessageLength( x )   ( sizeof( XTCB_SERVER_MESSAGE ) - 1 + \
                                  ((PXTCB_SERVER_MESSAGE) x)->DataLength )


NTSTATUS
XtcbRemoteAuthHandler(
    IN PVOID ProtocolSubmitBuffer,
    IN PVOID ClientBufferBase,
    IN ULONG SubmitBufferLength,
    OUT PVOID *ProtocolReturnBuffer,
    OUT PULONG ReturnBufferLength,
    OUT PNTSTATUS ProtocolStatus
    );


SECURITY_STATUS
XtcbAuthenticateResponse(
    PSTRING Challenge,
    PSTRING UserName,
    PSTRING Response,
    PVOID * AuthInfo,
    PULONG  AuthInfoLength
    );

SECURITY_STATUS
XtcbLocalLogon(
    PVOID   AuthInfo,
    ULONG   AuthInfoLength,
    PLUID   NewLogonId,
    PHANDLE NewToken
    );

#endif // __SERVER_H__