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

📄 wd_sys.h

📁 国内文件驱动编程知名人物蔡大侠的教程源代码
💻 H
字号:
// 如果要在

#ifndef _WD_HEADER_WD_SYS_H_KDJEI_E98RJEKF_FJERIUE_
#define _WD_HEADER_WD_SYS_H_KDJEI_E98RJEKF_FJERIUE_

#include "wdf.h"
#include "wd_ustr.h"
#include "wd_irp.h"

/// We will use some functions dynamiclly. For install this driver
/// to win2k.
typedef struct _WD_DYM_FUNS 
{
///	IoEnumerateDeviceObjectList
	NTSTATUS
	(* io_enum_dev_obj_list)(
		IN PDRIVER_OBJECT,
		IN PDEVICE_OBJECT  *,
		IN ULONG,
		OUT PULONG ); 
/// IoGetDeviceAttachmentBaseRef
	PDEVICE_OBJECT
	(* io_dev_attach_base_ref)(
		IN PDEVICE_OBJECT); 	
/// RtlGetVersion
	NTSTATUS
	(*rtl_get_version)(
		IN OUT PRTL_OSVERSIONINFOW);
/// IoVolumeDeviceToDosName
	NTSTATUS
	(*io_vol_dev_to_dos_name)(
		IN  PVOID,
		OUT PUNICODE_STRING);
/// IoGetDiskDeviceObject
	NTSTATUS
	(*io_disk_dev_obj)(
		IN PDEVICE_OBJECT,
		OUT PDEVICE_OBJECT *); 
/// IoCreateFileSpecifyDeviceObjectHint
	NTSTATUS
	(*io_create_file_hint)(
		OUT PHANDLE,
		IN ACCESS_MASK,
		IN POBJECT_ATTRIBUTES,
		OUT PIO_STATUS_BLOCK,
		IN PLARGE_INTEGER OPTIONAL,
		IN ULONG,
		IN ULONG,
		IN ULONG,
		IN ULONG,
		IN PVOID OPTIONAL,
		IN ULONG,
		IN CREATE_FILE_TYPE,
		IN PVOID OPTIONAL,
		IN ULONG,
		IN PVOID);
} WD_DYM_FUNS,*PWD_DYM_FUNS;


// 这个函数生成一个从虚拟地址到物理内存地址的映射
wd_void* wd_sys_phymem_map_create(wd_dword paddr,
								  wd_ulong *length,
								  wd_dword *vaddr,
								  wd_bool read_only);
// 释放这个映射
wd_void wd_sys_phymem_map_free(wd_void* map);

wd_byte *wd_sys_mother_board_code();

// only xp-
wd_dev **wd_drv_enum_devs(wd_drv *drv,wd_ulong *number,wd_stat *status);

// only xp-
wd_void wd_drv_enum_devs_free(wd_dev **devs,wd_ulong num);

// only xp-
wd_stat wd_dev_bottom_dev_name(wd_dev *dev,out_ wd_ustr *name);

wd_bool wd_is_xp();

// 时钟句柄
typedef wd_void* wd_timer_h;
// 时钟函数
typedef wd_void (*wd_timer_func)(wd_timer_h timer,wd_void *context);

wd_timer_h wd_timer_create(wd_timer_func func);

wd_bool wd_timer_set(wd_timer_h timer,wd_int msec,wd_void *context);

wd_void wd_timer_destroy(wd_timer_h timer);

// 当前线程延时
wd_void wd_timer_sleep(wd_int msec);

// 每1秒执行此函数
wd_void st_timer_test_every_1(wd_timer_h timer,wd_void *context);

// 测试函数只能调用一次,建议在main中调用。调用后每秒执行一次on_timer,
// 如果没有执行,说明失败。
wd_bool wd_timer_test();

wd_ulong wd_time_tick_count();

wd_stat wd_irp_call_syn(in_ wd_dev *next_dev,
						in_ wd_irp *irp);

wd_stat wd_file_get_vol_name(in wd_file *file,
							 in wd_ustr *vol_name);

wd_stat wd_vol_dev_to_disk_dev(wd_dev *vol, wd_dev **disk);

wd_ustr_h wd_obj_query_name(in_ wd_void *obj);

wd_bool wd_reg_set(wd_ustr *path,
						   wd_ustr *key_name,
						   wd_void *data,
						   wd_ulong data_len,
						   wd_ulong type);

wd_byte *wd_reg_get(wd_ustr *path,wd_ustr *key_name,wd_ulong *len);

wd_void *wd_reg_read_max512(wd_ustr *path,wd_ustr *key_name);

wd_bool wd_reg_read_ustr_max512(wd_ustr *path,
										wd_ustr *key_name,
										wd_ustr *value);

wd_ustr_h wd_vol_dos_name(in_ wd_dev *dev);

wd_ustr_h wd_vol_dos_name_safe(wd_dev *dev);

wd_ustr_h wd_symbolic_target_ustr(wd_ustr *symbolic);

wd_ustr_h wd_symbolic_target(wd_wchar *symbolic);

PWD_DYM_FUNS wd_sys_dym_funs();

wd_void wd_sys_dym_funs_init();

wd_ustr_h wd_vol_name_dos_name(wd_wchar *name);

enum {
	WD_FS_CANNOT_GET = -1,
	WD_FS_UNKNOWN = 0,
	WD_FS_FASTFAT = 1,
	WD_FS_NTFS = 2
};

wd_long wd_vol_fs_type(wd_dev *vol);

wd_ustr_h wd_file_full_path_pre_create(in_ wd_file *file);

#endif //_WD_HEADER_WD_SYS_H_KDJEI_E98RJEKF_FJERIUE_

⌨️ 快捷键说明

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