//+------------------------------------------------------------------------- // // Microsoft Windows // // Copyright (C) Microsoft Corporation, 1996 - 1999 // // File: pipe.h // //-------------------------------------------------------------------------- #ifndef __PIPE_HXX #define __PIPE_HXX enum receive_states { start, copy_pipe_elem, return_partial_pipe_elem, // also save pipe elem return_partial_count, // also save count read_partial_count, // also a start state read_partial_pipe_elem //also a start state } ; typedef struct { void *Buffer ; int BufferLength ; receive_states CurrentState ; char PAPI *CurPointer ; // current pointer in the buffer int BytesRemaining ; // bytes remaining in current buffer int ElementsRemaining ; // elements remaining in current pipe chunk DWORD PartialCount ; int PartialCountSize ; int PartialPipeElementSize ; int EndOfPipe ; int PipeElementSize ; void PAPI *PartialPipeElement ; void PAPI *AllocatedBuffer ; int BufferSize ; int SendBufferOffset ; void PAPI *PreviousBuffer ; int PreviousBufferSize ; HANDLE BindingHandle; } PIPE_STATE ; // // N.B. this structure is the same as MIDL_ASYNC_STUB_STATE // typedef struct async_stub_state { void *CallHandle ; RPC_STATUS (*CompletionRoutine) ( PRPC_ASYNC_STATE pAsync, void *Reply) ; int Length ; void *UserData ; int State ; void *Buffer ; int BufferLength ; unsigned long Flags ; PIPE_STATE PipeState ; BOOL (*ReceiveFunction) ( PRPC_ASYNC_STATE pAsync, PRPC_MESSAGE Message) ; } RPC_ASYNC_STUB_STATE ; void I_RpcReadPipeElementsFromBuffer ( PIPE_STATE PAPI *state, char PAPI *TargetBuffer, int TargetBufferSize, int PAPI *NumCopied ) ; //states enum { SEND_COMPLETE, SEND_INCOMPLETE } ; RPC_STATUS RPC_ENTRY MyRpcCompleteAsyncCall ( IN PRPC_ASYNC_STATE pAsync, IN void *Reply ); #define STUB(_x_) ((RPC_ASYNC_STUB_STATE *) (_x_->StubInfo)) #endif