|
|
dd89bb |
#ifndef _NT_DEVICE_H_
|
|
|
dd89bb |
#define _NT_DEVICE_H_
|
|
|
dd89bb |
|
|
|
414ad3 |
#include "nt_abi.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
|