⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ntoskernel.h

📁 详细说明:ndiswrapper工具
💻 H
📖 第 1 页 / 共 3 页
字号:
#endif#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,18)#define ISR_PT_REGS_PARAM_DECL#define ISR_PT_REGS_ARG#else#define ISR_PT_REGS_PARAM_DECL , struct pt_regs *regs#define ISR_PT_REGS_ARG , NULL#endif#ifndef flush_icache_range#define flush_icache_range(start, end) do { } while (0)#endif#define memcpy_skb(skb, from, length)			\	memcpy(skb_put(skb, length), from, length)#include "ndiswrapper.h"#include "pe_linker.h"#include "wrapmem.h"#include "lin2win.h"#include "loader.h"#ifdef CONFIG_X86_64#define get_sp(sp) __asm__ __volatile__("mov %%rsp, %0\n\t" : "=m"(sp))#else#define get_sp(sp) __asm__ __volatile__("mov %%esp, %0\n\t" : "=m"(sp))#endif#define print_sp() do {				\		void *sp;			\		get_sp(sp);			\		DBGTRACE1("sp: %p", sp);	\	} while (0)//#define DEBUG_IRQL 1#if !defined(CONFIG_USB) && defined(CONFIG_USB_MODULE)#define CONFIG_USB 1#endif#if defined(DISABLE_USB)#undef CONFIG_USB#undef CONFIG_USB_MODULE#endif/* TICK is 100ns */#define TICKSPERSEC		10000000LL#define TICKSPERMSEC		10000#define SECSPERDAY		86400#define TICKSPERJIFFY		((10000000 + HZ - 1) / HZ)/* 1601 to 1970 is 369 years plus 89 leap days */#define SECS_1601_TO_1970	((369 * 365 + 89) * (u64)SECSPERDAY)#define TICKS_1601_TO_1970	(SECS_1601_TO_1970 * TICKSPERSEC)/* 100ns units to HZ; if sys_time is negative, relative to current * clock, otherwise from year 1601 */#define SYSTEM_TIME_TO_HZ(sys_time)					\	((((sys_time) <= 0) ? (((u64)HZ * (-(sys_time))) / TICKSPERSEC) : \	  (((s64)HZ * ((sys_time) - ticks_1601())) / TICKSPERSEC)))#define MSEC_TO_HZ(ms) ((ms) * HZ / 1000)#define USEC_TO_HZ(us) ((us) * HZ / 1000000)extern u64 wrap_ticks_to_boot;static inline u64 ticks_1601(void){	return wrap_ticks_to_boot + (u64)jiffies * TICKSPERJIFFY;}typedef void (*generic_func)(void);struct wrap_export {	const char *name;	generic_func func;};#ifdef CONFIG_X86_64#define WIN_SYMBOL(name, argc)					\	{#name, (generic_func) win2lin_ ## name ## _ ## argc}#define WIN_WIN_SYMBOL(name, argc)					\	{#name, (generic_func) win2lin__win_ ## name ## _ ## argc}#define WIN_FUNC_DECL(name, argc)			\	typeof(name) win2lin_ ## name ## _ ## argc ;#define WIN_FUNC_PTR(name, argc) win2lin_ ## name ## _ ## argc#else#define WIN_SYMBOL(name, argc) {#name, (generic_func)name}#define WIN_WIN_SYMBOL(name, argc) {#name, (generic_func)_win_ ## name}#define WIN_FUNC_DECL(name, argc)#define WIN_FUNC_PTR(name, argc) name#endif#define WIN_FUNC(name, argc) name/* map name s to f - if f is different from s */#define WIN_SYMBOL_MAP(s, f)#define POOL_TAG(A, B, C, D)					\	((ULONG)((A) + ((B) << 8) + ((C) << 16) + ((D) << 24)))struct pe_image {	char name[MAX_DRIVER_NAME_LEN];	UINT (*entry)(struct driver_object *, struct unicode_string *) wstdcall;	void *image;	int size;	int type;	IMAGE_NT_HEADERS *nt_hdr;	IMAGE_OPTIONAL_HEADER *opt_hdr;};struct ndis_miniport_block;struct wrap_timer {	long repeat;	struct nt_list list;	struct timer_list timer;	struct nt_timer *nt_timer;#ifdef TIMER_DEBUG	unsigned long wrap_timer_magic;#endif};struct ntos_work_item {	struct nt_list list;	void *arg1;	void *arg2;	void (*func)(void *arg1, void *arg2) wstdcall;};struct wrap_device_setting {	struct nt_list list;	char name[MAX_SETTING_NAME_LEN];	char value[MAX_SETTING_VALUE_LEN];	void *encoded;};struct wrap_bin_file {	char name[MAX_DRIVER_NAME_LEN];	size_t size;	void *data;};#define WRAP_DRIVER_CLIENT_ID 1struct wrap_driver {	struct nt_list list;	struct driver_object *drv_obj;	char name[MAX_DRIVER_NAME_LEN];	char version[MAX_SETTING_VALUE_LEN];	unsigned short num_pe_images;	struct pe_image pe_images[MAX_DRIVER_PE_IMAGES];	unsigned short num_bin_files;	struct wrap_bin_file *bin_files;	struct nt_list wrap_devices;	struct wrap_ndis_driver *ndis_driver;};struct wrap_device {	/* first part is (de)initialized once by loader */	struct nt_list list;	int dev_bus;	int vendor;	int device;	int subvendor;	int subdevice;	char conf_file_name[MAX_DRIVER_NAME_LEN];	char driver_name[MAX_DRIVER_NAME_LEN];	struct wrap_driver *driver;	struct nt_list settings;	/* rest should be (de)initialized when a device is	 * (un)plugged */	struct device_object *pdo;	union {		struct {			struct pci_dev *pdev;#if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,9)			u32 pci_state[16];#endif		} pci;		struct {			struct usb_device *udev;			struct usb_interface *intf;			int num_alloc_urbs;			struct nt_list wrap_urb_list;		} usb;	};	union {		struct wrap_ndis_device *wnd;	};	struct cm_resource_list *resource_list;	BOOLEAN surprise_removed;};#define wrap_is_pci_bus(dev_bus)			\	(WRAP_BUS(dev_bus) == WRAP_PCI_BUS ||		\	 WRAP_BUS(dev_bus) == WRAP_PCMCIA_BUS)#ifdef CONFIG_USB/* earlier versions of ndiswrapper used 0 as USB_BUS */#define wrap_is_usb_bus(dev_bus)			\	(WRAP_BUS(dev_bus) == WRAP_USB_BUS ||		\	 WRAP_BUS(dev_bus) == WRAP_INTERNAL_BUS)#else#define wrap_is_usb_bus(dev_bus) 0#endif#define wrap_is_bluetooth_device(dev_bus)			\	(WRAP_DEVICE(dev_bus) == WRAP_BLUETOOTH_DEVICE1 ||	\	 WRAP_DEVICE(dev_bus) == WRAP_BLUETOOTH_DEVICE2)extern workqueue_struct_t *wrap_wq;#define schedule_ndis_work(work_struct) queue_work(ndis_wq, (work_struct))#define schedule_wrap_work(work_struct) queue_work(wrap_wq, (work_struct))/* Normally workqueue for ntos is not required, as worker entries in * it are not supposed to wait; however, it helps to have separate * workqueue so keyboard etc. work when kernel crashes */#ifdef USE_OWN_WQ#define USE_OWN_NTOS_WORKQUEUE 1#endif//#define USE_OWN_NTOS_WORKQUEUE 1#ifdef USE_OWN_NTOS_WORKQUEUEextern workqueue_struct_t *ntos_wq;#define schedule_ntos_work(work_struct) queue_work(ntos_wq, (work_struct))#else#define schedule_ntos_work(work_struct) schedule_work(work_struct)#endifint ntoskernel_init(void);void ntoskernel_exit(void);int ntoskernel_init_device(struct wrap_device *wd);void ntoskernel_exit_device(struct wrap_device *wd);void *allocate_object(ULONG size, enum common_object_type type,		      struct unicode_string *name);void free_object(void *object);int usb_init(void);void usb_exit(void);int usb_init_device(struct wrap_device *wd);void usb_exit_device(struct wrap_device *wd);void usb_cancel_pending_urbs(void);int crt_init(void);void crt_exit(void);int rtl_init(void);void rtl_exit(void);int wrap_procfs_init(void);void wrap_procfs_remove(void);int link_pe_images(struct pe_image *pe_image, unsigned short n);int stricmp(const char *s1, const char *s2);void dump_bytes(const char *name, const u8 *from, int len);struct mdl *allocate_init_mdl(void *virt, ULONG length);void free_mdl(struct mdl *mdl);struct driver_object *find_bus_driver(const char *name);void free_custom_extensions(struct driver_extension *drv_obj_ext);struct nt_thread *get_current_nt_thread(void);u64 ticks_1601(void);int schedule_ntos_work_item(NTOS_WORK_FUNC func, void *arg1, void *arg2);void wrap_init_timer(struct nt_timer *nt_timer, enum timer_type type,		     struct kdpc *kdpc, struct ndis_miniport_block *nmb);BOOLEAN wrap_set_timer(struct nt_timer *nt_timer, unsigned long expires_hz,		       unsigned long repeat_hz, struct kdpc *kdpc);LONG InterlockedDecrement(LONG volatile *val) wfastcall;LONG InterlockedIncrement(LONG volatile *val) wfastcall;struct nt_list *ExInterlockedInsertHeadList	(struct nt_list *head, struct nt_list *entry,	 NT_SPIN_LOCK *lock) wfastcall;struct nt_list *ExInterlockedInsertTailList	(struct nt_list *head, struct nt_list *entry,	 NT_SPIN_LOCK *lock) wfastcall;struct nt_list *ExInterlockedRemoveHeadList	(struct nt_list *head, NT_SPIN_LOCK *lock) wfastcall;NTSTATUS IofCallDriver(struct device_object *dev_obj, struct irp *irp) wfastcall;KIRQL KfRaiseIrql(KIRQL newirql) wfastcall;void KfLowerIrql(KIRQL oldirql) wfastcall;KIRQL KfAcquireSpinLock(NT_SPIN_LOCK *lock) wfastcall;void KfReleaseSpinLock(NT_SPIN_LOCK *lock, KIRQL oldirql) wfastcall;void IofCompleteRequest(struct irp *irp, CHAR prio_boost) wfastcall;void KefReleaseSpinLockFromDpcLevel(NT_SPIN_LOCK *lock) wfastcall;LONG ObfReferenceObject(void *object) wfastcall;void ObfDereferenceObject(void *object) wfastcall;int dereference_object(void *object);#define ObReferenceObject(object) ObfReferenceObject(object)#define ObDereferenceObject(object) ObfDereferenceObject(object)void WRITE_PORT_UCHAR(ULONG_PTR port, UCHAR value) wstdcall;UCHAR READ_PORT_UCHAR(ULONG_PTR port) wstdcall;#undef ExAllocatePoolWithTagvoid *ExAllocatePoolWithTag(enum pool_type pool_type, SIZE_T size,			    ULONG tag) wstdcall;#if defined(ALLOC_DEBUG) && ALLOC_DEBUG > 1#define ExAllocatePoolWithTag(pool_type, size, tag)			\	wrap_ExAllocatePoolWithTag(pool_type, size, tag, __FILE__, __LINE__)#endifvoid ExFreePool(void *p) wstdcall;ULONG MmSizeOfMdl(void *base, ULONG length) wstdcall;void *MmMapIoSpace(PHYSICAL_ADDRESS phys_addr, SIZE_T size,		   enum memory_caching_type cache) wstdcall;void MmUnmapIoSpace(void *addr, SIZE_T size) wstdcall;void MmProbeAndLockPages(struct mdl *mdl, KPROCESSOR_MODE access_mode,			 enum lock_operation operation) wstdcall;void MmUnlockPages(struct mdl *mdl) wstdcall;void KeInitializeEvent(struct nt_event *nt_event,		       enum event_type type, BOOLEAN state) wstdcall;LONG KeSetEvent(struct nt_event *nt_event, KPRIORITY incr,		BOOLEAN wait) wstdcall;LONG KeResetEvent(struct nt_event *nt_event) wstdcall;void KeClearEvent(struct nt_event *nt_event) wstdcall;void KeInitializeDpc(struct kdpc *kdpc, void *func, void *ctx) wstdcall;BOOLEAN KeInsertQueueDpc(struct kdpc *kdpc, void *arg1, void *arg2) wstdcall;BOOLEAN KeRemoveQueueDpc(struct kdpc *kdpc) wstdcall;void KeFlushQueuedDpcs(void) wstdcall;NTSTATUS KeWaitForSingleObject(void *object, KWAIT_REASON reason,			       KPROCESSOR_MODE waitmode, BOOLEAN alertable,			       LARGE_INTEGER *timeout) wstdcall;struct mdl *IoAllocateMdl(void *virt, ULONG length, BOOLEAN second_buf,			  BOOLEAN charge_quota, struct irp *irp) wstdcall;void MmBuildMdlForNonPagedPool(struct mdl *mdl) wstdcall;void IoFreeMdl(struct mdl *mdl) wstdcall;NTSTATUS IoCreateDevice(struct driver_object *driver, ULONG dev_ext_length,			struct unicode_string *dev_name, DEVICE_TYPE dev_type,			ULONG dev_chars, BOOLEAN exclusive,			struct device_object **dev_obj) wstdcall;NTSTATUS IoCreateSymbolicLink(struct unicode_string *link,			      struct unicode_string *dev_name) wstdcall;void IoDeleteDevice(struct device_object *dev) wstdcall;void IoDetachDevice(struct device_object *topdev) wstdcall;struct device_object *IoGetAttachedDevice(struct device_object *dev) wstdcall;struct device_object *IoGetAttachedDeviceReference	(struct device_object *dev) wstdcall;NTSTATUS IoAllocateDriverObjectExtension	(struct driver_object *drv_obj, void *client_id, ULONG extlen,	 void **ext) wstdcall;void *IoGetDriverObjectExtension(struct driver_object *drv,				 void *client_id) wstdcall;struct device_object *IoAttachDeviceToDeviceStack	(struct device_object *src, struct device_object *dst) wstdcall;void KeInitializeEvent(struct nt_event *nt_event, enum event_type type,		       BOOLEAN state) wstdcall;struct irp *IoAllocateIrp(char stack_count, BOOLEAN charge_quota) wstdcall;void IoFreeIrp(struct irp *irp) wstdcall;BOOLEAN IoCancelIrp(struct irp *irp) wstdcall;struct irp *IoBuildSynchronousFsdRequest	(ULONG major_func, struct device_object *dev_obj, void *buf,

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -