- 博客(24)
- 收藏
- 关注
原创 Linux 简单知识
指令格式: 命令 [选项] [操作对象] eg: ls -l -a /home pwd -print current working directory ls -list directory contents cd -change directory mkdir -make directory mkdir -p a/b/c 多层目录 touch -change file timestamp 创建文件 rm -remove file or directory rm -rf dirctory cp -copy
2022-01-10 22:19:10
524
原创 Cmake使用
PROJECT(ProName):指定工程名称 隐式定义ProName_binary_dir proName_source_dir 应对可能工程名改变 Project_binary_dir project_source_dir Set(ALIENAME a.cpp b.cpp) Set类似于变量 ADD_EXECUTABLE(ProName ${ALIENAME}) ADD_LIBRARY(ProName SHARED main.cpp) ADD_SUBDIRECTORY(src bin) 将src作为子目
2022-01-10 20:38:05
411
原创 C#使用总结1
进制转换 十进制转二进制、16进制 Convert.ToString(d,2) Convert.ToString(d,16) 二进制转十进制、16进制 Convert.ToInt32("1100", 2); string.Format("{0:x}",Convert.ToInt32("1100",2) 注册表操作 using namespace microsoft.Win32 //创建子项 RegistryKey key = Registry.LocalMachine; key.CreateSu
2021-06-21 16:50:18
153
转载 网络数据包传输逻辑
概念解析 OSI模型(Open System Interconnection Reference Model)开放式系统互联通信参考模型 是一个计算机互联为网络的标准框架。 OSI将计算机网络体系结构(architecture)划分为以下七层: 物理层: 将数据转换为可通过物理介质传送的电子信号 相当于邮局中的搬运工人。 数据链路层: 决定访问网络介质的方式。 在此层将数据分帧,并处理流控制。本层指定拓扑结构并提供硬件寻址,相当于邮局中的装拆箱工人。 网络层: 使用权数据路由经过大型网络 相当于邮局中的排序
2021-06-04 10:57:34
635
原创 WFP知识总结
开发者在内核态使用WFP实现网络数据包过滤步骤: 定义一个或多个呼出接口,向过滤引擎注册呼出接口 添加呼出接口到过滤引擎 设计一个或多个子层,将子层添加到分层中 设计过滤器,把呼出接口、分层、子层和过滤器关联起来,向过滤引擎添加过滤器 注册呼出接口 FwpsCalloutRegister0/FwpsCalloutRegister1/FwpsCalloutRegister2 卸载呼出接口 FwpsCalloutUnregisterById/FwpsCalloutUnregisterByKey 打开过滤引擎
2021-06-04 09:37:46
795
原创 WDF程序参数解析
为什么用注册表存储驱动信息RegistryPath 驱动加载非常早,甚至仅仅晚于windows内核,这时文件系统还没建立,驱动程序如果在此时需要享有自己的可操作空间,只有注册表可使用。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services为驱动信息存储位置。 WDF_DRIVER_CONFIG 驱动程序的一些可配置参数,其中包含了EvtDriverDeviceAdd和EvtDriverUnload的入口地址以及驱动初始化时的一些标志和分配内存使用的tag值。
2021-05-31 15:37:03
1289
原创 INF
[Area] 域 [Area.SubArea] 子域 AddReg = [Arae],[Area1] 指令域 [Area] cmd = cmdParam, cmdParam1… 指令 指令名 = 指令参数,指令参数1… ; 注释 %name% 变量 常用域 [Version] --版本 Signature= “$WINDOWS NT$”--签名 DriverVer = mm/dd/yyyy //可选 Class --类名 Provider --提供者 CatalogFile --签名文件 //
2021-05-26 17:53:53
409
原创 驱动程序调用驱动程序
以文件句柄形式调用其他驱动程序 ZwCreateFile ZwReadFile ZwWriteFile 通过设备指针调用其他驱动程序 IoGetDeviceObjectPointer获取设备指针 创建IRP传递给驱动的派遣函数 得到设备指针 IoGetDeviceObjectPointer 创建IRP IoBuildSynchronousFsdRequest IoBuildAsynchronousFsdRequest
2021-05-23 17:28:15
494
原创 定时器
I/O定时器 IoInitializeTimer(pDevObj, OnTimer, NULL) IoStartTimer IoStopTimer #pragma LOCKEDCODE VOID OnTimer( IN PDEVICE_OBJECT DeviceObject, IN PVOID Context) { PDEVICE_EXTENSION pDevExt = (PDEVICE_EXTENSION) DeviceObject->DeviceExtension; KdPrint(("
2021-05-23 14:40:24
199
原创 驱动程序同步有关api
中断 KeWait ForSingleObject KeWaitForMultipleObjects 线程 PsCreateSystemThread PsTerminateSystemThread IoGetCurrentProcess 事件 KeInitializeEvent KeSetEvent ObRegerenceObjectByHandle //减少引用计数 IoCreateNotificationEvent //通知事件 IoCreateSynchronizationEvent ..
2021-05-22 17:00:21
386
原创 文件读写方式介绍
驱动的读写方式分为:缓冲区方式,直接方式,Nether方式(DO_BUFFERED_IO DO_DIRECT_IO DO_NETHER_IO) 缓冲区方式:将数据从真实设备复制到内核层,再从内核层复制到应用层 NTSTATUS HelloDDKRead(IN PDEVICE_OBJECT pDevObj, IN PIRP pIrp) { KdPrint(("Enter HelloDDKRead\n")); NTSTATUS status = STATUS_SUCCESS; PIO_STAC
2021-05-22 16:25:55
463
原创 注册表操作
梳理来源于张帆 windows驱动开发技术详解 #define MY_REG_SOFTWARE_KEY_NAME L"\\Registry\\Machine\\Software\\Zhangfan" #pragma INITCODE VOID CreateRegTest() { //创建或打开某注册表项目 UNICODE_STRING RegUnicodeString; HANDLE hRegister; //初始化UNICODE_STRING字符串 RtlInitUnicodeStrin
2021-05-22 11:52:53
268
原创 文件操作
梳理来源于张帆 windows驱动开发技术详解 #pragma INITCODE VOID CreateFileTest() { OBJECT_ATTRIBUTES objectAttributes; IO_STATUS_BLOCK iostatus; HANDLE hfile; UNICODE_STRING logFileUnicodeString; //初始化UNICODE_STRING字符串 RtlInitUnicodeString( &logFileUnicodeString
2021-05-22 11:02:10
387
原创 字符串操作
VOID StringInitTest() { //(1)用RtlInitAnsiString初始化字符串 ANSI_STRING AnsiString1; CHAR * string1= "hello"; //初始化ANSI_STRING字符串 RtlInitAnsiString(&AnsiString1,string1); KdPrint(("AnsiString1:%Z\n",&AnsiString1));//打印hello string1[0]='H'; str
2021-05-22 10:55:36
214
原创 使用lookside
目的 频繁分配内存时,为减少内存碎片的产生可使用lookaside API PAGE_LOOKASIDE_LIST ExInitializePagedLookasideList ExInitializeNPagedLooksideList ExAllocateFromPagedLookasideList ExAllocateFromNPagedLookasideList ExFreeToPagedLookasideList EXFreeToNPagedLookasideList Test typedef M
2021-05-22 10:38:31
451
原创 链表操作
API InitializeListHead IsListEmpty InsertHeadList InsertTailList RemoveHeadList RemoveTailList CONTANING_RECORD 使用 typedef struct _MYDATASTRUCT{ UNLONG number; LIST_ENTRY ListEntry; }MYDATASTRUCT, *PMYDATASTRUCT #pragma INITCODE VOID Test(){ //初始化链表 L
2021-05-21 19:47:03
331
原创 内核模式API
内存操作 ExAllocatePool() ExFreePool() RtlCopyMemory RtlZeroMemory RtlFillMemory RtlRemoveMemory RtlCompareMemory 快查表 PAGED_LOOKASIDE_LIST 字符串操作 RtlInitUnicodeString RtlCopyUnicodeString RtlCompareUnicodeStirng RtlUpperUnicodeString RtlUnicodeStringToInteg..
2021-05-21 18:35:18
372
原创 WDM HelloWord分析
书籍 windows驱动开发技术详解 张帆 内存操作 ExAllocatePool() ExFreePool() 双向链表 typedef struct _LIST_ENTRY{ struct _LIST_ENTRY *Flink; struct _LIST_ENTRY *Blink; } LISTENTRY Struct MyListData { LIST_ENTRY list; Int age; int num; UnicodeString Name; } 内存 RtlCopyM
2021-05-21 17:40:42
414
1
原创 vs2019 NT驱动双机调试
下载vs2019 安装C++桌面开发环境,如果后期有报缓解库的问题,需要在单个组件中安装对应版本的缓解库 下载对应版本的wdk 安装vmware虚拟机,最好操作系统的版本与物理机相同,一般都按专业版win10 在虚拟机中添加串行端口,去除打印机以防止冲突,使用命名管道 名字为\.\pipe** 设置另一端为应用程序 虚拟机设置串口调试参数 以管理员权限打开cmd 打开调试模式bcdedit /debug on 设置调试绑定的串口号,用于以串口的形式调试 bcdedit /dbgsettings se.
2021-05-20 20:31:32
1020
原创 Qquazip使用
Qquazip的使用Qquazip的编译Quazip的使用 Qquazip的编译 Quazip库是一个用于压缩与解压缩的跨平台库文件,是对zlib的封装。使得实现压缩更加简单。可在git上找到对应的zlib 和quazip项目,编译quazip项目前最好先编译一下zlib,网上提供的zlib库很有可能和你的版本不兼容。 利用cmake可编译出zlib 库,在编译quazip时需要注意将zlib的头...
2019-09-18 19:38:58
1058
原创 简单工厂以计算器设计为例
简单工厂实质是对某些具有相似动作操作的一种封装与选择。例如要输入两数及运算符求解运算结果。为了代码逻辑与界面分离,需设定运算基类,加法、减法、乘法等类继承基类。由于运算符很多,如何选择这些运算符作为程序结果,这时就适用于简单工厂模式,它根据条件选用某种运算类,将运算类实例化,再添加运算类时,只需在工厂中加入分支语句,以及对应的运算类即可。...
2018-04-20 10:44:13
213
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅