6 uuid("f5cc59b4-4264-101a-8c59-08002b2f8426"),
8 endpoint("ncacn_ip_tcp:", "ncalrpc:"),
9 helpstring("File Replication Service"),
10 helper
("../librpc/ndr/ndr_frsrpc.h"),
11 pointer_default(unique)
19 [subcontext
(4)] GUID guid
;
20 [subcontext
(4)] nstring name
;
21 } frsrpc_CommPktChunkGuidName
;
28 typedef [bitmap32bit
,flag
(NDR_PAHEX
)] bitmap
{
29 FRSRPC_CO_FLAG_ABORT_CO
= 0x00000001,
30 FRSRPC_CO_FLAG_VV_ACTIVATED
= 0x00000002,
31 FRSRPC_CO_FLAG_CONTENT_CMD
= 0x00000004,
32 FRSRPC_CO_FLAG_LOCATION_CMD
= 0x00000008,
33 FRSRPC_CO_FLAG_ONLIST
= 0x00000010,
34 FRSRPC_CO_FLAG_LOCALCO
= 0x00000020,
35 FRSRPC_CO_FLAG_RETRY
= 0x00000040,
36 FRSRPC_CO_FLAG_OUT_OF_ORDER
= 0x00000200,
37 FRSRPC_CO_FLAG_NEW_FILE
= 0x00000400,
38 FRSRPC_CO_FLAG_CONTROL
= 0x00001000,
39 FRSRPC_CO_FLAG_DIRECTED_CO
= 0x00002000,
40 FRSRPC_CO_FLAG_VVJOIN_TO_ORIG
= 0x00040000,
41 FRSRPC_CO_FLAG_SKIP_ORIG_REC_C
= 0x00100000,
42 FRSRPC_CO_FLAG_MOVEIN_GEN
= 0x00200000,
43 FRSRPC_CO_FLAG_MORPH_GEN_HEAD
= 0x00400000,
44 FRSRPC_CO_FLAG_JUST_OID_RESET
= 0x00800000,
45 FRSRPC_CO_FLAG_COMPRESSED_STAGE
= 0x01000000,
46 FRSRPC_CO_FLAG_COMPRESSED_STAGE
= 0x01000000,
47 FRSRPC_CO_FLAG_SKIP_VV_UPDATE
= 0x02000000
48 } frsrpc_CommPktCoCmdFlags
;
50 const uint32 FRSRPC_CO_IFLAG_NONE
= 0x0000000;
52 typedef [bitmap32bit
,flag
(NDR_PAHEX
)] bitmap
{
53 FRSRPC_CO_IFLAG_VVRETIRE_EXEC
= 0x00000001,
54 FRSRPC_CO_IFLAG_CO_ABORT
= 0x00000002,
55 FRSRPC_CO_IFLAG_DIR_ENUM_PENDING
= 0x00000004
56 } frsrpc_CommPktCoCmdIFlags
;
58 typedef [v1_enum,flag
(NDR_PAHEX
)] enum {
59 FRSRPC_CO_STATUS_CO_ENTERED_LOG
= 0x00000000,
60 FRSRPC_CO_STATUS_ALLOC_STAGING_LOCAL_CO
= 0x00000001,
61 FRSRPC_CO_STATUS_LOCAL_CO_STAGING_STARTED
= 0x00000002,
62 FRSRPC_CO_STATUS_LOCAL_CO_STAGING_COMPLETED
= 0x00000003,
63 FRSRPC_CO_STATUS_WAIT_RETRY_LOCAL_CO_STAGING
= 0x00000004,
64 FRSRPC_CO_STATUS_ALLOC_STAGING_REMOTE_CO
= 0x00000005,
65 FRSRPC_CO_STATUS_REMOTE_CO_STAGING_STARTED
= 0x00000006,
66 FRSRPC_CO_STATUS_REMOTE_CO_STAGING_COMPLETED
= 0x00000007,
67 FRSRPC_CO_STATUS_WAIT_RETRY_REMOTE_CO_STAGING
= 0x00000008,
68 FRSRPC_CO_STATUS_FILE_INSTALL_REQUESTED
= 0x00000009,
69 FRSRPC_CO_STATUS_FILE_INSTALL_STARTED
= 0x0000000A,
70 FRSRPC_CO_STATUS_FILE_INSTALL_COMPLETED
= 0x0000000B,
71 FRSRPC_CO_STATUS_FILE_INSTALL_WAIT_RETRY
= 0x0000000C,
72 FRSRPC_CO_STATUS_FILE_INSTALL_RETRYING
= 0x0000000D,
73 FRSRPC_CO_STATUS_FILE_INSTALL_RENAME_RETRYING
= 0x0000000E,
74 FRSRPC_CO_STATUS_FILE_INSTALL_DELETE_RETRYING
= 0x0000000F,
75 FRSRPC_CO_STATUS_CO_RECYCLED_FOR_ENUM
= 0x00000013,
76 FRSRPC_CO_STATUS_REQUEST_OUTBOUND_PROPAGATION
= 0x00000014,
77 FRSRPC_CO_STATUS_REQUEST_ACCEPTED_OUTBOUND_LOG
= 0x00000015,
78 FRSRPC_CO_STATUS_DB_STATE_UPDATE_STARTED
= 0x00000016,
79 FRSRPC_CO_STATUS_DB_STATE_UPDATE_COMPLETED
= 0x00000017,
80 FRSRPC_CO_STATUS_CO_ABORTED
= 0x00000018
81 } frsrpc_CommPktCoCmdStatus
;
83 typedef [bitmap32bit
,flag
(NDR_PAHEX
)] bitmap
{
84 FRSRPC_CONTENT_REASON_DATA_OVERWRITE
= 0x00000001,
85 FRSRPC_CONTENT_REASON_DATA_EXTEND
= 0x00000002,
86 FRSRPC_CONTENT_REASON_DATA_TRUNCATION
= 0x00000004,
87 FRSRPC_CONTENT_REASON_NAMED_DATA_OVERWRITE
= 0x00000010,
88 FRSRPC_CONTENT_REASON_NAMED_DATA_EXTEND
= 0x00000020,
89 FRSRPC_CONTENT_REASON_NAMED_DATA_TRUNCATION
= 0x00000040,
90 FRSRPC_CONTENT_REASON_FILE_CREATE
= 0x00000100,
91 FRSRPC_CONTENT_REASON_FILE_DELETE
= 0x00000200,
92 FRSRPC_CONTENT_REASON_EA_CHANGE
= 0x00000400,
93 FRSRPC_CONTENT_REASON_SECURITY_CHANGE
= 0x00000800,
94 FRSRPC_CONTENT_REASON_OLD_NAME
= 0x00001000,
95 FRSRPC_CONTENT_REASON_NEW_NAME
= 0x00002000,
96 FRSRPC_CONTENT_REASON_BASIC_INFO_CHANGE
= 0x00004000,
97 FRSRPC_CONTENT_REASON_COMPRESSION_CHANGE
= 0x00020000
98 } frsrpc_CommPktCoCmdContentCmd
;
100 typedef [v1_enum,flag
(NDR_PAHEX
)] enum {
101 FRSRPC_CO_LOCATION_FILE_CREATE
= 0x00000000,
102 FRSRPC_CO_LOCATION_DIR_CREATE
= 0x00000000 |
0x00000001,
103 FRSRPC_CO_LOCATION_FILE_DELETE
= 0x00000002,
104 FRSRPC_CO_LOCATION_DIR_DELETE
= 0x00000002 |
0x00000001,
105 FRSRPC_CO_LOCATION_FILE_MOVEIN
= 0x00000004,
106 FRSRPC_CO_LOCATION_DIR_MOVEIN
= 0x00000004 |
0x00000001,
107 FRSRPC_CO_LOCATION_FILE_MOVEIN2
= 0x00000006,
108 FRSRPC_CO_LOCATION_DIR_MOVEIN2
= 0x00000006 |
0x00000001,
109 FRSRPC_CO_LOCATION_FILE_MOVEOUT
= 0x00000008,
110 FRSRPC_CO_LOCATION_DIR_MOVEOUT
= 0x00000008 |
0x00000001,
111 FRSRPC_CO_LOCATION_FILE_MOVERS
= 0x0000000a,
112 FRSRPC_CO_LOCATION_DIR_MOVERS
= 0x0000000a |
0x00000001,
113 FRSRPC_CO_LOCATION_FILE_MOVEDIR
= 0x0000000c,
114 FRSRPC_CO_LOCATION_DIR_MOVEDIR
= 0x0000000c |
0x00000001,
115 FRSRPC_CO_LOCATION_FILE_NO_CMD
= 0x0000000e,
116 FRSRPC_CO_LOCATION_DIR_NO_CMD
= 0x0000000e |
0x00000001
117 } frsrpc_CommPktCoCmdLocationCmd
;
120 uint32 sequence_number
;
121 frsrpc_CommPktCoCmdFlags flags
;
122 frsrpc_CommPktCoCmdIFlags iflags
;
123 frsrpc_CommPktCoCmdStatus status
;
124 frsrpc_CommPktCoCmdContentCmd content_cmd
;
125 frsrpc_CommPktCoCmdLocationCmd location_cmd
;
126 uint32 file_attributes
;
127 uint32 file_version_number
;
128 uint32 partern_ack_sequence_number
;
129 [value
(0)] uint32 not_used
;
135 hyper jrnl_first_usn
;
136 uint32 original_replica_num
;
137 uint32 new_replica_num
;
138 GUID change_order_guid
;
139 GUID originator_guid
;
141 GUID old_parent_guid
;
142 GUID new_parent_guid
;
143 GUID connection_guid
;
145 [value
(0)] hyper spare2ul1
;
146 [value
(0)] hyper spare1guid_p1
;
147 [value
(0)] hyper spare1guid_p2
;
148 [value
(0)] hyper spare2guid_p1
;
149 [value
(0)] hyper spare3guid_p2
;
150 [value
(0)] uint32 spare1wcs
;
151 [value
(0)] uint32 spare2wcs
;
152 [value
(0)] uint32 extension
;
153 [value
(0)] uint32 spare2bin
;
155 [value
(2*strlen_m
(file_name
))] uint16 file_name_length
;
156 #define FRSRPC_MAX_PATH
260
157 [charset
(UTF16
)] uint16 file_name
[FRSRPC_MAX_PATH
+1];
158 [value
(0)] uint8 padding1
;
159 [value
(0)] uint8 padding2
;
160 [value
(0)] uint8 padding3
;
161 [value
(0)] uint8 padding4
;
162 } frsrpc_CommPktChangeOrderCommand
;
164 typedef [v1_enum,flag
(NDR_PAHEX
)] enum {
165 FRSRPC_DATA_EXTENSION_TERMINATOR
= 0x00000000,
166 FRSRPC_DATA_EXTENSION_MD5_CHECKSUM
= 0x00000001,
167 FRSRPC_DATA_EXTENSION_RETRY_TIMEOUT
= 0x00000002
168 } frsrpc_CommPktDataExtensionType
;
170 typedef [flag
(NDR_PAHEX
)] struct {
171 [value
(0x00000018)] uint32 prefix_size
;
172 [value
(FRSRPC_DATA_EXTENSION_MD5_CHECKSUM
)]
173 frsrpc_CommPktDataExtensionType prefix_type
;
175 } frsrpc_CommPktDataExtensionChecksum
;
178 [value
(0x00000018)] uint32 prefix_size
;
179 [value
(FRSRPC_DATA_EXTENSION_RETRY_TIMEOUT
)]
180 frsrpc_CommPktDataExtensionType prefix_type
;
182 [value
(0)] uint32 not_used
;
183 NTTIME first_try_time
;
184 } frsrpc_CommPktDataExtensionRetryTimeout
;
186 typedef [flag
(NDR_PAHEX
)] enum {
187 FRSRPC_CO_RECORD_EXTENSION_VERSION_WIN2K
= 0x0000,
188 FRSRPC_CO_RECORD_EXTENSION_VERSION_1
= 0x0001
189 } frsrpc_CommPktCoRecordExtensionMajor
;
192 [value
(0x00000028)] uint32 field_size
;
193 [value
(FRSRPC_CO_RECORD_EXTENSION_VERSION_WIN2K
)]
194 frsrpc_CommPktCoRecordExtensionMajor major
;
195 [value
(0x0001)] uint16 offset_count
;
196 [value
(0x00000010)] uint32 offset
;
197 [value
(0)] uint32 offset_last
;
198 frsrpc_CommPktDataExtensionChecksum data_checksum
;
199 } frsrpc_CommPktCoRecordExtensionWin2k
;
202 [value
(0x00000048)] uint32 field_size
;
203 frsrpc_CommPktCoRecordExtensionMajor major
;
204 [value
(0x0002)] uint16 offset_count
;
205 [value
(0x00000018)] uint32 offset0
;
206 [value
(0x00000030)] uint32 offset1
;/*TODO: is this correct??? */
207 [value
(0)] uint32 offset_last
;
208 [value
(0)] uint32 not_used
;
209 frsrpc_CommPktDataExtensionChecksum data_checksum
;
210 frsrpc_CommPktDataExtensionRetryTimeout data_retry_timeout
;
211 } frsrpc_CommPktChangeOrderRecordExtension
;
213 typedef [v1_enum,flag
(NDR_PAHEX
)] enum {
214 FRSRPC_COMMAND_REMOTE_CO
= 0x00000218,
215 FRSRPC_COMMAND_RECEIVING_STATE
= 0x00000238,
216 FRSRPC_COMMAND_REMOTE_CO_DONE
= 0x00000250,
217 FRSRPC_COMMAND_ABORT_FETCH
= 0x00000246,
218 FRSRPC_COMMAND_RETRY_FETCH
= 0x00000244,
219 FRSRPC_COMMAND_NEED_JOIN
= 0x00000121,
220 FRSRPC_COMMAND_START_JOIN
= 0x00000122,
221 FRSRPC_COMMAND_JOINING
= 0x00000130,
222 FRSRPC_COMMAND_JOINED
= 0x00000128,
223 FRSRPC_COMMAND_UNJOIN_REMOTE
= 0x00000148,
224 FRSRPC_COMMAND_WJOIN_DONE
= 0x00000136,
225 FRSRPC_COMMAND_SEND_STAGE
= 0x00000228
226 } frsrpc_CommPktCommand
;
228 typedef [flag
(NDR_PAHEX
)] enum {
229 FRSRPC_COMM_PKT_CHUNK_BOP
= 0x0001,
230 FRSRPC_COMM_PKT_CHUNK_COMMAND
= 0x0002,
231 FRSRPC_COMM_PKT_CHUNK_TO
= 0x0003,
232 FRSRPC_COMM_PKT_CHUNK_FROM
= 0x0004,
233 FRSRPC_COMM_PKT_CHUNK_REPLICA
= 0x0005,
234 FRSRPC_COMM_PKT_CHUNK_CONNECTION
= 0x0008,
235 FRSRPC_COMM_PKT_CHUNK_JOIN_GUID
= 0x0006,
236 FRSRPC_COMM_PKT_CHUNK_LAST_JOIN_TIME
= 0x0012,
238 FRSRPC_COMM_PKT_CHUNK_VVECTOR
= 0x0007,
239 FRSRPC_COMM_PKT_CHUNK_JOIN_TIME
= 0x0011,
240 FRSRPC_COMM_PKT_CHUNK_REPLICA_VERSION_GUID
= 0x0014,
241 FRSRPC_COMM_PKT_CHUNK_COMPRESSION_GUID
= 0x0018,
243 FRSRPC_COMM_PKT_CHUNK_BLOCK
= 0x0009,
244 FRSRPC_COMM_PKT_CHUNK_BLOCK_SIZE
= 0x000A,
245 FRSRPC_COMM_PKT_CHUNK_FILE_SIZE
= 0x000B,
246 FRSRPC_COMM_PKT_CHUNK_FILE_OFFSET
= 0x000C,
247 FRSRPC_COMM_PKT_CHUNK_GVSN
= 0x000E,
248 FRSRPC_COMM_PKT_CHUNK_CO_GUID
= 0x000F,
249 FRSRPC_COMM_PKT_CHUNK_CO_SEQUENCE_NUMBER
= 0x0010,
251 FRSRPC_COMM_PKT_CHUNK_REMOTE_CO
= 0x000D,
252 FRSRPC_COMM_PKT_CHUNK_CO_EXT_WIN2K
= 0x0016,
253 FRSRPC_COMM_PKT_CHUNK_CO_EXTENTION_2
= 0x0017,
255 FRSRPC_COMM_PKT_CHUNK_EOP
= 0x0013
256 } frsrpc_CommPktChunkType
;
258 typedef [nodiscriminant
] union {
259 [default,flag
(NDR_REMAINING
)] DATA_BLOB blob
;
260 [case(FRSRPC_COMM_PKT_CHUNK_BOP
)]
261 [value
(0)] uint32 bop
;
262 [case(FRSRPC_COMM_PKT_CHUNK_COMMAND
)]
263 frsrpc_CommPktCommand command
;
264 [case(FRSRPC_COMM_PKT_CHUNK_TO
)]
265 frsrpc_CommPktChunkGuidName to
;
266 [case(FRSRPC_COMM_PKT_CHUNK_FROM
)]
267 frsrpc_CommPktChunkGuidName from
;
268 [case(FRSRPC_COMM_PKT_CHUNK_REPLICA
)]
269 frsrpc_CommPktChunkGuidName replica
;
270 [case(FRSRPC_COMM_PKT_CHUNK_CONNECTION
)]
271 frsrpc_CommPktChunkGuidName connection
;
272 [case(FRSRPC_COMM_PKT_CHUNK_JOIN_GUID
)][subcontext
(4)]
274 [case(FRSRPC_COMM_PKT_CHUNK_LAST_JOIN_TIME
)]
275 NTTIME last_join_time
;
276 [case(FRSRPC_COMM_PKT_CHUNK_VVECTOR
)][subcontext
(4)]
277 frsrpc_CommPktGSVN vvector
;
278 [case(FRSRPC_COMM_PKT_CHUNK_JOIN_TIME
)][subcontext
(4)]
280 [case(FRSRPC_COMM_PKT_CHUNK_REPLICA_VERSION_GUID
)][subcontext
(4)]
281 GUID replica_version_guid
;
282 [case(FRSRPC_COMM_PKT_CHUNK_COMPRESSION_GUID
)]
283 GUID compression_guid
;
284 [case(FRSRPC_COMM_PKT_CHUNK_BLOCK
)]
285 [flag
(NDR_REMAINING
)] DATA_BLOB block
;
286 [case(FRSRPC_COMM_PKT_CHUNK_BLOCK_SIZE
)]
288 [case(FRSRPC_COMM_PKT_CHUNK_FILE_SIZE
)]
290 [case(FRSRPC_COMM_PKT_CHUNK_FILE_OFFSET
)]
292 [case(FRSRPC_COMM_PKT_CHUNK_GVSN
)][subcontext
(4)]
293 frsrpc_CommPktGSVN gvsn
;
294 [case(FRSRPC_COMM_PKT_CHUNK_CO_GUID
)][subcontext
(4)]
296 [case(FRSRPC_COMM_PKT_CHUNK_CO_SEQUENCE_NUMBER
)]
297 uint32 co_sequnence_number
;
298 [case(FRSRPC_COMM_PKT_CHUNK_REMOTE_CO
)][subcontext
(4)]
299 frsrpc_CommPktChangeOrderCommand remote_co
;
300 [case(FRSRPC_COMM_PKT_CHUNK_CO_EXT_WIN2K
)][subcontext
(4)]
301 frsrpc_CommPktCoRecordExtensionWin2k co_ext_win2k
;
302 [case(FRSRPC_COMM_PKT_CHUNK_CO_EXTENTION_2
)][subcontext
(4)]
303 frsrpc_CommPktChangeOrderRecordExtension co_extension2
;
304 [case(FRSRPC_COMM_PKT_CHUNK_EOP
)]
305 [value
(0xFFFFFFFF)] uint32 bop
;
306 } frsrpc_CommPktChunkData
;
308 typedef [public,flag
(NDR_NOALIGN
)] struct {
309 frsrpc_CommPktChunkType type
;
310 [subcontext
(4),switch_is(type
)] frsrpc_CommPktChunkData data
;
311 } frsrpc_CommPktChunk
;
313 typedef [nopull
,nopush
,flag
(NDR_NOALIGN
)] struct {
314 uint32 num_chunks
; /* this doesn't appear on the wire */
315 frsrpc_CommPktChunk chunks
[num_chunks
];
316 } frsrpc_CommPktChunkCtr
;
318 typedef [v1_enum] enum {
319 FRSRPC_COMM_PKT_MAJOR_0
= 0x00000000
320 } frsrpc_CommPktMajor
;
322 typedef [v1_enum] enum {
323 FRSRPC_COMM_PKT_MINOR_0
= 0x00000000,
324 FRSRPC_COMM_PKT_MINOR_1
= 0x00000001,
325 FRSRPC_COMM_PKT_MINOR_2
= 0x00000002,
326 FRSRPC_COMM_PKT_MINOR_3
= 0x00000003,
327 FRSRPC_COMM_PKT_MINOR_4
= 0x00000004,
328 FRSRPC_COMM_PKT_MINOR_5
= 0x00000005,
329 FRSRPC_COMM_PKT_MINOR_6
= 0x00000006,
330 FRSRPC_COMM_PKT_MINOR_7
= 0x00000007,
331 FRSRPC_COMM_PKT_MINOR_8
= 0x00000008,
332 FRSRPC_COMM_PKT_MINOR_9
= 0x00000009
333 } frsrpc_CommPktMinor
;
336 frsrpc_CommPktMajor major
;
337 frsrpc_CommPktMinor minor
;
338 [value
(1)] uint32 cs_id
;
339 [value
(pkt_len
+12)] uint32 memory_len
;
340 [value
(ndr_size_frsrpc_CommPktChunkCtr
(r
->ctr
,
341 ndr
->iconv_convenience
, ndr
->flags
))]
344 [value
(0)] uint32 upk_len
;
345 [subcontext
(4),subcontext_size
(pkt_len
)]
346 frsrpc_CommPktChunkCtr
*ctr
;
347 [value
(0)] uint32 data_name
;
348 [value
(0)] uint32 data_handle
;
349 } frsrpc_FrsSendCommPktReq
;
351 WERROR frsrpc_FrsSendCommPkt
(
352 [in] frsrpc_FrsSendCommPktReq req
357 /* this function always return WERR_CALL_NOT_IMPLEMENTED */
358 WERROR frsrpc_FrsVerifyPromotionParent
(
359 [in,unique,string,charset
(UTF16
)] uint16
*parent_account
,
360 [in,unique,string,charset
(UTF16
)] uint16
*parent_password
,
361 [in,unique,string,charset
(UTF16
)] uint16
*replica_set_name
,
362 [in,unique,string,charset
(UTF16
)] uint16
*replica_set_type
,
363 [in] frsrpc_PartnerAuthLevel partner_auth_level
,
364 [in] uint32 __ndr_guid_size
369 typedef [v1_enum,flag
(NDR_PAHEX
)] enum {
370 FRSRPC_PARENT_AUTH_LEVEL_ENCRYPTED_KERBEROS
= 0x00000000,
371 FRSRPC_PARENT_AUTH_LEVEL_NO_AUTHENTICATION
= 0x00000001
372 } frsrpc_PartnerAuthLevel
;
374 WERROR frsrpc_FrsStartPromotionParent
(
375 [in,unique,string,charset
(UTF16
)] uint16
*parent_account
,
376 [in,unique,string,charset
(UTF16
)] uint16
*parent_password
,
377 [in,unique,string,charset
(UTF16
)] uint16
*replica_set_name
,
378 [in,unique,string,charset
(UTF16
)] uint16
*replica_set_type
,
379 [in,unique,string,charset
(UTF16
)] uint16
*connection_name
,
380 [in,unique,string,charset
(UTF16
)] uint16
*partner_name
,
381 [in,unique,string,charset
(UTF16
)] uint16
*partner_princ_name
,
382 [in] frsrpc_PartnerAuthLevel partner_auth_level
,
383 [in,value
(16),range(16,16)] uint32 __ndr_guid_size
,
384 [in,unique,subcontext
(4),subcontext_size
(16)]
385 GUID
*connection_guid
,
386 [in,unique,subcontext
(4),subcontext_size
(16)]
388 [in,out,unique,subcontext
(4),subcontext_size
(16)]
394 WERROR frsrpc_FrsNOP
();
398 [todo
] void FRSRPC_BACKUP_COMPLETE
();
402 [todo
] void FRSRPC_BACKUP_COMPLETE_5
();
406 [todo
] void FRSRPC_BACKUP_COMPLETE_6
();
410 [todo
] void FRSRPC_BACKUP_COMPLETE_7
();
414 [todo
] void FRSRPC_BACKUP_COMPLETE_8
();
418 [todo
] void FRSRPC_BACKUP_COMPLETE_9
();
422 [todo
] void FRSRPC_VERIFY_PROMOTION_PARENT_EX
();