#include "idl_types.h"

/*
  miscellaneous IDL structures
*/

[
	pointer_default(unique)
]
interface misc
{
	typedef [public,noprint,gensize] struct {
		uint32 time_low;
		uint16 time_mid;
		uint16 time_hi_and_version;
		uint8  clock_seq[2];
		uint8  node[6];
	} GUID;

	typedef [public] struct {
		GUID uuid;
		uint32 if_version;
	} ndr_syntax_id;

	typedef [public] struct {
		uint32 handle_type;
		GUID   uuid;
	} policy_handle;

	/* secure channel types */
	/* Only SEC_CHAN_WKSTA can forward requests to other domains. */

	typedef [public] enum {
		SEC_CHAN_NULL        = 0,
		SEC_CHAN_WKSTA       = 2,
		SEC_CHAN_DNS_DOMAIN  = 3,
		SEC_CHAN_DOMAIN      = 4,
		SEC_CHAN_BDC         = 6
	} netr_SchannelType;

	typedef [public] struct {
		NTSTATUS ntstatus;
		uint32 unknown1;
		uint32 unknown2; /* 0x00000001 */
	} KRB5_EDATA_NTSTATUS;

	typedef [public,v1_enum] enum {
		REG_NONE                       = 0,
		REG_SZ                         = 1,
		REG_EXPAND_SZ                  = 2,
		REG_BINARY                     = 3,
		REG_DWORD                      = 4,
		REG_DWORD_BIG_ENDIAN           = 5,
		REG_LINK                       = 6,
		REG_MULTI_SZ                   = 7,
		REG_RESOURCE_LIST              = 8,
		REG_FULL_RESOURCE_DESCRIPTOR   = 9,
		REG_RESOURCE_REQUIREMENTS_LIST = 10,
		REG_QWORD                      = 11
	} winreg_Type;

	typedef [nodiscriminant,public,flag(NDR_LITTLE_ENDIAN)] union {
		[case(REG_NONE)];
		[case(REG_SZ)] nstring string;
		[case(REG_EXPAND_SZ)] nstring string;
		[case(REG_BINARY),flag(NDR_REMAINING)] DATA_BLOB binary;
		[case(REG_DWORD)] uint32 value;
		[case(REG_DWORD_BIG_ENDIAN),flag(NDR_BIG_ENDIAN)] uint32 value;
		[case(REG_MULTI_SZ)] nstring_array string_array;
		[default,flag(NDR_REMAINING)] DATA_BLOB data;
	} winreg_Data;
}
