Windows NT 4.0 source code leak
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.
 
 
 
 
 
 

179 lines
3.9 KiB

/************************************************************************
Copyright (c) 1993 Microsoft Corporation
Module Name :
newintrp.h
Abstract :
NDR Pipe related definitions.
Author :
RyszardK December 1995
Revision History :
***********************************************************************/
#ifndef _PIPENDR_H_
#define _PIPENDR_H_
#include "interp2.h"
#ifdef __cplusplus
extern "C" {
#endif
#if defined( WIN32 )
#define NDR_PIPE_SUPPORT 1
#endif
//
// The maximum number of pipes handled without an allocation
//
#define PIPE_MESSAGE_MAX 3
#define PIPE_PARTIAL_BUFFER_SIZE 5000
#define PIPE_ELEM_BUFFER_SIZE 5000
//
// Signature and version
//
#define NDR_PIPE_SIGNATURE (ushort) 0x5667
#define NDR_PIPE_VERSION (short) 0x3031
//
// Flags helping with the buffer management at the server.
// [in] pipes need to be processed within a separate in buffer.
// This buffer needs to be freed after last [in] pipe.
// [out] pipe processing has to start with a partial RpcGetBuffer.
// Nothing needs to be done with that buffer before return to runtime.
//
#define NDR_PIPE_AUX_IN_BUFFER_NEEDED 0x01
#define NDR_PIPE_AUX_OUT_BUFFER_ALLOCATED 0x02
//
// Directional flags
//
#define NDR_IN_PIPE 0x01
#define NDR_OUT_PIPE 0x02
#define NDR_LAST_IN_PIPE 0x04
#define NDR_LAST_OUT_PIPE 0x08
#define NDR_OUT_ALLOCED 0x10
//
// Pipe Status
//
#define NDR_PIPE_NOT_OPENED 0
#define NDR_PIPE_ACTIVE_IN 1
#define NDR_PIPE_ACTIVE_OUT 2
#define NDR_PIPE_DRAINED 3
#define PLONG_LV_CAST *(long __RPC_FAR * __RPC_FAR *)&
#define PULONG_LV_CAST *(ulong __RPC_FAR * __RPC_FAR *)&
#define WIRE_PAD(size, al) ((((ulong)size)&al) ? ((ulong)(al+1)-(((ulong)size)&al)) : 0)
#define REMAINING_BYTES() ((long)pStubMsg->RpcMsg->BufferLength - \
(long)(pStubMsg->Buffer - (uchar*)pStubMsg->RpcMsg->Buffer))
typedef enum {
START,
COPY_PIPE_ELEM,
RETURN_PARTIAL_ELEM,
READ_PARTIAL_ELEM
} RECEIVE_STATES;
typedef struct _FC_PIPE_DEF
{
unsigned char Fc;
#if defined(__RPC_MAC__)
unsigned char BigPipe: 1;
unsigned char Unused : 3;
unsigned char Align : 4;
#else
unsigned char Align : 4; //
unsigned char Unused : 3; // Flag and alignment byte
unsigned char BigPipe: 1; //
#endif
short TypeOffset;
union
{
struct
{
unsigned short MemSize;
unsigned short WireSize;
} s;
struct
{
unsigned long MemSize;
unsigned long WireSize;
} Big;
};
} FC_PIPE_DEF;
void
NdrpPipeElementBufferSize(
NDR_PIPE_DESC * pPipeDesc,
PMIDL_STUB_MESSAGE pStubMsg,
uchar * pMemory,
PFORMAT_STRING pFormat,
ulong ElemCount
);
void
NdrpPipeElementConvert(
PMIDL_STUB_MESSAGE pStubMsg,
PFORMAT_STRING pFormat,
ulong ElemCount
);
void
NdrpPipeElementConvertAndUnmarshal(
NDR_PIPE_DESC * pPipeDesc,
PMIDL_STUB_MESSAGE pStubMsg,
uchar * * ppMemory,
PFORMAT_STRING pFormat,
long ElemMemCount,
long * pActCount
);
BOOL
NdrReadPipeElements(
NDR_PIPE_DESC * pPipeDesc,
PMIDL_STUB_MESSAGE pStubMsg,
unsigned char * pTargetBuffer,
PFORMAT_STRING pElemFormat,
long * pElementsRead
);
void
NdrpReadPipeElementsFromBuffer (
NDR_PIPE_DESC * pPipeDesc,
PMIDL_STUB_MESSAGE pStubMsg,
uchar ** TargetBuffer,
PFORMAT_STRING pElemFormat,
long TargetBufferCount,
long * NumCopied
);
#ifdef __cplusplus
}
#endif
#endif // PIPENDR