📄 winnt_types.h
字号:
#define IoMarkIrpPending(irp) \ (IoGetCurrentIrpStackLocation((irp))->control |= SL_PENDING_RETURNED)#define IoUnmarkIrpPending(irp) \ (IoGetCurrentIrpStackLocation((irp))->control &= ~SL_PENDING_RETURNED)#define IRP_SL(irp, n) (((struct io_stack_location *)((irp) + 1)) + (n))#define IRP_DRIVER_CONTEXT(irp) (irp)->tail.overlay.driver_context#define IoIrpThread(irp) ((irp)->tail.overlay.thread)#define IRP_URB(irp) \ (union nt_urb *)(IoGetCurrentIrpStackLocation(irp)->params.others.arg1)#define IRP_WRAP_DEVICE(irp) (irp)->tail.wrap_device#define IRP_WRAP_URB(irp) (irp)->tail.wrap_urbstruct wmi_guid_reg_info { struct guid *guid; ULONG instance_count; ULONG flags;};struct wmilib_context { ULONG guid_count; struct wmi_guid_reg_info *guid_list; void *query_wmi_reg_info; void *query_wmi_data_block; void *set_wmi_data_block; void *set_wmi_data_item; void *execute_wmi_method; void *wmi_function_control;};enum key_value_information_class { KeyValueBasicInformation, KeyValueFullInformation, KeyValuePartialInformation, KeyValueFullInformationAlign64, KeyValuePartialInformationAlign64};struct file_name_info { ULONG length; wchar_t *name;};struct file_std_info { LARGE_INTEGER alloc_size; LARGE_INTEGER eof; ULONG num_links; BOOLEAN delete_pending; BOOLEAN dir;};enum nt_obj_type { NT_OBJ_EVENT = 10, NT_OBJ_MUTEX, NT_OBJ_THREAD, NT_OBJ_TIMER, NT_OBJ_SEMAPHORE,};enum common_object_type { OBJECT_TYPE_NONE, OBJECT_TYPE_DEVICE, OBJECT_TYPE_DRIVER, OBJECT_TYPE_NT_THREAD, OBJECT_TYPE_FILE, OBJECT_TYPE_CALLBACK,};struct common_object_header { struct nt_list list; enum common_object_type type; UINT size; UINT ref_count; BOOLEAN close_in_process; BOOLEAN permanent; struct unicode_string name;};#define OBJECT_TO_HEADER(object) \ (struct common_object_header *)((void *)(object) - \ sizeof(struct common_object_header))#define OBJECT_SIZE(size) \ ((size) + sizeof(struct common_object_header))#define HEADER_TO_OBJECT(hdr) \ ((void *)(hdr) + sizeof(struct common_object_header))#define HANDLE_TO_OBJECT(handle) HEADER_TO_OBJECT(handle)#define HANDLE_TO_HEADER(handle) (handle)enum work_queue_type { CriticalWorkQueue, DelayedWorkQueue, HyperCriticalWorkQueue, MaximumWorkQueue};typedef void (*NTOS_WORK_FUNC)(void *arg1, void *arg2) wstdcall;struct io_workitem { enum work_queue_type type; struct device_object *dev_obj; NTOS_WORK_FUNC worker_routine; void *context;};struct io_workitem_entry { struct nt_list list; struct io_workitem *io_workitem;};enum mm_page_priority { LowPagePriority, NormalPagePriority = 16, HighPagePriority = 32};enum kinterrupt_mode { LevelSensitive, Latched};enum ntos_wait_reason { Executive, FreePage, PageIn, PoolAllocation, DelayExecution, Suspended, UserRequest, WrExecutive, WrFreePage, WrPageIn, WrPoolAllocation, WrDelayExecution, WrSuspended, WrUserRequest, WrEventPair, WrQueue, WrLpcReceive, WrLpcReply, WrVirtualMemory, WrPageOut, WrRendezvous, Spare2, Spare3, Spare4, Spare5, Spare6, WrKernel, MaximumWaitReason};typedef enum ntos_wait_reason KWAIT_REASON;typedef void *LOOKASIDE_ALLOC_FUNC(enum pool_type pool_type, SIZE_T size, ULONG tag) wstdcall;typedef void LOOKASIDE_FREE_FUNC(void *) wstdcall;struct npaged_lookaside_list { nt_slist_header head; USHORT depth; USHORT maxdepth; ULONG totalallocs; union { ULONG allocmisses; ULONG allochits; } u1; ULONG totalfrees; union { ULONG freemisses; ULONG freehits; } u2; enum pool_type pool_type; ULONG tag; ULONG size; LOOKASIDE_ALLOC_FUNC *alloc_func; LOOKASIDE_FREE_FUNC *free_func; struct nt_list list; ULONG lasttotallocs; union { ULONG lastallocmisses; ULONG lastallochits; } u3; ULONG pad[2];#ifndef CONFIG_X86_64 NT_SPIN_LOCK obsolete;#endif}#ifdef CONFIG_X86_64CACHE_ALIGN#endif;enum device_registry_property { DevicePropertyDeviceDescription, DevicePropertyHardwareID, DevicePropertyCompatibleIDs, DevicePropertyBootConfiguration, DevicePropertyBootConfigurationTranslated, DevicePropertyClassName, DevicePropertyClassGuid, DevicePropertyDriverKeyName, DevicePropertyManufacturer, DevicePropertyFriendlyName, DevicePropertyLocationInformation, DevicePropertyPhysicalDeviceObjectName, DevicePropertyBusTypeGuid, DevicePropertyLegacyBusType, DevicePropertyBusNumber, DevicePropertyEnumeratorName, DevicePropertyAddress, DevicePropertyUINumber, DevicePropertyInstallState, DevicePropertyRemovalPolicy};enum trace_information_class { TraceIdClass, TraceHandleClass, TraceEnableFlagsClass, TraceEnableLevelClass, GlobalLoggerHandleClass, EventLoggerHandleClass, AllLoggerHandlesClass, TraceHandleByNameClass};struct kinterrupt;typedef BOOLEAN (*PKSERVICE_ROUTINE)(struct kinterrupt *interrupt, void *context) wstdcall;typedef BOOLEAN (*PKSYNCHRONIZE_ROUTINE)(void *context) wstdcall;struct kinterrupt { ULONG vector; KAFFINITY cpu_mask; NT_SPIN_LOCK lock; NT_SPIN_LOCK *actual_lock; BOOLEAN shared; BOOLEAN save_fp; CHAR processor_number; PKSERVICE_ROUTINE isr; void *isr_ctx; struct nt_list list; KIRQL irql; KIRQL synch_irql; enum kinterrupt_mode mode;};struct time_fields { CSHORT year; CSHORT month; CSHORT day; CSHORT hour; CSHORT minute; CSHORT second; CSHORT milliseconds; CSHORT weekday;};struct object_attributes { ULONG length; void *root_dir; struct unicode_string *name; ULONG attributes; void *security_descr; void *security_qos;};typedef void (*PCALLBACK_FUNCTION)(void *context, void *arg1, void *arg2) wstdcall;struct callback_object;struct callback_func { PCALLBACK_FUNCTION func; void *context; struct nt_list list; struct callback_object *object;};struct callback_object { NT_SPIN_LOCK lock; struct nt_list list; struct nt_list callback_funcs; BOOLEAN allow_multiple_callbacks; struct object_attributes *attributes;};enum section_inherit { ViewShare = 1, ViewUnmap = 2};struct ksystem_time { ULONG low_part; LONG high1_time; LONG high2_time;};enum nt_product_type { nt_product_win_nt = 1, nt_product_lan_man_nt, nt_product_server};enum alt_arch_type { arch_type_standard, arch_type_nex98x86, end_alternatives};struct kuser_shared_data { ULONG tick_count; ULONG tick_count_multiplier; volatile struct ksystem_time interrupt_time; volatile struct ksystem_time system_time; volatile struct ksystem_time time_zone_bias; USHORT image_number_low; USHORT image_number_high; wchar_t nt_system_root[260]; ULONG max_stack_trace_depth; ULONG crypto_exponent; ULONG time_zone_id; ULONG large_page_min; ULONG reserved2[7]; enum nt_product_type nt_product_type; BOOLEAN product_type_is_valid; ULONG nt_major_version; ULONG nt_minor_version; BOOLEAN processor_features[PROCESSOR_FEATURE_MAX]; ULONG reserved1; ULONG reserved3; volatile LONG time_slip; enum alt_arch_type alt_arch_type; LARGE_INTEGER system_expiration_date; ULONG suite_mask; BOOLEAN kdbg_enabled; volatile ULONG active_console; volatile ULONG dismount_count; ULONG com_plus_package; ULONG last_system_rite_event_tick_count; ULONG num_phys_pages; BOOLEAN safe_boot_mode; ULONG trace_log; ULONGLONG fill0; ULONGLONG sys_call[4]; union { volatile struct ksystem_time tick_count; volatile ULONG64 tick_count_quad; } tick;};#define REG_NONE (0)#define REG_SZ (1)#define REG_EXPAND_SZ (2)#define REG_BINARY (3)#define REG_DWORD (4)#define RTL_REGISTRY_ABSOLUTE 0#define RTL_REGISTRY_SERVICES 1#define RTL_REGISTRY_CONTROL 2#define RTL_REGISTRY_WINDOWS_NT 3#define RTL_REGISTRY_DEVICEMAP 4#define RTL_REGISTRY_USER 5#define RTL_REGISTRY_MAXIMUM 6#define RTL_REGISTRY_HANDLE 0x40000000#define RTL_REGISTRY_OPTIONAL 0x80000000#define RTL_QUERY_REGISTRY_SUBKEY 0x00000001#define RTL_QUERY_REGISTRY_TOPKEY 0x00000002#define RTL_QUERY_REGISTRY_REQUIRED 0x00000004#define RTL_QUERY_REGISTRY_NOVALUE 0x00000008#define RTL_QUERY_REGISTRY_NOEXPAND 0x00000010#define RTL_QUERY_REGISTRY_DIRECT 0x00000020#define RTL_QUERY_REGISTRY_DELETE 0x00000040typedef NTSTATUS (*PRTL_QUERY_REGISTRY_ROUTINE)(wchar_t *name, ULONG type, void *data, ULONG length, void *context, void *entry) wstdcall;struct rtl_query_registry_table { PRTL_QUERY_REGISTRY_ROUTINE query_func; ULONG flags; wchar_t *name; void *context; ULONG def_type; void *def_data; ULONG def_length;};struct io_remove_lock { BOOLEAN removed; BOOLEAN reserved[3]; LONG io_count; struct nt_event remove_event;};struct io_error_log_packet { UCHAR major_fn_code; UCHAR retry_count; USHORT dump_data_size; USHORT nr_of_strings; USHORT string_offset; USHORT event_category; NTSTATUS error_code; ULONG unique_error_value; NTSTATUS final_status; ULONG sequence_number; ULONG io_control_code; LARGE_INTEGER device_offset; ULONG dump_data[1];};/* some of the functions below are slightly different from DDK's * implementation; e.g., Insert functions return appropriate * pointer *//* instead of using Linux's lists, we implement list manipulation * functions because nt_list is used by drivers and we don't want to * worry about Linux's list being different from nt_list (right now * they are same, but in future they could be different) */static inline void InitializeListHead(struct nt_list *head){ head->next = head->prev = head;}static inline BOOLEAN IsListEmpty(struct nt_list *head){ if (head == head->next) return TRUE; else return FALSE;}static inline void RemoveEntryList(struct nt_list *entry){ entry->prev->next = entry->next; entry->next->prev = entry->prev;}static inline struct nt_list *RemoveHeadList(struct nt_list *head){ struct nt_list *entry; entry = head->next; if (entry == head) return NULL; else { RemoveEntryList(entry); return entry; }}static inline struct nt_list *RemoveTailList(struct nt_list *head){ struct nt_list *entry; entry = head->prev; if (entry == head) return NULL; else { RemoveEntryList(entry); return entry; }}static inline void InsertListEntry(struct nt_list *entry, struct nt_list *prev, struct nt_list *next){ next->prev = entry; entry->next = next; entry->prev = prev; prev->next = entry;}static inline struct nt_list *InsertHeadList(struct nt_list *head, struct nt_list *entry){ struct nt_list *ret; if (IsListEmpty(head)) ret = NULL; else ret = head->next; InsertListEntry(entry, head, head->next); return ret;}static inline struct nt_list *InsertTailList(struct nt_list *head, struct nt_list *entry){ struct nt_list *ret; if (IsListEmpty(head)) ret = NULL; else ret = head->prev; InsertListEntry(entry, head->prev, head); return ret;}#define nt_list_for_each(pos, head) \ for (pos = (head)->next; pos != (head); pos = pos->next)#define nt_list_for_each_entry(pos, head, member) \ for (pos = container_of((head)->next, typeof(*pos), member); \ &pos->member != (head); \ pos = container_of(pos->member.next, typeof(*pos), member))#define nt_list_for_each_safe(pos, n, head) \ for (pos = (head)->next, n = pos->next; pos != (head); \ pos = n, n = pos->next)/* device object flags */#define DO_VERIFY_VOLUME 0x00000002#define DO_BUFFERED_IO 0x00000004#define DO_EXCLUSIVE 0x00000008#define DO_DIRECT_IO 0x00000010#define DO_MAP_IO_BUFFER 0x00000020#define DO_DEVICE_HAS_NAME 0x00000040#define DO_DEVICE_INITIALIZING 0x00000080#define DO_SYSTEM_BOOT_PARTITION 0x00000100#define DO_LONG_TERM_REQUESTS 0x00000200#define DO_NEVER_LAST_DEVICE 0x00000400#define DO_SHUTDOWN_REGISTERED 0x00000800#define DO_BUS_ENUMERATED_DEVICE 0x00001000#define DO_POWER_PAGABLE 0x00002000#define DO_POWER_INRUSH 0x00004000#define DO_LOW_PRIORITY_FILESYSTEM 0x00010000/* Various supported device types (used with IoCreateDevice()) */#define FILE_DEVICE_BEEP 0x00000001#define FILE_DEVICE_CD_ROM 0x00000002#define FILE_DEVICE_CD_ROM_FILE_SYSTEM 0x00000003#define FILE_DEVICE_CONTROLLER 0x00000004#define FILE_DEVICE_DATALINK 0x00000005#define FILE_DEVICE_DFS 0x00000006#define FILE_DEVICE_DISK 0x00000007#define FILE_DEVICE_DISK_FILE_SYSTEM 0x00000008#define FILE_DEVICE_FILE_SYSTEM 0x00000009#define FILE_DEVICE_INPORT_PORT 0x0000000A#define FILE_DEVICE_KEYBOARD 0x0000000B#define FILE_DEVICE_MAILSLOT 0x0000000C#define FILE_DEVICE_MIDI_IN 0x0000000D#define FILE_DEVICE_MIDI_OUT 0x0000000E#define FILE_DEVICE_MOUSE 0x0000000F#define FILE_DEVICE_MULTI_UNC_PROVIDER 0x00000010#define FILE_DEVICE_NAMED_PIPE 0x00000011#define FILE_DEVICE_NETWORK 0x00000012#define FILE_DEVICE_NETWORK_BROWSER 0x00000013#define FILE_DEVICE_NETWORK_FILE_SYSTEM 0x00000014#define FILE_DEVICE_NULL 0x00000015#define FILE_DEVICE_PARALLEL_PORT 0x00000016#define FILE_DEVICE_PHYSICAL_NETCARD 0x00000017#define FILE_DEVICE_PRINTER 0x00000018#define FILE_DEVICE_SCANNER 0x00000019#define FILE_DEVICE_SERIAL_MOUSE_PORT 0x0000001A#define FILE_DEVICE_SERIAL_PORT 0x0000001B#define FILE_DEVICE_SCREEN 0x0000001C#define FILE_DEVICE_SOUND 0x0000001D#define FILE_DEVICE_STREAMS 0x0000001E#define FILE_DEVICE_TAPE 0x0000001F#define FILE_DEVICE_TAPE_FILE_SYSTEM 0x00000020#define FILE_DEVICE_TRANSPORT 0x00000021#define FILE_DEVICE_UNKNOWN 0x00000022#define FILE_DEVICE_VIDEO 0x00000023#define FILE_DEVICE_VIRTUAL_DISK 0x00000024#define FILE_DEVICE_WAVE_IN 0x00000025#define FILE_DEVICE_WAVE_OUT 0x00000026#define FILE_DEVICE_8042_PORT 0x00000027#define FILE_DEVICE_NETWORK_REDIRECTOR 0x00000028#define FILE_DEVICE_BATTERY 0x00000029#define FILE_DEVICE_BUS_EXTENDER 0x0000002A#define FILE_DEVICE_MODEM 0x0000002B#define FILE_DEVICE_VDM 0x0000002C#define FILE_DEVICE_MASS_STORAGE 0x0000002D#define FILE_DEVICE_SMB 0x0000002E#define FILE_DEVICE_KS 0x0000002F#define FILE_DEVICE_CHANGER 0x00000030#define FILE_DEVICE_SMARTCARD 0x00000031#define FILE_DEVICE_ACPI 0x00000032#define FILE_DEVICE_DVD 0x00000033#define FILE_DEVICE_FULLSCREEN_VIDEO 0x00000034#define FILE_DEVICE_DFS_FILE_SYSTEM 0x00000035#define FILE_DEVICE_DFS_VOLUME 0x00000036#define FILE_DEVICE_SERENUM 0x00000037#define FILE_DEVICE_TERMSRV 0x00000038#define FILE_DEVICE_KSEC 0x00000039#define FILE_DEVICE_FIPS 0x0000003A/* Device characteristics */#define FILE_REMOVABLE_MEDIA 0x00000001#define FILE_READ_ONLY_DEVICE 0x00000002#define FILE_FLOPPY_DISKETTE 0x00000004#define FILE_WRITE_ONCE_MEDIA 0x00000008#define FILE_REMOTE_DEVICE 0x00000010#define FILE_DEVICE_IS_MOUNTED 0x00000020#define FILE_VIRTUAL_VOLUME 0x00000040#define FILE_AUTOGENERATED_DEVICE_NAME 0x00000080#define FILE_DEVICE_SECURE_OPEN 0x00000100#define FILE_READ_DATA 0x0001#define FILE_WRITE_DATA 0x0002#define FILE_SUPERSEDED 0x00000000#define FILE_OPENED 0x00000001#define FILE_CREATED 0x00000002#define FILE_OVERWRITTEN 0x00000003#define FILE_EXISTS 0x00000004#define FILE_DOES_NOT_EXIST 0x00000005#endif /* WINNT_TYPES_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -