Rules for Multiple Pipes

You can combine [in], [out], and [in, out] pipe parameters in any combination in a single call, but you must process the pipes in a specific order, as shown in the following pseudocode example:

Note

This feature is no longer supported in Windows Vista and later platforms.

 

  • Get the data from every input pipe, starting with the first (leftmost) [in] parameter, and continuing in order, draining each pipe before beginning to process the next.
  • After every input pipe has been completely processed, send the data for the output pipes, again starting with the first [out] parameter, and continuing in order, filling each pipe before beginning to process the next.
//in .IDL file:
void InOutUCharPipe( [in,out] UCHAR_PIPE *uchar_pipe_1, 
                     [out] UCHAR_PIPE * uchar_pipe_2, 
                     [in] UCHAR_PIPE uchar_pipe_3);
 
//remote procedure:
void InOutUCharPipe( UCHAR_PIPE *param1,
                     UCHAR_PIPE *param2,
                     UCHAR_PIPE  param3)
{
    while(!END_OF_PIPE1)
    {
        param1->pull (. . .);
        . . .
    };

    while(!END_OF_PIPE3)
    {
        param3.pull (. . .);
        . . .
    };

    while(!END_OF_PIPE1)
    {
        param1->push (. . .);
        . . .
    };

    while(!END_OF_PIPE2)
    {
        param2->push(. . .);
        . . .
    };
} //end InOutUCharPipe