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