236 lines
5.6 KiB
C
236 lines
5.6 KiB
C
|
//+-------------------------------------------------------------------------
|
||
|
//
|
||
|
// Microsoft Windows
|
||
|
//
|
||
|
// Copyright (C) Microsoft Corporation, 1999 - 1999
|
||
|
//
|
||
|
// File: remote.h
|
||
|
//
|
||
|
//--------------------------------------------------------------------------
|
||
|
|
||
|
#ifndef __WSREMOTE_H__
|
||
|
#define __WSREMOTE_H__
|
||
|
|
||
|
#include <winsock2.h>
|
||
|
#include <tchar.h>
|
||
|
|
||
|
#define VERSION 7
|
||
|
#define REMOTE_SERVER 1
|
||
|
#define REMOTE_CLIENT 2
|
||
|
|
||
|
#define SERVER_READ_PIPE TEXT("\\\\%s\\PIPE\\%sIN") //Client Writes and Server Reads
|
||
|
#define SERVER_WRITE_PIPE TEXT("\\\\%s\\PIPE\\%sOUT") //Server Reads and Client Writes
|
||
|
|
||
|
#define COMMANDCHAR '@' //Commands intended for remote begins with this
|
||
|
#define CTRLC 3
|
||
|
|
||
|
#define CLIENT_ATTR FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|BACKGROUND_BLUE
|
||
|
#define SERVER_ATTR FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|BACKGROUND_RED
|
||
|
|
||
|
//
|
||
|
//Some General purpose Macros
|
||
|
//
|
||
|
#define MINIMUM(x,y) ((x)>(y)?(y):(x))
|
||
|
#define MAXIMUM(x,y) ((x)>(y)?(x):(y))
|
||
|
|
||
|
#define ERRORMSSG(str) _tprintf(TEXT("Error %d - %s [%s %d]\n"),GetLastError(),str,__FILE__,__LINE__)
|
||
|
#define SAFECLOSEHANDLE(x) {if (x!=INVALID_HANDLE_VALUE) {CloseHandle(x);x=INVALID_HANDLE_VALUE;}}
|
||
|
|
||
|
|
||
|
// All because printf does not work
|
||
|
// with NT IO redirection
|
||
|
//
|
||
|
|
||
|
#define WRITEF(VArgs) { \
|
||
|
HANDLE xh=GetStdHandle(STD_OUTPUT_HANDLE); \
|
||
|
TCHAR VBuff[256]; \
|
||
|
DWORD tmp; \
|
||
|
_stprintf VArgs; \
|
||
|
WriteFile(xh,VBuff,lstrlen(VBuff),&tmp,NULL); \
|
||
|
} \
|
||
|
|
||
|
#define HOSTNAMELEN 16
|
||
|
|
||
|
#define CHARS_PER_LINE 45
|
||
|
|
||
|
#define MAGICNUMBER 0x31109000
|
||
|
#define BEGINMARK '\xfe'
|
||
|
#define ENDMARK '\xff'
|
||
|
#define LINESTOSEND 200
|
||
|
|
||
|
#define MAX_SESSION 10
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
DWORD Size;
|
||
|
DWORD Version;
|
||
|
TCHAR ClientName[15];
|
||
|
DWORD LinesToSend;
|
||
|
DWORD Flag;
|
||
|
} SESSION_STARTUPINFO;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
DWORD MagicNumber; //New Remote
|
||
|
DWORD Size; //Size of structure
|
||
|
DWORD FileSize; //Num bytes sent
|
||
|
} SESSION_STARTREPLY;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
TCHAR Name[HOSTNAMELEN]; //Name of client Machine;
|
||
|
BOOL Active; //Client at the other end connected
|
||
|
BOOL CommandRcvd; //True if a command recieved
|
||
|
BOOL SendOutput; //True if Sendoutput output
|
||
|
HANDLE PipeReadH; //Client sends its StdIn through this
|
||
|
HANDLE PipeWriteH; //Client gets its StdOut through this
|
||
|
HANDLE rSaveFile; //Sessions read handle to SaveFile
|
||
|
HANDLE hThread; //Session Thread
|
||
|
HANDLE MoreData; //Event handle set if data available to be read
|
||
|
SOCKET Socket; //Socket for IP Session
|
||
|
TCHAR szIP[16]; //IP Address of Client, if NOT IP then NULL
|
||
|
} SESSION_TYPE;
|
||
|
|
||
|
|
||
|
|
||
|
VOID
|
||
|
Server(
|
||
|
TCHAR* ChildCmd,
|
||
|
TCHAR* PipeName
|
||
|
);
|
||
|
|
||
|
|
||
|
VOID
|
||
|
Client(
|
||
|
TCHAR* ServerName,
|
||
|
TCHAR* PipeName
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
SockClient(
|
||
|
TCHAR* ServerName,
|
||
|
TCHAR* PipeName
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
ErrorExit(
|
||
|
TCHAR* str
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
DisplayClientHlp(
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
DisplayServerHlp(
|
||
|
);
|
||
|
|
||
|
ULONG
|
||
|
DbgPrint(
|
||
|
PCH Format,
|
||
|
...
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
ReadFixBytes(
|
||
|
HANDLE hRead,
|
||
|
TCHAR *Buffer,
|
||
|
DWORD ToRead,
|
||
|
DWORD TimeOut //ignore for timebeing
|
||
|
);
|
||
|
|
||
|
DWORD
|
||
|
SockReadFixBytes(
|
||
|
SOCKET hSocket,
|
||
|
TCHAR *Buffer,
|
||
|
DWORD ToRead,
|
||
|
DWORD TimeOut //ignore for timebeing
|
||
|
);
|
||
|
|
||
|
VOID
|
||
|
Errormsg(
|
||
|
TCHAR* str
|
||
|
);
|
||
|
|
||
|
BOOL ReadSocket(
|
||
|
SOCKET s,
|
||
|
TCHAR * buff,
|
||
|
int len,
|
||
|
DWORD* dread);
|
||
|
|
||
|
BOOL WriteSocket(
|
||
|
SOCKET s,
|
||
|
TCHAR * buff,
|
||
|
int len,
|
||
|
DWORD* dsent);
|
||
|
|
||
|
VOID
|
||
|
Base64Encode(
|
||
|
TCHAR * String,
|
||
|
DWORD StringLength,
|
||
|
TCHAR * EncodeBuffer);
|
||
|
|
||
|
VOID
|
||
|
Base64Decode(
|
||
|
TCHAR * String,
|
||
|
TCHAR * DecodeBuffer);
|
||
|
|
||
|
int
|
||
|
GetBase64Index(
|
||
|
TCHAR A);
|
||
|
|
||
|
VOID
|
||
|
SplitUserName(
|
||
|
TCHAR * FullName,
|
||
|
TCHAR * Domain,
|
||
|
TCHAR * UserName);
|
||
|
|
||
|
#ifdef UNICODE
|
||
|
BOOL WriteSocketA(
|
||
|
SOCKET s,
|
||
|
char * pszAnsiStr,
|
||
|
int len,
|
||
|
DWORD * dsent);
|
||
|
|
||
|
// caller must free buffer
|
||
|
WCHAR * inet_ntoaw(
|
||
|
struct in_addr stInet );
|
||
|
|
||
|
BOOL ReadFileW(
|
||
|
HANDLE hFile, // handle of file to read
|
||
|
WCHAR * pszBuffer, // pointer to buffer that receives data
|
||
|
DWORD dwLength, // number of bytes to read
|
||
|
LPDWORD pdwRead, // pointer to number of bytes read
|
||
|
LPOVERLAPPED pData // pointer to structure for data
|
||
|
);
|
||
|
|
||
|
BOOL WriteFileW(
|
||
|
HANDLE hFile, // handle to file to write to
|
||
|
WCHAR * pszBuffer, // pointer to data to write to file
|
||
|
DWORD dwWrite, // number of bytes to write
|
||
|
LPDWORD pdwWritten, // pointer to number of bytes written
|
||
|
LPOVERLAPPED pData // pointer to structure for overlapped I/O
|
||
|
);
|
||
|
|
||
|
BOOL GetAnsiStr(
|
||
|
WCHAR * pszWideStr,
|
||
|
char * pszAnsiStr,
|
||
|
UINT uBufSize
|
||
|
);
|
||
|
|
||
|
#endif UNICODE
|
||
|
|
||
|
extern TCHAR HostName[HOSTNAMELEN];
|
||
|
extern TCHAR* ChildCmd;
|
||
|
extern TCHAR* PipeName;
|
||
|
extern TCHAR* ServerName;
|
||
|
extern TCHAR* Username;
|
||
|
extern TCHAR* Password;
|
||
|
extern HANDLE MyOutHandle;
|
||
|
extern DWORD LinesToSend;
|
||
|
extern BOOL IsAdvertise;
|
||
|
extern BOOL bIPLocked;
|
||
|
extern DWORD ClientToServerFlag;
|
||
|
|
||
|
#endif //__WSREMOTE_H__
|