mirror of https://github.com/lianthony/NT4.0
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
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
|
|
|