Leaked source code of windows server 2003
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

160 lines
4.5 KiB

// IoHandler.h : This file contains the
// Created: Feb '98
// Author : a-rakeba
// History:
// Copyright (C) 1998 Microsoft Corporation
// All rights reserved.
// Microsoft Confidential
#if !defined( _IOHANDLER_H_ )
#define _IOHANDLER_H_
#include <cmnhdr.h>
#include <windows.h>
#include <winsock2.h>
#define SECURITY_WIN32
#include <sspi.h>
#include <TlntUtils.h>
#include <Ipc.h>
#define AVAILABE_BUFFER_SIZE( p, c ) ( sizeof( p ) - ( c - p ) )
#define FOOTER L"\r\n"
#define NEED_HEADER 1
#define NO_HEADER 0
#define SIZEOF_ARROWKEY_SEQ 3
#define PVA_SUCCESS 0
#define PVA_NODATA -1
#define PVA_BADFORMAT -2
#define PVA_GUEST -3
#define PVA_NOMEMORY -4
#define PVA_INVALIDACCOUNT -5
#define PVA_OTHERERROR -6
class CSession;
class CIoHandler
{
public:
CIoHandler();
virtual ~CIoHandler();
typedef DWORD IO_OPERATIONS;
friend struct CRFCProtocol;
friend class CScraper;
private:
int ParseAndValidateAccount(void);
int AuthenticateUser( void );
int CheckLicense( void );
bool WriteToServer ( UCHAR, DWORD, LPVOID );
bool StartNTLMAuth( void );
bool DoNTLMAuth( PUCHAR, DWORD, PUCHAR* );
bool IsTimedOut ( );
bool GetAndSetSocket ( );
bool HandlePipeData ( );
bool SendDetailsAndAskForLicense ();
bool HandleOperatorMessage();
bool GetHeaderMessage( LPWSTR* );
bool RemoveArrowKeysFromBuffer( PDWORD ,PDWORD);
bool ProcessUserDataReadFromSocket( DWORD );
IO_OPERATIONS ProcessDataFromSocket( DWORD );
IO_OPERATIONS ProcessCommandLine( PDWORD, PDWORD, IO_OPERATIONS );
IO_OPERATIONS ProcessAuthenticationLine( PDWORD, PDWORD, IO_OPERATIONS );
IO_OPERATIONS OnDataFromSocket ( );
protected:
typedef enum {
STATE_INIT,
STATE_NTLMAUTH,
STATE_SESSION,
STATE_BANNER_FOR_AUTH,
STATE_WAIT_FOR_ENV_OPTION,
STATE_LOGIN_PROMPT,
STATE_AUTH_NAME,
STATE_AUTH_PASSWORD,
STATE_CHECK_LICENSE,
STATE_LICENSE_AVAILABILITY_KNOWN,
STATE_VTERM_INIT_NEGO,
STATE_VTERM,
STATE_TERMINATE } CONTROL_STATE;
CONTROL_STATE m_SocketControlState;
enum { WRITE_TO_SOCKET = 0x00000001, READ_FROM_SOCKET = 0x0000002,
LOGON_COMMAND = 0x00000010, LOGON_DATA_UNFINISHED = 0x00000100,
IO_FAIL = 0x00001000 };
typedef enum {
NOT_MEMBER_OF_TELNETCLIENTS_GROUP = 3,
DENY_LICENSE = 4,
ISSUE_LICENSE = 5,
WAIT_FOR_SERVER_REPLY = 6,
#if BETA
LICENSE_EXPIRED
#endif
} LICENSE_LIMIT;
CtxtHandle m_hContext;
OVERLAPPED m_oWriteToSocket;
UCHAR m_WriteToSocketBuff[ MAX_WRITE_SOCKET_BUFFER ];
DWORD m_dwWriteToSocketIoLength;
WSAPROTOCOL_INFO m_protocolInfo;
bool m_bOnlyOnce;
bool m_bWaitForEnvOptionOver;
OVERLAPPED m_oWriteToPipe;
OVERLAPPED m_oReadFromSocket;
UCHAR m_ReadFromSocketBuffer[ MAX_READ_SOCKET_BUFFER ];
PUCHAR m_pReadFromSocketBufferCursor;
DWORD m_dwReadFromSocketIoLength;
OVERLAPPED m_oReadFromPipe;
UCHAR m_ReadFromPipeBuffer[ IPC_HEADER_SIZE ];
UCHAR *m_pucReadBuffer;
DWORD m_dwReadFromPipeIoLength;
DWORD m_dwRequestedSize;
bool m_bIpcHeader;
SOCKET m_sSocket;
HANDLE m_hReadPipe;
HANDLE m_hWritePipe;
bool m_fFirstReadFromPipe;
bool m_fShutDownAfterIO;
BOOL m_fLogonUserResult;
bool m_bNTLMAuthenticated;
bool fDoNTLMAuthFirstTime;
CredHandle m_hCredential;
PSecPkgInfo m_pspi;
CSession *m_pSession;
int m_iResult;
bool m_bInvalidAccount;
bool GetUserName();
bool WriteToSocket(PUCHAR, DWORD );
bool Init( CSession * );
void Shutdown( void );
bool IssueReadOnPipe( );
bool IssueFirstReadOnPipe ( );
bool WriteToClient ( );
bool IssueReadFromSocket ( );
bool OnReadFromPipeCompletion ( );
bool OnReadFromSocketCompletion ( );
void DisplayOnClientNow();
void SendMessageToClient( LPWSTR, bool );
void WriteMessageToClientDirectly( LPWSTR );
void SendTerminateString( char *);
void UpdateIdleTime( UCHAR );
};
#endif // _IOHANDLER_H_