#include "idl_types.h"

import "misc.idl";
import "security.idl";
import "fscc.idl";
/* bkup blobs interface definition */


[
	pointer_default(unique),
	helpstring("bkup blobs")
]


interface bkup
{
	typedef [v1_enum] enum {
		STREAM_ID_DATA	= 1,
		STREAM_ID_EX_DATA = 2,
		STREAM_ID_SECURITY_DATA = 3,
		STREAM_ID_ALTERNATE_DATA = 4,
		STREAM_ID_LINK = 5,
		STREAM_ID_OBJECTID = 7,
		STREAM_ID_REPARSE_DATA = 8,
		STREAM_ID_SPARSE_BLOCK = 9,
		STREAM_ID_TXFS_DATA = 10
	} bkup_StreamId;

	typedef [v1_enum] enum {
		STREAM_ATTRIBUTE_NORMAL = 0,
		STREAM_ATTRIBUTE_SECURITY = 2,
		STREAM_ATTRIBUTE_SPARSE = 8
	} bkup_StreamAttribute;

	typedef [nodiscriminant] union {
		[default] DATA_BLOB blob;
		[flag(NDR_ALIGN2),case(STREAM_ID_SECURITY_DATA)] security_descriptor sd;
		[case(STREAM_ID_OBJECTID)] fscc_FileObjectIdBuffer_2 object;
	} bkup_StreamData;

	typedef [public] struct {
		bkup_StreamId id;
		bkup_StreamAttribute attribute;
		hyper size;
		uint32 stream_name_size;
		[charset(UTF16),flag(STR_NOTERM)] uint16 stream_name[stream_name_size];
		[subcontext(0), subcontext_size(size), switch_is(id)] [flag(NDR_REMAINING)]  bkup_StreamData data;
	} bkup_Win32StreamId;

	typedef [nopush, nopull, flag(NDR_NOALIGN), public] struct {
		uint32 num_stream;
		bkup_Win32StreamId streams[num_stream];
	} bkup_NTBackupFile;
}
