Blame include/ntapi/nt_object.h

dd89bb
#ifndef _NT_OBJECT_H_
dd89bb
#define _NT_OBJECT_H_
dd89bb
414ad3
#include "nt_abi.h"
dd89bb
dd89bb
typedef enum _nt_object_info_class {
dd89bb
	NT_OBJECT_BASIC_INFORMATION	= 0,
dd89bb
	NT_OBJECT_NAME_INFORMATION	= 1,
dd89bb
	NT_OBJECT_TYPE_INFORMATION	= 2,
dd89bb
	NT_OBJECT_ALL_TYPES_INFORMATION	= 3,
dd89bb
	NT_OBJECT_HANDLE_INFORMATION	= 4
dd89bb
} nt_object_info_class;
dd89bb
dd89bb
dd89bb
typedef enum _nt_security_impersonation_level {
dd89bb
	NT_SECURITY_ANONYMOUS		= 0,
dd89bb
	NT_SECURITY_IDENTIFICATION	= 1,
dd89bb
	NT_SECURITY_IMPERSONATION	= 2,
dd89bb
	NT_SECURITY_DELEGATION		= 3
dd89bb
} nt_security_impersonation_level;
dd89bb
dd89bb
dd89bb
typedef enum _nt_security_information {
dd89bb
	NT_OWNER_SECURITY_INFORMATION	= 0x01,
dd89bb
	NT_GROUP_SECURITY_INFORMATION	= 0x02,
dd89bb
	NT_DACL_SECURITY_INFORMATION	= 0x04,
dd89bb
	NT_SACL_SECURITY_INFORMATION	= 0x08
dd89bb
} nt_security_information;
dd89bb
dd89bb
dd89bb
dd89bb
/* generic access rights */
dd89bb
#define NT_SEC_DELETE				(0x00010000u)
dd89bb
#define NT_SEC_READ_CONTROL			(0x00020000u)
dd89bb
#define NT_SEC_WRITE_DAC			(0x00040000u)
dd89bb
#define NT_SEC_WRITE_OWNER			(0x00080000u)
dd89bb
#define NT_SEC_SYNCHRONIZE			(0x00100000u)
dd89bb
#define NT_SEC_STANDARD_RIGHTS_REQUIRED		(0x000F0000u)
dd89bb
#define NT_SEC_STANDARD_RIGHTS_READ		NT_SEC_READ_CONTROL
dd89bb
#define NT_SEC_STANDARD_RIGHTS_WRITE		NT_SEC_READ_CONTROL
dd89bb
#define NT_SEC_STANDARD_RIGHTS_EXECUTE		NT_SEC_READ_CONTROL
dd89bb
#define NT_SEC_STANDARD_RIGHTS_ALL		(0x001F0000u)
dd89bb
#define NT_SEC_SPECIFIC_RIGHTS_ALL		(0x0000FFFFu)
dd89bb
dd89bb
#define NT_GENERIC_ALL				(0x10000000u)
dd89bb
#define NT_GENERIC_EXECUTE			(0x20000000u)
dd89bb
#define NT_GENERIC_WRITE			(0x40000000u)
dd89bb
#define NT_GENERIC_READ				(0x80000000u)
dd89bb
dd89bb
dd89bb
/* zw_open_directory access rights */
dd89bb
#define NT_DIRECTORY_QUERY			(0x0001u)
dd89bb
#define NT_DIRECTORY_TRAVERSE			(0x0002u)
dd89bb
#define NT_DIRECTORY_CREATE_OBJECT		(0x0004u)
dd89bb
#define NT_DIRECTORY_CREATE_SUBDIRECTORY	(0x0008u)
dd89bb
#define NT_DIRECTORY_ALL_ACCESS			NT_DIRECTORY_QUERY \
dd89bb
							| NT_DIRECTORY_TRAVERSE \
dd89bb
							| NT_DIRECTORY_CREATE_OBJECT \
dd89bb
							| NT_DIRECTORY_CREATE_SUBDIRECTORY \
dd89bb
							| NT_SEC_STANDARD_RIGHTS_REQUIRED
dd89bb
dd89bb
/* zw_open_symbolic_link_object access rights */
dd89bb
#define NT_SYMBOLIC_LINK_QUERY			(0x0001u)
dd89bb
#define NT_SYMBOLIC_LINK_ALL_ACCESS		NT_SYMBOLIC_LINK_QUERY \
dd89bb
							| NT_SEC_STANDARD_RIGHTS_REQUIRED
dd89bb
dd89bb
/* object handles */
dd89bb
#define NT_HANDLE_FLAG_INHERIT			(0x0001u)
dd89bb
#define NT_HANDLE_FLAG_PROTECT_FROM_CLOSE	(0x0002u)
dd89bb
#define NT_HANDLE_PERMANENT			(0x0010u)
dd89bb
#define NT_HANDLE_EXCLUSIVE			(0x0020u)
dd89bb
#define NT_INVALID_HANDLE_VALUE 		((void *)(intptr_t)-1)
dd89bb
dd89bb
/* object attribute bits */
dd89bb
#define NT_OBJ_INHERIT	 			(0x0002u)
dd89bb
#define NT_OBJ_PERMANENT 			(0x0010u)
dd89bb
#define NT_OBJ_EXCLUSIVE 			(0x0020u)
dd89bb
#define NT_OBJ_CASE_INSENSITIVE			(0x0040u)
dd89bb
#define NT_OBJ_OPENIF	 			(0x0080u)
dd89bb
#define NT_OBJ_OPENLINK	 			(0x0100u)
dd89bb
#define NT_OBJ_KERNEL_HANDLE 			(0x0200u)
dd89bb
dd89bb
/* duplicate object bits */
dd89bb
#define NT_DUPLICATE_CLOSE_SOURCE		(0x0001u)
dd89bb
#define NT_DUPLICATE_SAME_ACCESS		(0x0002u)
dd89bb
#define NT_DUPLICATE_SAME_ATTRIBUTES		(0x0004u)
dd89bb
dd89bb
/* nt_security_descriptor constants (IFS open specification) */
dd89bb
#define NT_SE_OWNER_DEFAULTED		(int16_t)0x0001
dd89bb
#define NT_SE_GROUP_DEFAULTED		(int16_t)0x0002
dd89bb
#define NT_SE_DACL_PRESENT		(int16_t)0x0004
dd89bb
#define NT_SE_DACL_DEFAULTED		(int16_t)0x0008
dd89bb
#define NT_SE_SACL_PRESENT		(int16_t)0x0010
dd89bb
#define NT_SE_SACL_DEFAULTED		(int16_t)0x0020
dd89bb
#define NT_SE_DACL_AUTO_INHERIT_REQ	(int16_t)0x0100
dd89bb
#define NT_SE_SACL_AUTO_INHERIT_REQ	(int16_t)0x0200
dd89bb
#define NT_SE_DACL_AUTO_INHERITED	(int16_t)0x0400
dd89bb
#define NT_SE_SACL_AUTO_INHERITED	(int16_t)0x0800
dd89bb
#define NT_SE_DACL_PROTECTED		(int16_t)0x1000
dd89bb
#define NT_SE_SACL_PROTECTED		(int16_t)0x2000
dd89bb
#define NT_SE_RM_CONTROL_VALID		(int16_t)0x4000
dd89bb
#define NT_SE_SELF_RELATIVE		(int16_t)0x8000
dd89bb
dd89bb
/* security tracking */
dd89bb
#define NT_SECURITY_TRACKING_STATIC	0
dd89bb
#define NT_SECURITY_TRACKING_DYNAMIC	1
dd89bb
dd89bb
/* predefined security authorities */
dd89bb
#define NT_SECURITY_NULL_SID_AUTHORITY		0
dd89bb
#define NT_SECURITY_WORLD_SID_AUTHORITY		1
dd89bb
#define NT_SECURITY_LOCAL_SID_AUTHORITY		2
dd89bb
#define NT_SECURITY_CREATOR_SID_AUTHORITY	3
dd89bb
#define NT_SECURITY_NON_UNIQUE_AUTHORITY	4
dd89bb
#define NT_SECURITY_NT_AUTHORITY		5
dd89bb
dd89bb
/* token source length */
dd89bb
#define NT_TOKEN_SOURCE_LENGTH			8
dd89bb
dd89bb
dd89bb
typedef struct _nt_unicode_string {
dd89bb
	uint16_t	strlen;
dd89bb
	uint16_t	maxlen;
dd89bb
	uint16_t *	buffer;
dd89bb
} nt_unicode_string;
dd89bb
dd89bb
dd89bb
typedef union _nt_large_integer {
dd89bb
	struct {
dd89bb
		uint32_t	ulow;
dd89bb
		int32_t		ihigh;
dd89bb
	};
dd89bb
	long long		quad;
dd89bb
} nt_large_integer, nt_timeout, nt_filetime, nt_sec_size;
dd89bb
dd89bb
dd89bb
typedef struct _nt_io_status_block {
dd89bb
	union {
dd89bb
		int32_t		status;
dd89bb
		void *		pointer;
dd89bb
	};
dd89bb
	intptr_t		info;
dd89bb
} nt_io_status_block, nt_iosb;
dd89bb
dd89bb
dd89bb
typedef struct _nt_quota_limits {
dd89bb
	size_t			paged_pool_limit;
dd89bb
	size_t			non_paged_pool_limit;
dd89bb
	size_t			minimum_working_set_size;
dd89bb
	size_t			maximum_working_set_size;
dd89bb
	size_t			pagefile_limit;
dd89bb
	nt_large_integer	time_limit;
dd89bb
} nt_quota_limits, nt_ql;
dd89bb
dd89bb
dd89bb
typedef struct _nt_kernel_user_times {
dd89bb
	nt_large_integer	create_time;
dd89bb
	nt_large_integer	exit_time;
dd89bb
	nt_large_integer	kernel_time;
dd89bb
	nt_large_integer	user_time;
dd89bb
} nt_kernel_user_times, nt_kut;
dd89bb
dd89bb
dd89bb
typedef struct _nt_io_counters {
dd89bb
	nt_large_integer	read_operation_count;
dd89bb
	nt_large_integer	write_operation_count;
dd89bb
	nt_large_integer	other_operation_count;
dd89bb
	nt_large_integer	read_transfer_count;
dd89bb
	nt_large_integer	write_transfer_count;
dd89bb
	nt_large_integer	other_transfer_count;
dd89bb
} nt_io_counters;
dd89bb
dd89bb
dd89bb
typedef struct _nt_vm_counters {
dd89bb
	size_t		peak_virtual_size;
dd89bb
	size_t		virtual_size;
dd89bb
	size_t		page_fault_count;
dd89bb
	size_t		peak_working_set_size;
dd89bb
	size_t		working_set_size;
dd89bb
	size_t		quota_peak_paged_pool_usage;
dd89bb
	size_t		quota_paged_pool_usage;
dd89bb
	size_t		quota_peak_non_paged_pool_usage;
dd89bb
	size_t		quota_non_paged_pool_usage;
dd89bb
	size_t		pagefile_usage;
dd89bb
	size_t		peak_pagefile_usage;
dd89bb
} nt_vm_counters;
dd89bb
dd89bb
dd89bb
typedef struct _nt_pooled_usage_and_limits {
dd89bb
	size_t		peak_paged_pool_usage;
dd89bb
	size_t		paged_pool_usage;
dd89bb
	size_t		paged_pool_limit;
dd89bb
	size_t		peak_non_paged_pool_usage;
dd89bb
	size_t		non_paged_pool_usage;
dd89bb
	size_t		non_paged_pool_limit;
dd89bb
	size_t		peak_pagefile_usage;
dd89bb
	size_t		pagefile_usage;
dd89bb
	size_t		pagefile_limit;
dd89bb
} nt_pooled_usage_and_limits, nt_pual;
dd89bb
dd89bb
dd89bb
typedef struct _nt_client_id {
dd89bb
	uintptr_t	process_id;
dd89bb
	uintptr_t	thread_id;
dd89bb
} nt_client_id, nt_cid;
dd89bb
dd89bb
dd89bb
typedef struct _nt_generic_mapping {
dd89bb
	uint32_t	generic_read;
dd89bb
	uint32_t	generic_write;
dd89bb
	uint32_t	generic_execute;
dd89bb
	uint32_t	generic_all;
dd89bb
} nt_generic_mapping, nt_gmap;
dd89bb
dd89bb
dd89bb
typedef struct _nt_security_attributes {
dd89bb
	uint32_t	length;
dd89bb
	void *		security_descriptor;
dd89bb
	int32_t		inherit_handle;
dd89bb
} nt_security_attributes, nt_sa;
dd89bb
dd89bb
dd89bb
typedef struct _nt_guid {
dd89bb
	uint32_t	data1;
dd89bb
	uint16_t	data2;
dd89bb
	uint16_t	data3;
dd89bb
	unsigned char	data4[8];
dd89bb
} nt_guid, nt_uuid;
dd89bb
dd89bb
dd89bb
typedef struct _nt_uuid_vector {
dd89bb
	uint32_t	count;
dd89bb
	nt_uuid *	uuid[];
dd89bb
} nt_uuid_vector;
dd89bb
dd89bb
dd89bb
typedef struct _nt_acl {
dd89bb
	unsigned char	acl_revision;
dd89bb
	unsigned char	sbz_1st;
dd89bb
	uint16_t	acl_size;
dd89bb
	uint16_t	ace_count;
dd89bb
	uint16_t	sbz_2nd;
dd89bb
} nt_acl;
dd89bb
dd89bb
dd89bb
typedef struct _nt_security_descriptor {
dd89bb
	unsigned char	revision;
dd89bb
	unsigned char	sbz_1st;
dd89bb
	uint16_t	control;
dd89bb
	uint32_t	offset_owner;
dd89bb
	uint32_t	offset_group;
dd89bb
	uint32_t	offset_sacl;
dd89bb
	uint32_t	offset_dacl;
dd89bb
} nt_security_descriptor, nt_sd;
dd89bb
dd89bb
dd89bb
typedef struct _nt_security_quality_of_service {
dd89bb
  uint32_t	length;
dd89bb
  int32_t	impersonation_level;
dd89bb
  int32_t 	context_tracking_mode;
dd89bb
  int32_t	effective_only;
dd89bb
} nt_security_quality_of_service, nt_sqos;
dd89bb
dd89bb
dd89bb
typedef struct _nt_sid_identifier_authority {
dd89bb
	unsigned char	value[6];
dd89bb
} nt_sid_identifier_authority;
dd89bb
dd89bb
dd89bb
typedef struct _nt_sid {
dd89bb
	unsigned char			revision;
dd89bb
	unsigned char			sub_authority_count;
dd89bb
	nt_sid_identifier_authority	identifier_authority;
dd89bb
	uint32_t			sub_authority[1];
dd89bb
} nt_sid;
dd89bb
dd89bb
39bb9d
typedef struct _nt_sid_os {
39bb9d
	unsigned char			revision;
39bb9d
	unsigned char			sub_authority_count;
39bb9d
	nt_sid_identifier_authority	identifier_authority;
39bb9d
	uint32_t			sub_authority[2];
39bb9d
} nt_sid_os;
39bb9d
39bb9d
39bb9d
typedef struct _nt_sid_user {
39bb9d
	unsigned char			revision;
39bb9d
	unsigned char			sub_authority_count;
39bb9d
	nt_sid_identifier_authority	identifier_authority;
39bb9d
	uint32_t			sub_authority[5];
39bb9d
} nt_sid_user;
39bb9d
39bb9d
39bb9d
typedef struct _nt_sid_any {
39bb9d
	unsigned char			revision;
39bb9d
	unsigned char			sub_authority_count;
39bb9d
	nt_sid_identifier_authority	identifier_authority;
39bb9d
	uint32_t			sub_authority[15];
39bb9d
} nt_sid_any;
39bb9d
39bb9d
dd89bb
typedef struct _nt_sid_and_attributes {
dd89bb
	nt_sid *	sid;
dd89bb
	uint32_t	attributes;
dd89bb
} nt_sid_and_attributes;
dd89bb
dd89bb
dd89bb
typedef struct _nt_token_user {
dd89bb
	nt_sid_and_attributes	user;
dd89bb
} nt_token_user;
dd89bb
dd89bb
dd89bb
typedef struct _nt_token_owner {
dd89bb
	nt_sid *	owner;
dd89bb
} nt_token_owner;
dd89bb
dd89bb
dd89bb
typedef struct _nt_token_primary_group {
dd89bb
	nt_sid *	primary_group;
dd89bb
} nt_token_primary_group;
dd89bb
dd89bb
dd89bb
typedef struct _nt_token_groups {
dd89bb
	uint32_t		group_count;
dd89bb
	nt_sid_and_attributes	groups[];
dd89bb
} nt_token_groups;
dd89bb
dd89bb
dd89bb
typedef struct _nt_token_default_dacl {
dd89bb
	nt_acl *	default_dacl;
dd89bb
} nt_token_default_dacl;
dd89bb
dd89bb
dd89bb
typedef struct _nt_luid {
dd89bb
	uint32_t	low;
dd89bb
	int32_t		high;
dd89bb
} nt_luid;
dd89bb
dd89bb
dd89bb
typedef struct _nt_token_origin {
dd89bb
	nt_luid		originating_logon_session;
dd89bb
} nt_token_origin;
dd89bb
dd89bb
dd89bb
typedef struct _nt_token_source {
dd89bb
	char		source_name[NT_TOKEN_SOURCE_LENGTH];
dd89bb
	nt_luid		source_identifier;
dd89bb
} nt_token_source;
dd89bb
dd89bb
dd89bb
typedef struct _nt_luid_and_attributes {
dd89bb
	nt_luid		luid;
dd89bb
	uint32_t	attributes;
dd89bb
} nt_luid_and_attributes;
dd89bb
dd89bb
dd89bb
typedef struct _nt_token_privileges {
dd89bb
	uint32_t		privilege_count;
dd89bb
	nt_luid_and_attributes	privileges[];
dd89bb
} nt_token_privileges;
dd89bb
dd89bb
dd89bb
typedef struct _nt_object_attributes {
dd89bb
	uint32_t		len;
dd89bb
	void *			root_dir;
dd89bb
	nt_unicode_string *	obj_name;
dd89bb
	uint32_t		obj_attr;
dd89bb
	nt_security_descriptor *sec_desc;
dd89bb
	nt_sqos *		sec_qos;
dd89bb
} nt_object_attributes, nt_oa;
dd89bb
dd89bb
dd89bb
typedef struct _nt_object_basic_information {
dd89bb
	uint32_t		attributes;
dd89bb
	uint32_t		granted_access;
dd89bb
	uint32_t		handle_count;
dd89bb
	uint32_t		pointer_count;
dd89bb
	uint32_t		paged_pool_usage;
dd89bb
	uint32_t		non_paged_pool_usage;
dd89bb
	uint32_t		reserved[3];
dd89bb
	uint32_t		name_information_length;
dd89bb
	uint32_t		type_information_length;
dd89bb
	uint32_t		security_descriptor_length;
dd89bb
	nt_large_integer	create_time;
dd89bb
} nt_object_basic_information;
dd89bb
dd89bb
dd89bb
typedef struct _nt_object_name_information {
dd89bb
	nt_unicode_string	name;
dd89bb
} nt_object_name_information;
dd89bb
dd89bb
dd89bb
dd89bb
typedef struct _nt_object_handle_information {
dd89bb
	unsigned char	inherit;
dd89bb
	unsigned char	protect_from_close;
dd89bb
} nt_object_handle_information, nt_ohio;
dd89bb
dd89bb
f7c707
typedef struct _nt_object_directory_information {
dd89bb
	nt_unicode_string	object_name;
dd89bb
	nt_unicode_string	object_type_name;
f7c707
} nt_object_directory_information, nt_objdirent;
dd89bb
dd89bb
661c27
typedef struct _nt_ipc_object_directory_name {
661c27
	wchar16_t		base_named_objects[17];
661c27
	wchar16_t		backslash;
661c27
	wchar16_t		prefix[6];
d5e229
	wchar16_t		uscore;
d5e229
	wchar16_t		guid[36];
661c27
} nt_ipc_object_directory_name, nt_ipc_objdir_name;
661c27
661c27
500a04
typedef void __stdcall nt_io_apc_routine(
dd89bb
	void *			apc_context,
dd89bb
	nt_io_status_block *	io_status_block,
dd89bb
	uint32_t		reserved);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall ntapi_zw_query_object(
dd89bb
	__in	void *			handle,
dd89bb
	__in	nt_object_info_class	obj_info_class,
dd89bb
	__out	void *			obj_info,
dd89bb
	__in	size_t			obj_info_length,
dd89bb
	__out	uint32_t *		returned_length		__optional);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall ntapi_zw_set_information_object(
dd89bb
	__in	void *			handle,
dd89bb
	__in	nt_object_info_class	obj_info_class,
dd89bb
	__in	void *			obj_info,
dd89bb
	__in	size_t			obj_info_length);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall ntapi_zw_duplicate_object(
dd89bb
	__in	void *		hprocess_src,
dd89bb
	__in	void *		handle_src,
dd89bb
	__in	void *		hprocess_dst,
dd89bb
	__out	void **		handle_dst	__optional,
dd89bb
	__in	uint32_t	desired_access,
dd89bb
	__in	uint32_t	attributes,
dd89bb
	__in	uint32_t	options);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall ntapi_zw_make_temporary_object(
dd89bb
	__in	void *	handle);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall ntapi_zw_close(
dd89bb
	__in	void *	handle);
dd89bb
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall ntapi_zw_query_security_object(
dd89bb
	__in	void *				handle,
dd89bb
	__in	nt_security_information		security_info,
dd89bb
	__out	nt_security_descriptor *	security_descriptor,
dd89bb
	__in	size_t				security_descriptor_length,
dd89bb
	__out	size_t *			returned_length);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall ntapi_zw_set_security_object(
dd89bb
	__in	void *				handle,
dd89bb
	__in	nt_security_information		security_info,
dd89bb
	__out	nt_security_descriptor *	security_descriptor);
dd89bb
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall ntapi_zw_create_directory_object(
dd89bb
	__out	void **			directory_handle,
dd89bb
	__in	uint32_t		desired_access,
dd89bb
	__in	nt_object_attributes *	obj_attr);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall ntapi_zw_open_directory_object(
dd89bb
	__out	void **			directory_handle,
dd89bb
	__in	uint32_t		desired_access,
dd89bb
	__in	nt_object_attributes *	obj_attr);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall ntapi_zw_query_directory_object(
dd89bb
	__in		void *		directory_handle,
dd89bb
	__out		void *		buffer,
dd89bb
	__in		size_t		buffer_length,
dd89bb
	__in		int32_t		return_single_entry,
dd89bb
	__in		int32_t		return_scan,
dd89bb
	__in_out	uint32_t *	context,
2c5bbc
	__out		uint32_t *	returned_length);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall ntapi_zw_create_symbolic_link_object(
dd89bb
	__out	void **			symbolic_link_handle,
dd89bb
	__in	uint32_t		desired_access,
dd89bb
	__in	nt_object_attributes *	obj_attr,
dd89bb
	__in	nt_unicode_string *	target_name);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall ntapi_zw_open_symbolic_link_object(
dd89bb
	__out	void **			symbolic_link_handle,
dd89bb
	__in	uint32_t		desired_access,
dd89bb
	__in	nt_object_attributes *	obj_attr);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall ntapi_zw_query_symbolic_link_object(
dd89bb
	__in		void *			symbolic_link_handle,
dd89bb
	__in_out	nt_unicode_string *	target_name,
dd89bb
	__out		size_t *		returned_length);
dd89bb
dd89bb
/* extension functions */
661c27
typedef int32_t __stdcall ntapi_tt_open_ipc_object_directory(
661c27
	__out	void **			hdir,
661c27
	__in	uint32_t		desired_access,
661c27
	__in	const wchar16_t		prefix[6],
ae515f
	__in	const nt_guid *		guid);
661c27
661c27
typedef int32_t __stdcall ntapi_tt_create_ipc_object_directory_entry(
661c27
	__out	void **			hentry,
661c27
	__in	uint32_t		desired_access,
661c27
	__in	void *			hdir,
661c27
	__in	void *			htarget,
661c27
	__in	nt_unicode_string *	target_name,
661c27
	__in	uint32_t		key);
661c27
6729c8
typedef int32_t __stdcall ntapi_tt_open_dev_object_directory(
6729c8
	__out	void **			hdir,
6729c8
	__in	uint32_t		desired_access,
6729c8
	__in	const wchar16_t		prefix[6],
6729c8
	__in	const nt_guid *		ipc_guid);
6729c8
6729c8
typedef int32_t __stdcall ntapi_tt_create_dev_object_directory_entry(
6729c8
	__out	void **			hentry,
6729c8
	__in	uint32_t		desired_access,
6729c8
	__in	void *			hdir,
6729c8
	__in	void *			htarget,
6729c8
	__in	nt_unicode_string *	target_name,
6729c8
	__in	const nt_guid *		dev_guid);
6729c8
dd89bb
typedef int32_t __stdcall ntapi_tt_create_keyed_object_directory(
dd89bb
	__out	void **			hdir,
dd89bb
	__in	uint32_t		desired_access,
d5e229
	__in	void *			hparent,
dd89bb
	__in	uint32_t		key);
dd89bb
dd89bb
typedef int32_t __stdcall ntapi_tt_open_keyed_object_directory(
dd89bb
	__out	void **			hdir,
dd89bb
	__in	uint32_t		desired_access,
d5e229
	__in	void *			hparent,
dd89bb
	__in	uint32_t		key);
dd89bb
dd89bb
typedef int32_t __stdcall ntapi_tt_create_keyed_object_directory_entry(
dd89bb
	__out	void **			hentry,
dd89bb
	__in	uint32_t		desired_access,
dd89bb
	__in	void *			hdir,
dd89bb
	__in	void *			htarget,
dd89bb
	__in	nt_unicode_string *	target_name,
dd89bb
	__in	uint32_t		key);
dd89bb
8ca63f
typedef int32_t __stdcall ntapi_tt_keyed_object_to_key(
8ca63f
	__in	void *			hentry,
8ca63f
	__out	uint32_t *		key,
8ca63f
	__out	void *			buffer,
8ca63f
	__in	size_t			buflen);
8ca63f
e7235f
typedef void    __stdcall ntapi_tt_sid_copy(
e7235f
	__out	nt_sid *		dst,
e7235f
	__in	const nt_sid *		src);
e7235f
e7235f
227c15
typedef int32_t __stdcall ntapi_tt_sid_compare(
227c15
	__in	const nt_sid *		sida,
227c15
	__in	const nt_sid *		sidb);
227c15
227c15
dd89bb
#endif