232 lines
6.3 KiB
C
232 lines
6.3 KiB
C
//+-------------------------------------------------------------------------
|
||
//
|
||
// Microsoft Windows
|
||
//
|
||
// Copyright (C) Microsoft Corporation, 1994 - 1999
|
||
//
|
||
// File: rawcom.h
|
||
//
|
||
//--------------------------------------------------------------------------
|
||
|
||
/************************************************************************/
|
||
// Include Files
|
||
/************************************************************************/
|
||
|
||
// #include <nt.h>
|
||
// #include <ntrtl.h>
|
||
// #include <nturtl.h>
|
||
// #include <ntcsrdll.h>
|
||
#include <windef.h>
|
||
#include <windows.h>
|
||
#include <nb30.h>
|
||
#include <winsock.h>
|
||
#include "rpc.h"
|
||
#include "rpcndr.h"
|
||
|
||
#include <ctype.h>
|
||
#include <stdio.h>
|
||
#include <stdlib.h>
|
||
#include <string.h>
|
||
|
||
// #include "np.h"
|
||
// #include "nb.h"
|
||
// #include "sct.h"
|
||
// #include "scx.h"
|
||
|
||
#define DEBUG 0
|
||
|
||
/************************************************************************/
|
||
// Typedef for NTSTATUS and NT_SUCCESS macro
|
||
/************************************************************************/
|
||
typedef LONG NTSTATUS;
|
||
typedef NTSTATUS *PNTSTATUS;
|
||
|
||
#define NT_SUCCESS(status) ((NTSTATUS)(status) >= 0)
|
||
#define STATUS_UNSUCCESSFUL ((NTSTATUS)0xC0000001L)
|
||
#define OBJ_CASE_INSENSITIVE 0x00000040L
|
||
#define FSCTL_PIPE_LISTEN CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
|
||
#define STATUS_PIPE_BROKEN ((NTSTATUS)0xC000014BL)
|
||
#define STATUS_INVALID_PIPE_STATE ((NTSTATUS)0xC00000ADL)
|
||
|
||
typedef struct _CLIENT_ID {
|
||
HANDLE UniqueProcess;
|
||
HANDLE UniqueThread;
|
||
}CLIENT_ID, *PCLIENT_ID;
|
||
|
||
/************************************************************************/
|
||
// Constants etc.
|
||
/************************************************************************/
|
||
#define MAXBUFSIZE 65000
|
||
#define TRUE 1
|
||
#define FALSE 0
|
||
#define STACK_SIZE 1024
|
||
#define MAXCLIENTS 32
|
||
#define SRV 1
|
||
#define CLI 0
|
||
|
||
#define BASEIPC 0
|
||
#define NP BASEIPC+0
|
||
#define NB BASEIPC+1
|
||
#define SCTCP BASEIPC+2
|
||
#define SCSPX BASEIPC+3
|
||
#define SCXNS BASEIPC+3
|
||
#define SCUDP BASEIPC+4
|
||
#define SCIPX BASEIPC+5
|
||
#define DGNB BASEIPC+6
|
||
|
||
#define NamePipe "Nmp"
|
||
#define NetBIOS "NetB"
|
||
#define SocketTCP "SockTCP"
|
||
#define SocketXNS "SockXNS"
|
||
#define UDP "UDP"
|
||
#define IPX "IPX"
|
||
#define DGNetBIOS "DGNetB"
|
||
|
||
|
||
#define PERFSRV "IPCSRV"
|
||
#define PERFCLI "IPCCLI"
|
||
|
||
// Memory allocation mechanisms
|
||
|
||
#define AllocType MEM_COMMIT
|
||
#define DeallocType MEM_DECOMMIT
|
||
|
||
/*
|
||
#define FAIL_CHECK(x,y,z) if (!NT_SUCCESS(z)) { \
|
||
DbgPrint("%s:Error in %s: status:%lx\n", x,y,z); \
|
||
Failure = TRUE; \
|
||
break; \
|
||
}
|
||
*/
|
||
|
||
#define FAIL_CHECK(x,y,z) if (!NT_SUCCESS(z)) { \
|
||
char outputDebugBuffer[100]; \
|
||
_snprintf(outputDebugBuffer, 100, "%s:Error in %s: status:%lx\n", x, y, z); \
|
||
OutputDebugString(outputDebugBuffer); \
|
||
Failure = TRUE; \
|
||
break; \
|
||
}
|
||
/*
|
||
#define FAIL_CHECK_EXIT(x,y,z) if (!NT_SUCCESS(z)) { \
|
||
DbgPrint("%s:Error in %s: status:%lx\n", x,y,z); \
|
||
Failure = TRUE; \
|
||
return; \
|
||
}
|
||
*/
|
||
|
||
#define FAIL_CHECK_EXIT(x,y,z) if (!NT_SUCCESS(z)) { \
|
||
char outputDebugBuffer[100]; \
|
||
_snprintf(outputDebugBuffer, 100, "%s:Error in %s: status:%lx\n", x, y, z); \
|
||
OutputDebugString(outputDebugBuffer); \
|
||
Failure = TRUE; \
|
||
return; \
|
||
}
|
||
|
||
#define MyDbgPrint(x) if (DEBUG) { \
|
||
char outputDebugBuffer[100]; \
|
||
_snprintf(outputDebugBuffer, 100, (x)); \
|
||
OutputDebugString(outputDebugBuffer); \
|
||
}
|
||
|
||
#define STATUS_SUCCESS ((NTSTATUS)0x00000000L)
|
||
|
||
#ifndef _DBGNT_
|
||
ULONG
|
||
DbgPrint(
|
||
PCH Format,
|
||
...
|
||
);
|
||
#endif // _DBGNT_
|
||
|
||
/************************************************************************/
|
||
// Local Structures
|
||
/************************************************************************/
|
||
struct reqbuf {
|
||
ULONG Iterations;
|
||
ULONG SendSize;
|
||
ULONG NumSends;
|
||
ULONG RecvSize;
|
||
ULONG NumRecvs;
|
||
USHORT ClientNumber;
|
||
UCHAR TestCmd; // only for 'E' and transact NamedPipe U/T
|
||
UCHAR RSVD[9];
|
||
};
|
||
|
||
// Client structure is organized into IPC independent fields followed by IPC
|
||
// dependent part.
|
||
|
||
// NamedPipe info structure
|
||
struct NmpInfo {
|
||
HANDLE c_PipeHandle;
|
||
BOOLEAN c_DoTransact;
|
||
};
|
||
|
||
// NetBIOS info structure
|
||
struct NetBInfo {
|
||
UCHAR c_LSN;
|
||
UCHAR c_NameNum;
|
||
PUCHAR c_pRecvBufG; // global buffer for double receives
|
||
USHORT c_LanaNumber; // lana number for a client
|
||
HANDLE c_SendEvent;
|
||
HANDLE c_RecvEvent;
|
||
HANDLE c_RecvEventG;
|
||
BOOLEAN c_RecvPosted; // while doing RecvSend
|
||
|
||
};
|
||
|
||
// Socket info structure
|
||
struct SockInfo {
|
||
SOCKET c_Sockid;
|
||
SOCKET c_Listenid;
|
||
};
|
||
|
||
struct client {
|
||
USHORT c_client_num; // This client number
|
||
HANDLE c_hThHandle; // Thread handle
|
||
CLIENT_ID c_ThClientID; // Thread client Id.
|
||
struct reqbuf c_reqbuf; // Request buffer
|
||
PCHAR c_pSendBuf; // Ptr. to the send buffer
|
||
PCHAR c_pRecvBuf; // Ptr. to the Recv buffer
|
||
DWORD c_Duration; // Total time in msecs.
|
||
union IPCinfo {
|
||
struct NmpInfo c_Nmp; // NamedPipe specific info
|
||
struct NetBInfo c_NetB; // NetBIOS info.
|
||
struct SockInfo c_Sock; // Socket Info.
|
||
};
|
||
};
|
||
|
||
typedef struct _THREADPARAMS {
|
||
PHANDLE phThHandle;
|
||
PCLIENT_ID pThClientID;
|
||
} THREADPARAMS;
|
||
|
||
|
||
/************************************************************************/
|
||
// Local function prototypes
|
||
/************************************************************************/
|
||
VOID
|
||
Usage(
|
||
IN PSZ PrgName
|
||
);
|
||
|
||
|
||
NTSTATUS
|
||
Parse_Cmd_Line(
|
||
IN USHORT argc,
|
||
IN PSZ argv[]
|
||
);
|
||
|
||
|
||
VOID
|
||
SrvService(
|
||
IN PUSHORT pTindex
|
||
);
|
||
|
||
VOID
|
||
Cleanup(
|
||
);
|
||
|
||
/************************************************************************/
|
||
// External function prototypes
|
||
/************************************************************************/
|
||
|