/* header auto-generated by pidl */

#ifndef _PIDL_HEADER_regf
#define _PIDL_HEADER_regf

#include <stdint.h>


#ifndef _HEADER_regf
#define _HEADER_regf

#define REGF_OFFSET_NONE	( 0xffffffff )
struct regf_version {
	uint32_t major;/* [value] */
	uint32_t minor;
	uint32_t release;/* [value(0)] */
	uint32_t build;/* [value] */
}/* [noprint] */;

struct regf_hdr {
	const char *REGF_ID;/* [charset(DOS)] */
	uint32_t update_counter1;
	uint32_t update_counter2;
	NTTIME modtime;
	struct regf_version version;
	uint32_t data_offset;
	uint32_t last_block;
	uint32_t uk7;/* [value] */
	const char *description;/* [charset(UTF16)] */
	uint32_t padding[99];
	uint32_t chksum;
}/* [noprint,public] */;

struct hbin_block {
	const char *HBIN_ID;/* [charset(DOS)] */
	uint32_t offset_from_first;
	uint32_t offset_to_next;
	uint32_t unknown[2];
	NTTIME last_change;
	uint32_t block_size;
	uint8_t *data;
}/* [noprint,public] */;

enum reg_key_type
#ifndef USE_UINT_ENUMS
 {
	REG_ROOT_KEY=(int)(0x2C),
	REG_SUB_KEY=(int)(0x20),
	REG_SYM_LINK=(int)(0x10)
}
#else
 { __do_not_use_enum_reg_key_type=INT_MAX}
#define REG_ROOT_KEY ( 0x2C )
#define REG_SUB_KEY ( 0x20 )
#define REG_SYM_LINK ( 0x10 )
#endif
;

struct nk_block {
	const char *header;/* [charset(DOS)] */
	enum reg_key_type type;
	NTTIME last_change;
	uint32_t uk1;
	uint32_t parent_offset;
	uint32_t num_subkeys;
	uint32_t uk2;
	uint32_t subkeys_offset;
	uint32_t unknown_offset;
	uint32_t num_values;
	uint32_t values_offset;
	uint32_t sk_offset;
	uint32_t clsname_offset;
	uint32_t unk3[5];
	uint16_t name_length;/* [value(strlen(key_name))] */
	uint16_t clsname_length;
	const char *key_name;/* [charset(DOS)] */
}/* [noprint,public] */;

struct sk_block {
	const char *header;/* [charset(DOS)] */
	uint16_t tag;
	uint32_t prev_offset;
	uint32_t next_offset;
	uint32_t ref_cnt;
	uint32_t rec_size;
	uint8_t *sec_desc;
}/* [noprint,public] */;

struct lh_hash {
	uint32_t nk_offset;
	uint32_t base37;
}/* [noprint] */;

struct lh_block {
	const char *header;/* [charset(DOS)] */
	uint16_t key_count;
	struct lh_hash *hr;
}/* [noprint,public] */;

struct li_block {
	const char *header;/* [charset(DOS)] */
	uint16_t key_count;
	uint32_t *nk_offset;
}/* [noprint,public] */;

struct ri_block {
	const char *header;/* [charset(DOS)] */
	uint16_t key_count;
	uint32_t *offset;
}/* [noprint,public] */;

struct vk_block {
	const char *header;/* [charset(DOS)] */
	uint16_t name_length;/* [value(strlen(data_name))] */
	uint32_t data_length;
	uint32_t data_offset;
	uint32_t data_type;
	uint16_t flag;
	uint16_t unk1;
	const char *data_name;/* [charset(DOS)] */
}/* [noprint,public] */;

struct hash_record {
	uint32_t nk_offset;
	const char *hash;/* [charset(DOS)] */
}/* [noprint] */;

struct lf_block {
	const char *header;/* [charset(DOS)] */
	uint16_t key_count;
	struct hash_record *hr;
}/* [noprint,public] */;

#endif /* _HEADER_regf */
#endif /* _PIDL_HEADER_regf */
