summaryrefslogtreecommitdiff
path: root/librpc/idl/frsrpc.idl
blob: 1019a25b28a9c2bc649b5b7f7e18234d2d16b062 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
#include "idl_types.h"

import "misc.idl";

[
  uuid("f5cc59b4-4264-101a-8c59-08002b2f8426"),
  version(1.1),
  endpoint("ncacn_ip_tcp:", "ncalrpc:"),
  helpstring("File Replication Service"),
  pointer_default(unique)
] 
interface frsrpc
{
	/*****************/
	/* Function 0x00 */

	/* TAG:3 this TLV contains a GUID and the name of the server sending
	 * the call
	 */
	typedef struct {
		[subcontext(4)] GUID unknown1;
		[subcontext(4)] nstring source_server;
	} frsrpc_FrsSendCommPktChunkDataSSRV;

	/* TAG:4 this TLV contains a GUID and the name of the destination
	 * server the PDU is sent to
	 */
	typedef struct {
		[subcontext(4)] GUID unknown1;
		[subcontext(4)] nstring dest_server;
	} frsrpc_FrsSendCommPktChunkDataDSRV;

	/* TAG:18 this TLV contains a  timestamp 
	*/
	typedef struct {
		[subcontext(4)] NTTIME time;
	} frsrpc_FrsSendCommPktChunkDataTS;


	typedef struct {
		uint32 unknown1;
	} frsrpc_FrsSendCommPktChunkDataA;

	typedef struct {
		uint32 unknown1;
		GUID unknown2;
		[subcontext(4)] nstring unknown3;
	} frsrpc_FrsSendCommPktChunkDataB;

	typedef struct {
		uint32 unknown1;
		GUID unknown2;
	} frsrpc_FrsSendCommPktChunkDataC;

	typedef [nodiscriminant] union {
		[default,flag(NDR_REMAINING)] DATA_BLOB blob;
		[case(1)] frsrpc_FrsSendCommPktChunkDataA A;
		[case(2)] frsrpc_FrsSendCommPktChunkDataA A;
		[case(3)] frsrpc_FrsSendCommPktChunkDataSSRV SSRV;
		[case(4)] frsrpc_FrsSendCommPktChunkDataDSRV DSRV;
		[case(5)] frsrpc_FrsSendCommPktChunkDataB B;
		[case(8)] frsrpc_FrsSendCommPktChunkDataB B;
		[case(6)] frsrpc_FrsSendCommPktChunkDataC C;
		[case(18)] frsrpc_FrsSendCommPktChunkDataTS TS;
		[case(19)] frsrpc_FrsSendCommPktChunkDataA A;
	} frsrpc_FrsSendCommPktChunkData;

	typedef struct {
		uint16 type;
		[subcontext(4),switch_is(type)] frsrpc_FrsSendCommPktChunkData data;
	} frsrpc_FrsSendCommPktChunk;

	typedef [flag(NDR_NOALIGN)] struct {
		frsrpc_FrsSendCommPktChunk chunk1;
		frsrpc_FrsSendCommPktChunk chunk2;
		frsrpc_FrsSendCommPktChunk chunk3;
		frsrpc_FrsSendCommPktChunk chunk4;
		frsrpc_FrsSendCommPktChunk chunk5;
		frsrpc_FrsSendCommPktChunk chunk6;
		frsrpc_FrsSendCommPktChunk chunk7;
		frsrpc_FrsSendCommPktChunk chunk8;
		frsrpc_FrsSendCommPktChunk chunk9;
	} frsrpc_FrsSendCommPktChunkCtr;

	typedef struct {
		uint32 unknown1;
		uint32 unknown2;
		uint32 unknown3;
		uint32 unknown4;
    		uint32 tlv_size;
		uint32 unknown6;
		uint32 unknown7; /* This may be a UNIQUE pointer? */
		uint32 unknown8;
		uint32 unknown9;
		/*
		 * The format of this blob is this a concatenation
		 * of TLVs which are not really NDR encoded.
		 *
		 * The individual TLVs are encoded as :
		 * struct {
		 * 	uint16 type;
		 *	[subcontext(4),switch_is(type)] chunk_data data;
		 * } chunk;
		 * 
		 * some of the chunk are like this:
		 *
		 * struct {
		 *	uint32 unknown; // 0x00000010
		 *	struct GUID guid;
		 *	lstring string;
		 * } ...;
		 *
		 *
		 * The tags are (might be) :
		 *  3: Source server sending the PDU
		 *  4: Destination server the PDU is sent to
		 * 18: Timestamp
		 *
		 */
		[subcontext(4)/*,size_is(tlv_size)*/] frsrpc_FrsSendCommPktChunkCtr *chunks;
		uint32 unknown10;
		uint32 unknown11;
	} frsrpc_FrsSendCommPktReq;

	WERROR frsrpc_FrsSendCommPkt(
		[in]	frsrpc_FrsSendCommPktReq req
	);

	/*****************/
	/* Function 0x01 */
	[todo] void FRSRPC_VERIFY_PROMOTION_PARENT();

	/*****************/
	/* Function 0x02 */
	[todo] void FRSRPC_START_PROMOTION_PARENT();

	/*****************/
	/* Function 0x03 */
	[todo] void FRSRPC_NOP();

	/*****************/
	/* Function 0x04 */
	[todo] void FRSRPC_BACKUP_COMPLETE();

	/*****************/
	/* Function 0x05 */
	[todo] void FRSRPC_BACKUP_COMPLETE_5();

	/*****************/
	/* Function 0x06 */
	[todo] void FRSRPC_BACKUP_COMPLETE_6();

	/*****************/
	/* Function 0x07 */
	[todo] void FRSRPC_BACKUP_COMPLETE_7();

	/*****************/
	/* Function 0x08 */
	[todo] void FRSRPC_BACKUP_COMPLETE_8();

	/*****************/
	/* Function 0x09 */
	[todo] void FRSRPC_BACKUP_COMPLETE_9();

	/*****************/
	/* Function 0x0a */
	[todo] void FRSRPC_VERIFY_PROMOTION_PARENT_EX();
}