📄 wd_sys.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 + -