3 uuid("60a15ec5-4de8-11d7-a637-005056a20182"),
4 endpoint("ncacn_np:[\\pipe\\rpcecho]", "ncacn_ip_tcp:", "ncalrpc:"),
5 pointer_default(unique),
7 helpstring("Simple echo pipe")
11 /* Add one to an integer */
14 [out] uint32 *out_data
16 /* Echo an array of bytes back at the caller */
19 [in] [size_is(len)] uint8 in_data[],
20 [out] [size_is(len)] uint8 out_data[]
22 /* Sink data to the server */
25 [in,size_is(len)] uint8 data[]
27 /* Source data from server */
30 [out,size_is(len)] uint8 data[]
35 [in,string,charset(UTF16)] uint16 *s1,
36 [out,string,charset(UTF16)] uint16 **s2
40 /* test some alignment issues */
41 typedef [public] struct {
69 struct echo_info4 info4;
72 typedef [switch_type(uint16)] union {
73 [case(1)] echo_info1 info1;
74 [case(2)] echo_info2 info2;
75 [case(3)] echo_info3 info3;
76 [case(4)] struct echo_info4 info4;
77 [case(5)] echo_info5 info5;
78 [case(6)] echo_info6 info6;
79 [case(7)] echo_info7 info7;
82 NTSTATUS echo_TestCall2 (
84 [out,switch_is(level)] echo_Info *info
87 uint32 echo_TestSleep(
96 typedef [v1_enum] enum {
106 typedef [switch_type(uint16)] union {
107 [case(ECHO_ENUM1)] echo_Enum1 e1;
108 [case(ECHO_ENUM2)] echo_Enum2 e2;
112 [in,out,ref] echo_Enum1 *foo1,
113 [in,out,ref] echo_Enum2 *foo2,
114 [in,out,ref,switch_is(*foo1)] echo_Enum3 *foo3
119 [size_is(x)] uint16 surrounding[*];
122 void echo_TestSurrounding(
123 [in,out,ref] echo_Surrounding *data
126 uint16 echo_TestDoublePointer([in] uint16 ***data);
128 typedef pipe uint8 echo_BytePipe;
133 typedef pipe echo_Struct echo_StructPipe;
135 uint32 echo_BytePipeIn(
137 // [in,ref] echo_StructPipe *sp,
138 [in,ref] echo_BytePipe *bp
142 struct frstrans_BytePipe_chunk {
147 struct frstrans_RdcGetFileDataAsync r;
148 struct frstrans_BytePipe_chunk chunk;
149 struct frstrans_BytePipe *p;
151 p = dcerpc_frstrans_BytePipe_create()..;
155 subreq = dceprc_frstrans_RdcGetFileDataAsync_send(..., r);
158 subreq2 = dcerpc_frstrans_BytePipe_read_chunk_send(..., r.out.byte_pipe)
160 dcerpc_frstrans_BytePipe_read_chunk_recv(subreq2, mem_ctx, &chunk);
162 if (chunk.count == 0) {
166 subreq = dceprc_frstrans_RdcGetFileDataAsync_recv(subreq);
168 // frstrans_metzeSomeStructExample
176 typedef pipe frstrans_Struct *frstrans_StructPipe;
178 WERROR frstrans_metzeSomeStructExample(
179 [in,ref] policy_handle *server_context,
180 [out,ref] frstrans_StructPipe *struct_pipe
183 struct frstrans_StructPipe_chunk {
185 struct frstrans_Struct *array;
188 struct frstrans_metzeSomeStructExample r;
189 struct frstrans_StructPipe_chunk chunk;
190 struct frstrans_StructPipe *p;
192 p = dcerpc_frstrans_StructPipe_create()..;
196 subreq = dceprc_frstrans_metzeSomeStructExample_send(..., r);
199 subreq2 = dcerpc_frstrans_StructPipe_read_chunk_send(..., r.out.byte_pipe)
201 dcerpc_frstrans_StructPipe_read_chunk_recv(subreq2, mem_ctx, &chunk);
203 if (chunk.count == 0) {
207 subreq = dceprc_frstrans_metzeSomeStructExample_recv(subreq);