Blame include/ntapi/nt_device.h

dd89bb
#ifndef _NT_DEVICE_H_
dd89bb
#define _NT_DEVICE_H_
dd89bb
dd89bb
#include <psxtypes/psxtypes.h>
dd89bb
#include "nt_object.h"
dd89bb
dd89bb
typedef enum _nt_device_type {
dd89bb
	NT_FILE_DEVICE_8042_PORT           = 0x00000027,
dd89bb
	NT_FILE_DEVICE_ACPI                = 0x00000032,
dd89bb
	NT_FILE_DEVICE_BATTERY             = 0x00000029,
dd89bb
	NT_FILE_DEVICE_BEEP                = 0x00000001,
dd89bb
	NT_FILE_DEVICE_BUS_EXTENDER        = 0x0000002a,
dd89bb
	NT_FILE_DEVICE_CD_ROM              = 0x00000002,
dd89bb
	NT_FILE_DEVICE_CD_ROM_FILE_SYSTEM  = 0x00000003,
dd89bb
	NT_FILE_DEVICE_CHANGER             = 0x00000030,
dd89bb
	NT_FILE_DEVICE_CONTROLLER          = 0x00000004,
dd89bb
	NT_FILE_DEVICE_DATALINK            = 0x00000005,
dd89bb
	NT_FILE_DEVICE_DFS                 = 0x00000006,
dd89bb
	NT_FILE_DEVICE_DFS_FILE_SYSTEM     = 0x00000035,
dd89bb
	NT_FILE_DEVICE_DFS_VOLUME          = 0x00000036,
dd89bb
	NT_FILE_DEVICE_DISK                = 0x00000007,
dd89bb
	NT_FILE_DEVICE_DISK_FILE_SYSTEM    = 0x00000008,
dd89bb
	NT_FILE_DEVICE_DVD                 = 0x00000033,
dd89bb
	NT_FILE_DEVICE_FILE_SYSTEM         = 0x00000009,
dd89bb
	NT_FILE_DEVICE_FIPS                = 0x0000003a,
dd89bb
	NT_FILE_DEVICE_FULLSCREEN_VIDEO    = 0x00000034,
dd89bb
	NT_FILE_DEVICE_INPORT_PORT         = 0x0000000a,
dd89bb
	NT_FILE_DEVICE_KEYBOARD            = 0x0000000b,
dd89bb
	NT_FILE_DEVICE_KS                  = 0x0000002f,
dd89bb
	NT_FILE_DEVICE_KSEC                = 0x00000039,
dd89bb
	NT_FILE_DEVICE_MAILSLOT            = 0x0000000c,
dd89bb
	NT_FILE_DEVICE_MASS_STORAGE        = 0x0000002d,
dd89bb
	NT_FILE_DEVICE_MIDI_IN             = 0x0000000d,
dd89bb
	NT_FILE_DEVICE_MIDI_OUT            = 0x0000000e,
dd89bb
	NT_FILE_DEVICE_MODEM               = 0x0000002b,
dd89bb
	NT_FILE_DEVICE_MOUSE               = 0x0000000f,
dd89bb
	NT_FILE_DEVICE_MULTI_UNC_PROVIDER  = 0x00000010,
dd89bb
	NT_FILE_DEVICE_NAMED_PIPE          = 0x00000011,
dd89bb
	NT_FILE_DEVICE_NETWORK             = 0x00000012,
dd89bb
	NT_FILE_DEVICE_NETWORK_BROWSER     = 0x00000013,
dd89bb
	NT_FILE_DEVICE_NETWORK_FILE_SYSTEM = 0x00000014,
dd89bb
	NT_FILE_DEVICE_NETWORK_REDIRECTOR  = 0x00000028,
dd89bb
	NT_FILE_DEVICE_NULL                = 0x00000015,
dd89bb
	NT_FILE_DEVICE_PARALLEL_PORT       = 0x00000016,
dd89bb
	NT_FILE_DEVICE_PHYSICAL_NETCARD    = 0x00000017,
dd89bb
	NT_FILE_DEVICE_PRINTER             = 0x00000018,
dd89bb
	NT_FILE_DEVICE_SCANNER             = 0x00000019,
dd89bb
	NT_FILE_DEVICE_SCREEN              = 0x0000001c,
dd89bb
	NT_FILE_DEVICE_SERENUM             = 0x00000037,
dd89bb
	NT_FILE_DEVICE_SERIAL_MOUSE_PORT   = 0x0000001a,
dd89bb
	NT_FILE_DEVICE_SERIAL_PORT         = 0x0000001b,
dd89bb
	NT_FILE_DEVICE_SMARTCARD           = 0x00000031,
dd89bb
	NT_FILE_DEVICE_SMB                 = 0x0000002e,
dd89bb
	NT_FILE_DEVICE_SOUND               = 0x0000001d,
dd89bb
	NT_FILE_DEVICE_STREAMS             = 0x0000001e,
dd89bb
	NT_FILE_DEVICE_TAPE                = 0x0000001f,
dd89bb
	NT_FILE_DEVICE_TAPE_FILE_SYSTEM    = 0x00000020,
dd89bb
	NT_FILE_DEVICE_TERMSRV             = 0x00000038,
dd89bb
	NT_FILE_DEVICE_TRANSPORT           = 0x00000021,
dd89bb
	NT_FILE_DEVICE_UNKNOWN             = 0x00000022,
dd89bb
	NT_FILE_DEVICE_VDM                 = 0x0000002c,
dd89bb
	NT_FILE_DEVICE_VIDEO               = 0x00000023,
dd89bb
	NT_FILE_DEVICE_VIRTUAL_DISK        = 0x00000024,
dd89bb
	NT_FILE_DEVICE_WAVE_IN             = 0x00000025,
dd89bb
	NT_FILE_DEVICE_WAVE_OUT            = 0x00000026,
dd89bb
} nt_device_type;
dd89bb
dd89bb
dd89bb
/* forward declaration of structures */
dd89bb
struct _nt_device_object;
dd89bb
struct _nt_driver_object;
dd89bb
dd89bb
typedef struct _nt_list_entry {
dd89bb
	struct _nt_list_entry *		flink;
dd89bb
	struct _nt_list_entry *		blink;
dd89bb
} nt_list_entry;
dd89bb
dd89bb
dd89bb
typedef struct _nt_dispatcher_header {
dd89bb
	int32_t		lock;		/* context-specific interpretations */
dd89bb
	int32_t		signal_state;	/* context-specific interpretations */
dd89bb
	nt_list_entry	wait_list_head;
dd89bb
} nt_dispatcher_header;
dd89bb
dd89bb
dd89bb
typedef struct _nt_io_completion_context {
dd89bb
	void *	port;
dd89bb
	void *	key;
dd89bb
} nt_io_completion_context;
dd89bb
dd89bb
dd89bb
typedef struct _nt_fast_io_dispatch {
dd89bb
	uint32_t	size_of_fast_io_dispatch;
dd89bb
	unsigned char * fast_io_check_if_possible;
dd89bb
	unsigned char * fast_io_read;
dd89bb
	unsigned char *	fast_io_write;
dd89bb
	unsigned char *	fast_io_query_basic_info;
dd89bb
	unsigned char *	fast_io_query_standard_info;
dd89bb
	unsigned char *	fast_io_lock;
dd89bb
	unsigned char *	fast_io_unlock_single;
dd89bb
	unsigned char *	fast_io_unlock_all;
dd89bb
	unsigned char *	fast_io_unlock_all_by_key;
dd89bb
	unsigned char *	fast_io_device_control;
dd89bb
	void *		acquire_file_for_nt_create_section;
dd89bb
	void *		release_file_for_nt_create_section;
dd89bb
	void *		fast_io_detach_device;
dd89bb
	unsigned char *	fast_io_query_network_open_info;
dd89bb
	int32_t		acquire_for_mod_write;
dd89bb
	unsigned char *	mdl_read;
dd89bb
	unsigned char *	mdl_read_complete;
dd89bb
	unsigned char *	prepare_mdl_write;
dd89bb
	unsigned char *	mdl_write_complete;
dd89bb
	unsigned char *	fast_io_read_compressed;
dd89bb
	unsigned char *	fast_io_write_compressed;
dd89bb
	unsigned char * mdl_read_complete_compressed;
dd89bb
	unsigned char *	mdl_write_complete_compressed;
dd89bb
	unsigned char *	fast_io_query_open;
dd89bb
	int32_t *	release_for_mod_write;
dd89bb
	int32_t *	acquire_for_cc_flush;
dd89bb
	int32_t *	release_for_cc_flush;
dd89bb
} nt_fast_io_dispatch;
dd89bb
dd89bb
dd89bb
typedef struct _nt_io_timer {
dd89bb
	int16_t		type;
dd89bb
	int16_t		timer_flag;
dd89bb
	nt_list_entry	timer_listj;
dd89bb
	void *		timer_routine;
dd89bb
	void *		context;
dd89bb
	void *		device_object;
dd89bb
} nt_io_timer;
dd89bb
dd89bb
dd89bb
typedef struct _nt_ecp_list {
dd89bb
	char	opaque[1];
dd89bb
} nt_ecp_list;
dd89bb
dd89bb
dd89bb
typedef struct _nt_txn_parameter_block {
dd89bb
	uint16_t	length;
dd89bb
	uint16_t	tx_fs_context;
dd89bb
	void *		transaction_object;
dd89bb
} nt_txn_parameter_block;
dd89bb
dd89bb
dd89bb
typedef struct _nt_io_driver_create_context {
dd89bb
	uint16_t			size;
dd89bb
	struct _nt_ecp_list *		extra_create_parameters;
dd89bb
	void *				device_object_hint;
dd89bb
	nt_txn_parameter_block *	txn_parameters;
dd89bb
} nt_io_driver_create_context;
dd89bb
dd89bb
dd89bb
typedef struct _nt_irp {
dd89bb
	int16_t			type;
dd89bb
	uint16_t		size;
dd89bb
	struct _nt_mdl *	mdl_address;
dd89bb
	uint32_t		flags;
dd89bb
	uintptr_t		associated_irp;
dd89bb
	nt_list_entry		thread_list_entry;
dd89bb
	char			requestor_mode;
dd89bb
	unsigned char		pending_returned;
dd89bb
	char			stack_count;
dd89bb
	char			current_location;
dd89bb
	unsigned char		cancel;
dd89bb
	unsigned char		cancel_irql;
dd89bb
	char			apc_environment;
dd89bb
	unsigned char		allocation_flags;
dd89bb
	nt_io_status_block *	user_iosb;
dd89bb
	struct _nt_kevent *	user_event;
dd89bb
	void *			overlay[2];
dd89bb
	void *			cancel_routine;
dd89bb
	void *			user_buffer;
dd89bb
	void *			tail;
dd89bb
} nt_irp;
dd89bb
dd89bb
dd89bb
typedef struct _nt_kdevice_queue {
dd89bb
	int16_t			type;
dd89bb
	int16_t			size;
dd89bb
	struct _nt_list_entry	device_list_head;
dd89bb
	uint64_t		lock;
dd89bb
	unsigned char		busy_hint[8];
dd89bb
} nt_kdevice_queue;
dd89bb
dd89bb
dd89bb
typedef struct _nt_kdevice_queue_entry {
dd89bb
	nt_list_entry	device_list_entry;
dd89bb
	uint32_t	sort_key;
dd89bb
	unsigned char	inserted;
dd89bb
} nt_kdevice_queue_entry;
dd89bb
dd89bb
dd89bb
typedef struct _nt_kevent {
dd89bb
	struct _nt_dispatcher_header	header;
dd89bb
} nt_kevent;
dd89bb
dd89bb
dd89bb
typedef struct _nt_kdpc {
dd89bb
	unsigned char		type;
dd89bb
	unsigned char		importance;
dd89bb
	uint16_t		number;
dd89bb
	nt_list_entry		dpc_list_entry;
dd89bb
	void *			deferred_routine;
dd89bb
	void *			deferred_context;
dd89bb
	void *			system_argument_1st;
dd89bb
	void *			system_argument_2nd;
dd89bb
	void *			dpc_data;
dd89bb
} nt_kdpc;
dd89bb
dd89bb
dd89bb
typedef struct _nt_mdl {
dd89bb
	struct _nt_mdl *	next;
dd89bb
	int16_t			size;
dd89bb
	int16_t			mdl_flags;
dd89bb
	void *			process;
dd89bb
	void *			mapped_system_va;
dd89bb
	void *			start_va;
dd89bb
	uint32_t		byte_count;
dd89bb
	uint32_t		byte_offset;
dd89bb
} nt_mdl;
dd89bb
dd89bb
dd89bb
typedef struct _nt_vpb {
dd89bb
	int16_t				type;
dd89bb
	int16_t				size;
dd89bb
	uint16_t			flags;
dd89bb
	uint16_t			volume_label_length;
dd89bb
	struct _nt_device_object *	device_object;
dd89bb
	struct _nt_device_object *	real_device;
dd89bb
	uint32_t			serial_number;
dd89bb
	uint32_t			reference_count;
dd89bb
	wchar16_t			volume_label[32];
dd89bb
} nt_vpb;
dd89bb
dd89bb
dd89bb
typedef struct _nt_wait_context_block {
dd89bb
	struct _nt_kdevice_queue_entry		wait_queue_entry;
dd89bb
	void *					device_routine;
dd89bb
	void *					device_context;
dd89bb
	uint32_t				number_of_map_registers;
dd89bb
	void *					device_object;
dd89bb
	void *					current_irp;
dd89bb
	struct _kdpc *				buffer_chaining_dpc;
dd89bb
} nt_wait_context_block;
dd89bb
dd89bb
dd89bb
typedef struct _nt_device_object {
dd89bb
	int16_t				type;
dd89bb
	uint16_t			size;
dd89bb
	int32_t				ref_count;
dd89bb
	struct _nt_driver_object *	driver_obj;
dd89bb
	struct _nt_device_object *	next_device;
dd89bb
	struct _nt_device_object *	attached_device;
dd89bb
	struct _nt_irp *		current_irp;
dd89bb
	struct _nt_io_timer *		timer;
dd89bb
	uint32_t			flags;
dd89bb
	uint32_t			characteristics;
dd89bb
	struct _nt_vpb *		vpb;
dd89bb
	void *				dev_ext;
dd89bb
	nt_device_type			dev_type;
dd89bb
	char				stack_size;
dd89bb
dd89bb
	union {
dd89bb
		struct _nt_list_entry		list_entry;
dd89bb
		struct _nt_wait_context_block	wcb;
dd89bb
	} queue;
dd89bb
dd89bb
	uint32_t			alignment_requirement;
dd89bb
	struct _nt_kdevice_queue	dev_queue;
dd89bb
	struct _nt_kdpc			dpc;
dd89bb
	uint32_t			active_thread_count;
dd89bb
	nt_security_descriptor *	sec_desc;
dd89bb
	struct _nt_kevent		dev_lock;
dd89bb
	uint16_t			sector_size;
dd89bb
	uint16_t			spare1;
dd89bb
	void *				device_object_extension;
dd89bb
	void *				reserved;
dd89bb
} nt_device_object;
dd89bb
dd89bb
dd89bb
typedef struct _nt_driver_object {
dd89bb
	int16_t				type;
dd89bb
	int16_t				size;
dd89bb
	struct _nt_device_object *	dev_obj;
dd89bb
	uint32_t			flags;
dd89bb
	void *				driver_start;
dd89bb
	uint32_t			driver_size;
dd89bb
	void *				driver_section;
dd89bb
	void *				driver_extension; /* TODO: define struct _nt_driver_extension (tedious) */
dd89bb
	nt_unicode_string		driver_name;
dd89bb
	nt_unicode_string *		hardware_database;
dd89bb
	struct _nt_fast_io_dispatch *	fast_io_dispatch;
dd89bb
	int32_t *			driver_init;
dd89bb
	void *				driver_start_io;
dd89bb
	void *				driver_unload;
dd89bb
	void *				major_function[28];
dd89bb
} nt_driver_object;
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall ntapi_zw_load_driver(
dd89bb
	__in	nt_unicode_string *	driver_service_name);
dd89bb
dd89bb
dd89bb
typedef int32_t __stdcall ntapi_zw_unload_driver(
dd89bb
	__in	nt_unicode_string *	driver_service_name);
dd89bb
dd89bb
#endif