Blame include/ntapi/nt_debug.h

b2a33c
#ifndef _NT_DEBUG_H_
b2a33c
#define _NT_DEBUG_H_
b2a33c
b2a33c
#include "nt_abi.h"
b2a33c
#include "nt_object.h"
b2a33c
#include "nt_exception.h"
b2a33c
b2a33c
b2a33c
/* debug access rights */
b2a33c
#define NT_DEBUG_SPECIFIC_RIGHTS	(0xf)
b2a33c
#define NT_DEBUG_ALL_ACCESS		(NT_SEC_STANDARD_RIGHTS_ALL \
b2a33c
					 | NT_DEBUG_SPECIFIC_RIGHTS)
b2a33c
b2a33c
/* debug flags */
b2a33c
#define NT_DEBUG_DETACH_ON_EXIT		(0x0)
b2a33c
#define NT_DEBUG_KILL_ON_EXIT		(0x1)
b2a33c
b2a33c
b2a33c
/* debug object information classes */
b2a33c
#define NT_DEBUG_OBJECT_FLAGS_INFO	(0X1)
b2a33c
b2a33c
b2a33c
/* debug filter mask */
b2a33c
#define NT_DBG_FLTR_ERROR_LEVEL		(0x0)
b2a33c
#define NT_DBG_FLTR_WARNING_LEVEL	(0x1)
b2a33c
#define NT_DBG_FLTR_TRACE_LEVEL		(0x2)
b2a33c
#define NT_DBG_FLTR_INFO_LEVEL		(0x3)
b2a33c
#define NT_DBG_FLTR_MASK		(0x8000000)
b2a33c
b2a33c
b2a33c
/* debug states */
b2a33c
typedef enum _nt_dbg_state {
b2a33c
	NT_DBG_STATE_IDLE,
b2a33c
	NT_DBG_STATE_REPLY_PENDING,
b2a33c
b2a33c
	NT_DBG_STATE_CREATE_THREAD,
b2a33c
	NT_DBG_STATE_CREATE_PROCESS,
b2a33c
b2a33c
	NT_DBG_STATE_EXIT_THREAD,
b2a33c
	NT_DBG_STATE_EXIT_PROCESS,
b2a33c
b2a33c
	NT_DBG_STATE_EXCEPTION,
b2a33c
	NT_DBG_STATE_BREAKPOINT,
b2a33c
	NT_DBG_STATE_SINGLE_STEP,
b2a33c
b2a33c
	NT_DBG_STATE_DLL_LOAD,
b2a33c
	NT_DBG_STATE_DLL_UNLOAD,
b2a33c
} nt_dbg_state;
b2a33c
b2a33c
b2a33c
/* debug filters */
b2a33c
typedef enum _nt_dbg_fltr_type {
b2a33c
	NT_DBG_FLTR_SYSTEM_ID,
b2a33c
	NT_DBG_FLTR_SMSS_ID,
b2a33c
	NT_DBG_FLTR_SETUP_ID,
b2a33c
	NT_DBG_FLTR_NTFS_ID,
b2a33c
	NT_DBG_FLTR_FSTUB_ID,
b2a33c
	NT_DBG_FLTR_CRASHDUMP_ID,
b2a33c
	NT_DBG_FLTR_CDAUDIO_ID,
b2a33c
	NT_DBG_FLTR_CDROM_ID,
b2a33c
	NT_DBG_FLTR_CLASSPNP_ID,
b2a33c
	NT_DBG_FLTR_DISK_ID,
b2a33c
	NT_DBG_FLTR_REDBOOK_ID,
b2a33c
	NT_DBG_FLTR_STORPROP_ID,
b2a33c
	NT_DBG_FLTR_SCSIPORT_ID,
b2a33c
	NT_DBG_FLTR_SCSIMINIPORT_ID,
b2a33c
	NT_DBG_FLTR_CONFIG_ID,
b2a33c
	NT_DBG_FLTR_I8042PRT_ID,
b2a33c
	NT_DBG_FLTR_SERMOUSE_ID,
b2a33c
	NT_DBG_FLTR_LSERMOUS_ID,
b2a33c
	NT_DBG_FLTR_KBDHID_ID,
b2a33c
	NT_DBG_FLTR_MOUHID_ID,
b2a33c
	NT_DBG_FLTR_KBDCLASS_ID,
b2a33c
	NT_DBG_FLTR_MOUCLASS_ID,
b2a33c
	NT_DBG_FLTR_TWOTRACK_ID,
b2a33c
	NT_DBG_FLTR_WMILIB_ID,
b2a33c
	NT_DBG_FLTR_ACPI_ID,
b2a33c
	NT_DBG_FLTR_AMLI_ID,
b2a33c
	NT_DBG_FLTR_HALIA64_ID,
b2a33c
	NT_DBG_FLTR_VIDEO_ID,
b2a33c
	NT_DBG_FLTR_SVCHOST_ID,
b2a33c
	NT_DBG_FLTR_VIDEOPRT_ID,
b2a33c
	NT_DBG_FLTR_TCPIP_ID,
b2a33c
	NT_DBG_FLTR_DMSYNTH_ID,
b2a33c
	NT_DBG_FLTR_NTOSPNP_ID,
b2a33c
	NT_DBG_FLTR_FASTFAT_ID,
b2a33c
	NT_DBG_FLTR_SAMSS_ID,
b2a33c
	NT_DBG_FLTR_PNPMGR_ID,
b2a33c
	NT_DBG_FLTR_NETAPI_ID,
b2a33c
	NT_DBG_FLTR_SCSERVER_ID,
b2a33c
	NT_DBG_FLTR_SCCLIENT_ID,
b2a33c
	NT_DBG_FLTR_SERIAL_ID,
b2a33c
	NT_DBG_FLTR_SERENUM_ID,
b2a33c
	NT_DBG_FLTR_UHCD_ID,
b2a33c
	NT_DBG_FLTR_RPCPROXY_ID,
b2a33c
	NT_DBG_FLTR_AUTOCHK_ID,
b2a33c
	NT_DBG_FLTR_DCOMSS_ID,
b2a33c
	NT_DBG_FLTR_UNIMODEM_ID,
b2a33c
	NT_DBG_FLTR_SIS_ID,
b2a33c
	NT_DBG_FLTR_FLTMGR_ID,
b2a33c
	NT_DBG_FLTR_WMICORE_ID,
b2a33c
	NT_DBG_FLTR_BURNENG_ID,
b2a33c
	NT_DBG_FLTR_IMAPI_ID,
b2a33c
	NT_DBG_FLTR_SXS_ID,
b2a33c
	NT_DBG_FLTR_FUSION_ID,
b2a33c
	NT_DBG_FLTR_IDLETASK_ID,
b2a33c
	NT_DBG_FLTR_SOFTPCI_ID,
b2a33c
	NT_DBG_FLTR_TAPE_ID,
b2a33c
	NT_DBG_FLTR_MCHGR_ID,
b2a33c
	NT_DBG_FLTR_IDEP_ID,
b2a33c
	NT_DBG_FLTR_PCIIDE_ID,
b2a33c
	NT_DBG_FLTR_FLOPPY_ID,
b2a33c
	NT_DBG_FLTR_FDC_ID,
b2a33c
	NT_DBG_FLTR_TERMSRV_ID,
b2a33c
	NT_DBG_FLTR_W32TIME_ID,
b2a33c
	NT_DBG_FLTR_PREFETCHER_ID,
b2a33c
	NT_DBG_FLTR_RSFILTER_ID,
b2a33c
	NT_DBG_FLTR_FCPORT_ID,
b2a33c
	NT_DBG_FLTR_PCI_ID,
b2a33c
	NT_DBG_FLTR_DMIO_ID,
b2a33c
	NT_DBG_FLTR_DMCONFIG_ID,
b2a33c
	NT_DBG_FLTR_DMADMIN_ID,
b2a33c
	NT_DBG_FLTR_WSOCKTRANSPORT_ID,
b2a33c
	NT_DBG_FLTR_VSS_ID,
b2a33c
	NT_DBG_FLTR_PNPMEM_ID,
b2a33c
	NT_DBG_FLTR_PROCESSOR_ID,
b2a33c
	NT_DBG_FLTR_DMSERVER_ID,
b2a33c
	NT_DBG_FLTR_SR_ID,
b2a33c
	NT_DBG_FLTR_INFINIBAND_ID,
b2a33c
	NT_DBG_FLTR_IHVDRIVER_ID,
b2a33c
	NT_DBG_FLTR_IHVVIDEO_ID,
b2a33c
	NT_DBG_FLTR_IHVAUDIO_ID,
b2a33c
	NT_DBG_FLTR_IHVNETWORK_ID,
b2a33c
	NT_DBG_FLTR_IHVSTREAMING_ID,
b2a33c
	NT_DBG_FLTR_IHVBUS_ID,
b2a33c
	NT_DBG_FLTR_HPS_ID,
b2a33c
	NT_DBG_FLTR_RTLTHREADPOOL_ID,
b2a33c
	NT_DBG_FLTR_LDR_ID,
b2a33c
	NT_DBG_FLTR_TCPIP6_ID,
b2a33c
	NT_DBG_FLTR_ISAPNP_ID,
b2a33c
	NT_DBG_FLTR_SHPC_ID,
b2a33c
	NT_DBG_FLTR_STORPORT_ID,
b2a33c
	NT_DBG_FLTR_STORMINIPORT_ID,
b2a33c
	NT_DBG_FLTR_PRINTSPOOLER_ID,
b2a33c
	NT_DBG_FLTR_VSSDYNDISK_ID,
b2a33c
	NT_DBG_FLTR_VERIFIER_ID,
b2a33c
	NT_DBG_FLTR_VDS_ID,
b2a33c
	NT_DBG_FLTR_VDSBAS_ID,
b2a33c
	NT_DBG_FLTR_VDSDYN_ID,
b2a33c
	NT_DBG_FLTR_VDSDYNDR_ID,
b2a33c
	NT_DBG_FLTR_VDSLDR_ID,
b2a33c
	NT_DBG_FLTR_VDSUTIL_ID,
b2a33c
	NT_DBG_FLTR_DFRGIFC_ID,
b2a33c
	NT_DBG_FLTR_DEFAULT_ID,
b2a33c
	NT_DBG_FLTR_MM_ID,
b2a33c
	NT_DBG_FLTR_DFSC_ID,
b2a33c
	NT_DBG_FLTR_WOW64_ID,
b2a33c
	NT_DBG_FLTR_ALPC_ID,
b2a33c
	NT_DBG_FLTR_WDI_ID,
b2a33c
	NT_DBG_FLTR_PERFLIB_ID,
b2a33c
	NT_DBG_FLTR_KTM_ID,
b2a33c
	NT_DBG_FLTR_IOSTRESS_ID,
b2a33c
	NT_DBG_FLTR_HEAP_ID,
b2a33c
	NT_DBG_FLTR_WHEA_ID,
b2a33c
	NT_DBG_FLTR_USERGDI_ID,
b2a33c
	NT_DBG_FLTR_MMCSS_ID,
b2a33c
	NT_DBG_FLTR_TPM_ID,
b2a33c
	NT_DBG_FLTR_THREADORDER_ID,
b2a33c
	NT_DBG_FLTR_ENVIRON_ID,
b2a33c
	NT_DBG_FLTR_EMS_ID,
b2a33c
	NT_DBG_FLTR_WDT_ID,
b2a33c
	NT_DBG_FLTR_FVEVOL_ID,
b2a33c
	NT_DBG_FLTR_NDIS_ID,
b2a33c
	NT_DBG_FLTR_NVCTRACE_ID,
b2a33c
	NT_DBG_FLTR_LUAFV_ID,
b2a33c
	NT_DBG_FLTR_APPCOMPAT_ID,
b2a33c
	NT_DBG_FLTR_USBSTOR_ID,
b2a33c
	NT_DBG_FLTR_SBP2PORT_ID,
b2a33c
	NT_DBG_FLTR_COVERAGE_ID,
b2a33c
	NT_DBG_FLTR_CACHEMGR_ID,
b2a33c
	NT_DBG_FLTR_MOUNTMGR_ID,
b2a33c
	NT_DBG_FLTR_CFR_ID,
b2a33c
	NT_DBG_FLTR_TXF_ID,
b2a33c
	NT_DBG_FLTR_KSECDD_ID,
b2a33c
	NT_DBG_FLTR_FLTREGRESS_ID,
b2a33c
	NT_DBG_FLTR_MPIO_ID,
b2a33c
	NT_DBG_FLTR_MSDSM_ID,
b2a33c
	NT_DBG_FLTR_UDFS_ID,
b2a33c
	NT_DBG_FLTR_PSHED_ID,
b2a33c
	NT_DBG_FLTR_STORVSP_ID,
b2a33c
	NT_DBG_FLTR_LSASS_ID,
b2a33c
	NT_DBG_FLTR_SSPICLI_ID,
b2a33c
	NT_DBG_FLTR_CNG_ID,
b2a33c
	NT_DBG_FLTR_EXFAT_ID,
b2a33c
	NT_DBG_FLTR_FILETRACE_ID,
b2a33c
	NT_DBG_FLTR_XSAVE_ID,
b2a33c
	NT_DBG_FLTR_SE_ID,
b2a33c
	NT_DBG_FLTR_DRIVEEXTENDER_ID,
b2a33c
	NT_DBG_FLTR_POWER_ID,
b2a33c
	NT_DBG_FLTR_CRASHDUMPXHCI_ID,
b2a33c
	NT_DBG_FLTR_GPIO_ID,
b2a33c
	NT_DBG_FLTR_REFS_ID,
b2a33c
	NT_DBG_FLTR_WER_ID,
b2a33c
	NT_DBG_FLTR_CAPIMG_ID,
b2a33c
	NT_DBG_FLTR_VPCI_ID,
b2a33c
	NT_DBG_FLTR_STORAGECLASSMEMORY_ID,
b2a33c
	NT_DBG_FLTR_ENDOFTABLE_ID,
b2a33c
} nt_dbg_fltr_type;
b2a33c
b2a33c
bf05bd
/* execution flow masks */
bf05bd
#define NT_DBG_FLOW_MASK_IDLE			(1 << NT_DBG_STATE_IDLE)
bf05bd
#define NT_DBG_FLOW_MASK_REPLY_PENDING		(1 << NT_DBG_STATE_REPLY_PENDING)
bf05bd
bf05bd
#define NT_DBG_FLOW_MASK_CREATE_THREAD		(1 << NT_DBG_STATE_CREATE_THREAD)
bf05bd
#define NT_DBG_FLOW_MASK_CREATE_PROCESS		(1 << NT_DBG_STATE_CREATE_PROCESS)
bf05bd
bf05bd
#define NT_DBG_FLOW_MASK_EXIT_THREAD		(1 << NT_DBG_STATE_EXIT_THREAD)
bf05bd
#define NT_DBG_FLOW_MASK_EXIT_PROCESS		(1 << NT_DBG_STATE_EXIT_PROCESS)
bf05bd
bf05bd
#define NT_DBG_FLOW_MASK_EXCEPTION		(1 << NT_DBG_STATE_EXCEPTION)
bf05bd
#define NT_DBG_FLOW_MASK_BREAKPOINT		(1 << NT_DBG_STATE_BREAKPOINT)
bf05bd
#define NT_DBG_FLOW_MASK_SINGLE_STEP		(1 << NT_DBG_STATE_SINGLE_STEP)
bf05bd
bf05bd
#define NT_DBG_FLOW_MASK_DLL_LOAD		(1 << NT_DBG_STATE_DLL_LOAD)
bf05bd
#define NT_DBG_FLOW_MASK_DLL_UNLOAD		(1 << NT_DBG_STATE_DLL_UNLOAD)
bf05bd
c155d9
#define NT_DBG_FLOW_MASK_EXECUTION_TREE		(0x10000000)
c155d9
#define NT_DBG_FLOW_MASK_DETACH_AND_CLOSE	(0x20000000)
c155d9
bf05bd
b2a33c
/* debug events */
b2a33c
typedef struct _nt_dbg_km_thread_exit {
b2a33c
	int32_t			exit_status;
b2a33c
} nt_dbg_km_thread_exit;
b2a33c
b2a33c
b2a33c
typedef struct _nt_dbg_km_process_exit {
b2a33c
	int32_t			exit_status;
b2a33c
} nt_dbg_km_process_exit;
b2a33c
b2a33c
b2a33c
typedef struct _nt_dbg_km_load_module {
b2a33c
	void *			image_handle;
b2a33c
	void *			image_base;
b2a33c
	uint32_t		dbginfo_offset;
b2a33c
	uint32_t		dbginfo_size;
b2a33c
} nt_dbg_km_load_module;
b2a33c
b2a33c
b2a33c
typedef struct _nt_dbg_km_unload_module {
b2a33c
	void *			image_base;
b2a33c
} nt_dbg_km_unload_module;
b2a33c
b2a33c
b2a33c
typedef struct _nt_dbg_km_exception {
b2a33c
	nt_exception_record	exception_record;
b2a33c
	uint32_t		exception_priority;
b2a33c
} nt_dbg_km_exception;
b2a33c
b2a33c
85132c
typedef struct _nt_dbg_km_thread_info {
85132c
	uint32_t		subsystem_key;
85132c
	void *			start_address;
85132c
} nt_dbg_km_thread_info;
85132c
85132c
b2a33c
typedef struct _nt_dbg_ui_thread_info {
85132c
	void *			hthread;
b2a33c
	uint32_t		subsystem_key;
b2a33c
	void *			start_address;
b2a33c
} nt_dbg_ui_thread_info;
b2a33c
b2a33c
85132c
typedef struct _nt_dbg_km_process_info {
e91e74
	uint32_t		subsystem_key;
85132c
	void *			image_handle;
85132c
	void *			image_base;
85132c
	uint32_t		dbginfo_offset;
85132c
	uint32_t		dbginfo_size;
85132c
	nt_dbg_km_thread_info	thread_info;
85132c
} nt_dbg_km_process_info;
85132c
85132c
b2a33c
typedef struct _nt_dbg_ui_process_info {
85132c
	void *			hprocess;
85132c
	void *			hthread;
e91e74
	uint32_t		subsystem_key;
b2a33c
	void *			image_handle;
b2a33c
	void *			image_base;
b2a33c
	uint32_t		dbginfo_offset;
b2a33c
	uint32_t		dbginfo_size;
85132c
	nt_dbg_km_thread_info	thread_info;
b2a33c
} nt_dbg_ui_process_info;
b2a33c
b2a33c
b2a33c
typedef struct _nt_dbg_wait_state_change {
b2a33c
	nt_dbg_state		state;
b2a33c
	nt_cid			cid;
b2a33c
	union {
b2a33c
		nt_dbg_km_thread_exit	thread_exit;
b2a33c
		nt_dbg_km_process_exit	process_exit;
b2a33c
		nt_dbg_km_load_module	load_module;
b2a33c
		nt_dbg_km_unload_module	unload_module;
b2a33c
		nt_dbg_km_exception	exception_info;
b2a33c
		nt_dbg_ui_thread_info	thread_info;
b2a33c
		nt_dbg_ui_process_info	process_info;
8918bd
	} _u;
b2a33c
} nt_dbg_wait_state_change;
b2a33c
b2a33c
b2a33c
/* debug interfaces */
b2a33c
typedef int32_t __stdcall ntapi_zw_create_debug_object(
b2a33c
	__out	void **		hdbobj,
b2a33c
	__in	uint32_t	access_mask,
b2a33c
	__in	nt_oa *		oa,
b2a33c
	__in	uint32_t	flags);
b2a33c
b2a33c
typedef int32_t __stdcall ntapi_zw_debug_active_process(
b2a33c
	__in	void *		hprocess,
b2a33c
	__in	void *		hdbgobj);
b2a33c
b2a33c
typedef int32_t __stdcall ntapi_zw_remove_process_debug(
b2a33c
	__in	void *		hprocess,
b2a33c
	__in	void *		hdbgobj);
b2a33c
b2a33c
typedef int32_t __stdcall ntapi_zw_wait_for_debug_event(
b2a33c
	__in	void *				hdbgobj,
b2a33c
	__in	int32_t				alertable,
b2a33c
	__in	nt_timeout *			timeout,
b2a33c
	__out	nt_dbg_wait_state_change *	state);
b2a33c
b2a33c
typedef int32_t __stdcall ntapi_zw_debug_continue(
b2a33c
	__in	void *		hdbgobj,
b2a33c
	__in	nt_cid *	cid,
b2a33c
	__in	int32_t		status);
b2a33c
b2a33c
typedef int32_t __stdcall ntapi_zw_set_information_debug_object(
b2a33c
	__in	void *		hdbgobj,
b2a33c
	__in	int32_t		dbg_info_class,
b2a33c
	__in	void *		dbg_info,
b2a33c
	__in	size_t		dbg_info_length,
b2a33c
	__out	uint32_t *	dbg_return_length);
b2a33c
b2a33c
typedef int32_t __stdcall ntapi_zw_query_debug_filter_state(
b2a33c
	__in	int32_t		dbg_component_id,
b2a33c
	__in	uint32_t	dbg_level);
b2a33c
b2a33c
typedef int32_t __stdcall ntapi_zw_set_debug_filter_state(
b2a33c
	__in	int32_t		dbg_component_id,
b2a33c
	__in	uint32_t	dbg_level,
b2a33c
	__in	int32_t		dbg_state);
b2a33c
e20eeb
/* extension interfaces */
d4344e
typedef int32_t __stdcall ntapi_tt_debug_create_object(
e20eeb
	__out	void **		hdbobj,
e20eeb
	__in	uint32_t	flags);
e20eeb
d4344e
typedef int32_t __stdcall ntapi_tt_debug_create_attach_object(
e20eeb
	__out	void **		hdbgobj,
e20eeb
	__in	void *		hprocess,
e20eeb
	__in	uint32_t	flags);
e20eeb
bf05bd
typedef int32_t	__stdcall ntapi_tt_debug_execution_flow(
bf05bd
	__in	void *		hdbgobj,
dce12f
	__in	void *		hprocess,
bf05bd
	__in	void *		hserver,
bf05bd
	__in	void *		hlogfile,
bf05bd
	__in	uint32_t	evtmask,
bf05bd
	__in	uint64_t *	nevents);
bf05bd
2a7f67
typedef int32_t __stdcall ntapi_tt_debug_break_process(
2a7f67
	__in	void *		hprocess,
2a7f67
	__out	void **		hthread,
2a7f67
	__out	nt_cid *	cid);
2a7f67
b2a33c
#endif