REMOTE.H


/******************************************************************************\
* This is a part of the Microsoft Source Code Samples.
* Copyright 1993 - 1997 Microsoft Corporation.
* All rights reserved.
* This source code is only intended as a supplement to
* Microsoft Development Tools and/or WinHelp documentation.
* See these sources for detailed information regarding the
* Microsoft samples programs.
\******************************************************************************/

/*++

Copyright 1993 - 1997 Microsoft Corporation

Module Name:

Remote.h

Abstract:

This module contains the main() entry point for Remote.
Calls the Server or the Client depending on the first parameter.


Author:

Rajivendra Nath 2-Jan-1993

Environment:

Console App. User mode.

Revision History:

--*/

#if !defined(FASTCALL)
#if defined(_M_IX86)
#define FASTCALL _fastcall
#else
#define FASTCALL
#endif
#endif

#define VERSION 4
#define REMOTE_SERVER 1
#define RUNTYPE_CLIENT 2

#define SERVER_READ_PIPE "\\\\%s\\PIPE\\%sIN" //Client Writes and Server Reads
#define SERVER_WRITE_PIPE "\\\\%s\\PIPE\\%sOUT" //Server Writes and Client Reads

#define QUERY_DEBUGGERS_PIPE "\\\\%s\\PIPE\\QueryDebuggerPipe"

// PRIVACY_DEFAULT: this session will be listed only if it looks like a debugging one
// PRIVACY_NON_VISIBLE: whatever the name of command, it will not show up with remote /q
// PRIVACY_VISIBLE: this session will be visible for querying

#define PRIVACY_DEFAULT 1
#define PRIVACY_VISIBLE 2
#define PRIVACY_NOT_VISIBLE 3


#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 HOSTNAMELEN MAX_COMPUTERNAME_LENGTH+1

#define CHARS_PER_LINE 45

#define MAGICNUMBER 0x31109000
#define BEGINMARK '\xfe'
#define ENDMARK '\xff'
#define LINESTOSEND 200

#define MAX_DACL_NAMES 64

typedef struct
{
DWORD Size;
DWORD Version;
char ClientName[HOSTNAMELEN];
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
{
char* out; // message
int size; // message length
int allocated; // length of allocated memory
} QUERY_MESSAGE;

VOID
QueryRemotePipes(
char* serverName
);

int
OverlappedServer(
char* ChildCmd,
char* PipeName
);


VOID
Client(
char* ServerName,
char* PipeName
);

VOID
ErrorExit(
char* str
);

VOID
DisplayClientHlp(
);

VOID
DisplayServerHlp(
);

VOID
Errormsg(
char* str
);

BOOL
IsKdString(
char* string
);

BOOL
FASTCALL
WriteFileSynch(
HANDLE hFile,
LPVOID lpBuffer,
DWORD cbWrite,
LPDWORD lpNumberOfBytesWritten,
DWORD dwFileOffset,
LPOVERLAPPED lpO
);

BOOL
FASTCALL
ReadFileSynch(
HANDLE hFile,
LPVOID lpBuffer,
DWORD cbRead,
LPDWORD lpNumberOfBytesRead,
DWORD dwFileOffset,
LPOVERLAPPED lpO
);

VOID
CloseClientPipes(
VOID
);

extern char HostName[HOSTNAMELEN];
extern char* ChildCmd;
extern char* PipeName;
extern char* ServerName;
extern HANDLE MyOutHandle;
extern DWORD LinesToSend;
extern BOOL IsAdvertise;
extern DWORD ClientToServerFlag;
extern char * DaclNames[];
extern DWORD DaclNameCount;
extern char * DaclDenyNames[];
extern DWORD DaclDenyNameCount;
extern BOOL fAsyncPipe;
extern HANDLE hAttachedProcess;
extern HANDLE hAttachedWriteChildStdIn;
extern HANDLE hAttachedReadChildStdOut;