windows-nt/Source/XPSP1/NT/com/rpc/perf/raw/inc/rawcom.h
2020-09-26 16:20:57 +08:00

232 lines
6.3 KiB
C
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//+-------------------------------------------------------------------------
//
// 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
/************************************************************************/