Blob Blame History Raw
#ifndef _NT_PNP_H_
#define _NT_PNP_H_

#include "nt_abi.h"
#include "nt_object.h"

typedef enum _nt_latency_time {
	NT_LT_DONT_CARE,
	NT_LT_LOWEST_LATENCY
} nt_latency_time;


typedef enum _nt_device_power_state {
	NT_POWER_DEVICE_UNSPECIFIED,
	NT_POWER_DEVICE_D0,
	NT_POWER_DEVICE_D1,
	NT_POWER_DEVICE_D2,
	NT_POWER_DEVICE_D3
} nt_device_power_state;


typedef enum _nt_power_action {
	NT_POWER_ACTION_NONE,
	NT_POWER_ACTION_RESERVED,
	NT_POWER_ACTION_SLEEP,
	NT_POWER_ACTION_HIBERNATE,
	NT_POWER_ACTION_SHUTDOWN,
	NT_POWER_ACTION_SHUTDOWN_RESET,
	NT_POWER_ACTION_SHUTDOWN_OFF,
} nt_power_action;


typedef enum _nt_system_power_state {
	NT_POWER_SYSTEM_UNSPECIFIED,
	NT_POWER_SYSTEM_WORKING,
	NT_POWER_SYSTEM_SLEEPING1,
	NT_POWER_SYSTEM_SLEEPING2,
	NT_POWER_SYSTEM_SLEEPING3,
	NT_POWER_SYSTEM_HIBERNATE,
	NT_POWER_SYSTEM_SHUTDOWN
} nt_system_power_state;


typedef enum _nt_power_info_level {
	NT_SYSTEM_POWER_POLICY_AC,
	NT_SYSTEM_POWER_POLICY_DC,
	NT_VERIFY_SYSTEM_POLICY_AC,
	NT_VERIFY_SYSTEM_POLICY_DC,
	NT_SYSTEM_POWER_CAPABILITIES,
	NT_SYSTEM_BATTERY_STATE,
	NT_SYSTEM_POWER_STATE_HANDLER,
	NT_PROCESSOR_STATE_HANDLER,
	NT_SYSTEM_POWER_POLICY_CURRENT,
	NT_ADMINISTRATOR_POWER_POLICY,
	NT_SYSTEM_RESERVE_HIBER_FILE,
	NT_PROCESSOR_INFORMATION,
	NT_SYSTEM_POWER_INFORMATION
} nt_power_info_level;


/* execution state bits */
#define NT_ES_SYSTEM_REQUIRED		(0x00000001)
#define NT_ES_DISPLAY_REQUIRED		(0x00000002)
#define NT_ES_USER_PRESENT		(0x00000004)
#define NT_ES_AWAYMODE_REQUIRED		(0x00000040)
#define NT_ES_CONTINUOUS		(0x80000000)


/* power action flag bits */
#define NT_POWER_ACTION_QUERY_ALLOWED	(0x00000001)
#define NT_POWER_ACTION_UI_ALLOWED	(0x00000002)
#define NT_POWER_ACTION_OVERRIDE_APPS	(0x00000004)
#define NT_POWER_ACTION_LIGHTEST_FIRST	(0x10000000)
#define NT_POWER_ACTION_LOCK_CONSOLE	(0x20000000)
#define NT_POWER_ACTION_DISABLE_WAKES	(0x40000000)
#define NT_POWER_ACTION_CRITICAL	(0x80000000)


/* power state event codes */
#define NT_POWER_LEVEL_USER_NOTIFY_TEXT		(0x00000001)
#define NT_POWER_LEVEL_USER_NOTIFY_SOUND	(0x00000002)
#define NT_POWER_LEVEL_USER_NOTIFY_EXEC		(0x00000004)
#define NT_POWER_USER_NOTIFY_BUTTON		(0x00000008)
#define NT_POWER_USER_NOTIFY_SHUTDOWN		(0x00000010)
#define NT_POWER_FORCE_TRIGGER_RESET		(0x80000000)

/* system power policy */
#define NT_NUM_DISCHARGE_POLICIES		(0x00000004)



typedef struct _nt_power_action_policy {
	nt_power_action		action;
	uint32_t		action_flags;
	uint32_t		event_code;
} nt_power_action_policy;


typedef struct _nt_system_power_level {
	unsigned char			enable;
	unsigned char			padding[3];
	uint32_t			battery_level;
	nt_power_action_policy		power_policy;
	nt_system_power_state		min_system_state;
} nt_system_power_level;


typedef struct _nt_system_power_policy {
	uint32_t		revision;
	nt_power_action_policy	power_button;
	nt_power_action_policy	sleep_button;
	nt_power_action_policy	lid_close;
	nt_system_power_state 	lid_open_wake;
	uint32_t		reserved_1st;
	nt_power_action_policy	idle;
	uint32_t		idle_timeout;
 	unsigned char		idle_sensitivity;
 	unsigned char		dynamic_throttle;
 	unsigned char		padding[2];
	nt_system_power_state	min_sleep;
	nt_system_power_state	max_sleep;
	nt_system_power_state	reduced_latency_sleep;
	uint32_t		win_logon_flags;
	uint32_t		reserved_2nd;
	uint32_t		doze_s4_timeout;
	uint32_t		broadcast_capacity_resolution;
 	nt_system_power_level	discharge_policy[NT_NUM_DISCHARGE_POLICIES];
	uint32_t		video_timeout;
 	unsigned char		video_dim_display;
	uint32_t		video_reserved[3];
	uint32_t		spindown_timeout;
 	unsigned char		optimize_for_power;
 	unsigned char		fan_throttle_tolerance;
 	unsigned char		forced_throttle;
 	unsigned char		min_throttle;
	nt_power_action_policy	over_throttled;
} nt_system_power_policy;


typedef struct _nt_system_battery_state {
	unsigned char	ac_on_line;
	unsigned char	battery_present;
	unsigned char	charging;
	unsigned char	discharging;
	unsigned char	padding[4];
	uint32_t	max_capacity;
	uint32_t	remaining_capacity;
	uint32_t	rate;
	uint32_t	estimated_time;
	uint32_t	default_alert1;
	uint32_t	default_alert2;
} nt_system_battery_state;


typedef struct _nt_battery_reporting_scale {
	uint32_t	granularity;
	uint32_t	capacity;
} nt_battery_reporting_scale;


typedef struct _nt_system_power_capabilities {
	unsigned char			power_button_present;
	unsigned char			sleep_button_present;
	unsigned char			lid_present;
	unsigned char			system_s1;
	unsigned char			system_s2;
	unsigned char			system_s3;
	unsigned char			system_s4;
	unsigned char			system_s5;
	unsigned char			hiber_file_present;
	unsigned char			full_wake;
	unsigned char			video_dim_present;
	unsigned char			apm_present;
	unsigned char			ups_present;
	unsigned char			thermal_control;
	unsigned char			processor_throttle;
	unsigned char			processor_min_throttle;
	unsigned char			processor_max_throttle;
	unsigned char			fast_system_s4;
	unsigned char			hiber_boot;
	unsigned char			wake_alarm_present;
	unsigned char			ao_ac;
	unsigned char			disk_spin_down;
	unsigned char			padding[8];
	unsigned char			system_batteries_present;
	unsigned char			batteries_are_short_term;
	nt_battery_reporting_scale	battery_scale[3];
	nt_system_power_state		ac_on_line_wake;
	nt_system_power_state		soft_lid_wake;
	nt_system_power_state		rtc_wake;
	nt_system_power_state		min_device_wake_state;
	nt_system_power_state		default_low_latency_wake;
} nt_system_power_capabilities;


typedef struct _nt_system_power_information {
	uint32_t	max_idleness_allowed;
	uint32_t	idleness;
	uint32_t	time_remaining;
	unsigned char	cooling_mode;
} nt_system_power_information;


typedef struct _nt_system_power_status {
	unsigned char	ac_line_status;
	unsigned char	battery_flag;
	unsigned char	battery_life_percent;
	unsigned char	reserved;
	uint32_t	battery_life_time;
	uint32_t	battery_full_life_time;
} nt_system_power_status;


typedef struct _nt_administrator_power_policy {
	nt_system_power_state	min_sleep;
	nt_system_power_state	max_sleep;
	uint32_t		min_video_timeout;
	uint32_t		max_video_timeout;
	uint32_t		min_spindown_timeout;
	uint32_t		max_spindown_timeout;
} nt_administrator_power_policy;


typedef struct _nt_user_power_policy {
	uint32_t		revision;
	nt_power_action_policy	idle_ac;
	nt_power_action_policy	idle_dc;
	uint32_t		idle_timeout_ac;
	uint32_t		idle_timeout_dc;
	unsigned char		idle_sensitivity_ac;
	unsigned char		idle_sensitivity_dc;
	unsigned char		throttle_policy_ac;
	unsigned char		throttle_policy_dc;
	nt_system_power_state	max_sleep_ac;
	nt_system_power_state	max_sleep_dc;
	uint32_t		reserved[2];
	uint32_t		video_timeout_ac;
	uint32_t		video_timeout_dc;
	uint32_t		spindown_timeout_ac;
	uint32_t		spindown_timeout_dc;
	unsigned char		optimize_for_power_ac;
	unsigned char		optimize_for_power_dc;
	unsigned char		fan_throttle_tolerance_ac;
	unsigned char		fan_throttle_tolerance_dc;
	unsigned char		forced_throttle_ac;
	unsigned char		forced_throttle_dc;
} nt_user_power_policy;


typedef struct _nt_processor_power_information {
	uint32_t	number;
	uint32_t	max_mhz;
	uint32_t	current_mhz;
	uint32_t	mhz_limit;
	uint32_t	max_idle_state;
	uint32_t	current_idle_state;
} nt_processor_power_information;


typedef struct _nt_plug_play_notification_header {
	uint16_t	version;
	uint16_t	size;
	nt_guid		event;
} nt_plug_play_notification_header;


/* ZwRequestWakeupLatency: no longer present */
typedef int32_t __stdcall ntapi_zw_request_wakeup_latency(
	__in	nt_latency_time		latency);


/* ZwRequestDeviceWakeup: no longer present */
typedef int32_t __stdcall ntapi_zw_request_device_wakeup(
	__in	void *	hdevice);


/* ZwCancelDeviceWakeupRequest: no longer present */
typedef int32_t __stdcall ntapi_zw_cancel_device_wakeup_request(
	__in	void *	hdevice);


typedef int32_t __stdcall ntapi_zw_is_system_resume_automatic(void);


typedef int32_t __stdcall ntapi_zw_set_thread_execution_state(
	__in	uint32_t	execution_state,
	__out	uint32_t *	prev_execution_state);


typedef int32_t __stdcall ntapi_zw_get_device_power_state(
	__in	void *				hdevice,
	__out	nt_device_power_state *		device_power_state);


typedef int32_t __stdcall ntapi_zw_set_system_power_state(
	__in	nt_power_action		system_action,
	__in	nt_system_power_state	min_system_state,
	__in	uint32_t		system_power_state_flags);


typedef int32_t __stdcall ntapi_zw_initiate_power_action(
	__in	nt_power_action		system_action,
	__in	nt_system_power_state	min_system_statem,
	__in	uint32_t		system_power_state_flags,
	__in	unsigned char		async);

typedef int32_t __stdcall ntapi_zw_power_information(
	__in	nt_power_info_level	power_info_level,
	__in	void *			input_buffer		__optional,
	__in	uint32_t		input_buffer_length,
	__out	void *			output_buffer		__optional,
	__in	uint32_t		output_buffer_length);


typedef int32_t __stdcall ntapi_zw_plug_play_control(
	__in		uint32_t	pnp_control_code,
	__in_out	void *		buffer,
	__in		uint32_t	buffer_length);

typedef int32_t __stdcall ntapi_zw_get_plug_play_event(
	__in	uint32_t	reserved_1st,
	__in	uint32_t	reserved_2nd,
	__out	void *		buffer,
	__in	uint32_t	buffer_length);

#endif