自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(24)
  • 收藏
  • 关注

原创 句柄的封装

代码优化

2022-09-30 11:15:08 366

原创 Linux 简单知识

指令格式:命令 [选项] [操作对象] eg: ls -l -a /homepwd -print current working directoryls -list directory contentscd -change directorymkdir -make directorymkdir -p a/b/c 多层目录touch -change file timestamp 创建文件rm -remove file or directoryrm -rf dirctorycp -copy

2022-01-10 22:19:10 385

原创 Cmake使用

PROJECT(ProName):指定工程名称隐式定义ProName_binary_dir proName_source_dir应对可能工程名改变 Project_binary_dir project_source_dirSet(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 269

原创 TCP/IP原理

TCP/IP通俗理解HTTP相关

2021-06-22 15:35:47 66 1

原创 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 44

转载 网络数据包传输逻辑

概念解析OSI模型(Open System Interconnection Reference Model)开放式系统互联通信参考模型 是一个计算机互联为网络的标准框架。OSI将计算机网络体系结构(architecture)划分为以下七层:物理层: 将数据转换为可通过物理介质传送的电子信号 相当于邮局中的搬运工人。数据链路层: 决定访问网络介质的方式。在此层将数据分帧,并处理流控制。本层指定拓扑结构并提供硬件寻址,相当于邮局中的装拆箱工人。网络层: 使用权数据路由经过大型网络 相当于邮局中的排序

2021-06-04 10:57:34 343

原创 WFP知识总结

开发者在内核态使用WFP实现网络数据包过滤步骤:定义一个或多个呼出接口,向过滤引擎注册呼出接口添加呼出接口到过滤引擎设计一个或多个子层,将子层添加到分层中设计过滤器,把呼出接口、分层、子层和过滤器关联起来,向过滤引擎添加过滤器注册呼出接口 FwpsCalloutRegister0/FwpsCalloutRegister1/FwpsCalloutRegister2卸载呼出接口 FwpsCalloutUnregisterById/FwpsCalloutUnregisterByKey打开过滤引擎

2021-06-04 09:37:46 415

原创 WDF程序参数解析

为什么用注册表存储驱动信息RegistryPath驱动加载非常早,甚至仅仅晚于windows内核,这时文件系统还没建立,驱动程序如果在此时需要享有自己的可操作空间,只有注册表可使用。HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services为驱动信息存储位置。WDF_DRIVER_CONFIG 驱动程序的一些可配置参数,其中包含了EvtDriverDeviceAdd和EvtDriverUnload的入口地址以及驱动初始化时的一些标志和分配内存使用的tag值。

2021-05-31 15:37:03 824

原创 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 136

原创 驱动程序调用驱动程序

以文件句柄形式调用其他驱动程序ZwCreateFile ZwReadFile ZwWriteFile通过设备指针调用其他驱动程序IoGetDeviceObjectPointer获取设备指针创建IRP传递给驱动的派遣函数得到设备指针 IoGetDeviceObjectPointer创建IRP     IoBuildSynchronousFsdRequest    IoBuildAsynchronousFsdRequest 

2021-05-23 17:28:15 220

原创 定时器

I/O定时器IoInitializeTimer(pDevObj, OnTimer, NULL)IoStartTimerIoStopTimer#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 67

原创 驱动程序同步有关api

中断KeWait ForSingleObjectKeWaitForMultipleObjects线程PsCreateSystemThreadPsTerminateSystemThreadIoGetCurrentProcess事件KeInitializeEventKeSetEventObRegerenceObjectByHandle //减少引用计数IoCreateNotificationEvent //通知事件IoCreateSynchronizationEvent..

2021-05-22 17:00:21 111

原创 文件读写方式介绍

驱动的读写方式分为:缓冲区方式,直接方式,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 161

原创 注册表操作

梳理来源于张帆 windows驱动开发技术详解#define MY_REG_SOFTWARE_KEY_NAME L"\\Registry\\Machine\\Software\\Zhangfan"#pragma INITCODEVOID CreateRegTest() { //创建或打开某注册表项目 UNICODE_STRING RegUnicodeString; HANDLE hRegister; //初始化UNICODE_STRING字符串 RtlInitUnicodeStrin

2021-05-22 11:52:53 101

原创 文件操作

梳理来源于张帆 windows驱动开发技术详解#pragma INITCODEVOID CreateFileTest() { OBJECT_ATTRIBUTES objectAttributes; IO_STATUS_BLOCK iostatus; HANDLE hfile; UNICODE_STRING logFileUnicodeString; //初始化UNICODE_STRING字符串 RtlInitUnicodeString( &logFileUnicodeString

2021-05-22 11:02:10 112

原创 字符串操作

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 50

原创 使用lookside

目的频繁分配内存时,为减少内存碎片的产生可使用lookasideAPIPAGE_LOOKASIDE_LISTExInitializePagedLookasideListExInitializeNPagedLooksideListExAllocateFromPagedLookasideListExAllocateFromNPagedLookasideListExFreeToPagedLookasideListEXFreeToNPagedLookasideListTesttypedef M

2021-05-22 10:38:31 179

原创 链表操作

APIInitializeListHeadIsListEmptyInsertHeadListInsertTailListRemoveHeadListRemoveTailListCONTANING_RECORD使用typedef struct _MYDATASTRUCT{ UNLONG number; LIST_ENTRY ListEntry;}MYDATASTRUCT, *PMYDATASTRUCT#pragma INITCODEVOID Test(){ //初始化链表 L

2021-05-21 19:47:03 102

原创 内核模式API

内存操作ExAllocatePool()ExFreePool()RtlCopyMemoryRtlZeroMemoryRtlFillMemoryRtlRemoveMemoryRtlCompareMemory快查表 PAGED_LOOKASIDE_LIST字符串操作RtlInitUnicodeStringRtlCopyUnicodeStringRtlCompareUnicodeStirngRtlUpperUnicodeStringRtlUnicodeStringToInteg..

2021-05-21 18:35:18 95

原创 WDM HelloWord分析

书籍windows驱动开发技术详解 张帆内存操作ExAllocatePool() ExFreePool()双向链表typedef struct _LIST_ENTRY{ struct _LIST_ENTRY *Flink; struct _LIST_ENTRY *Blink;} LISTENTRYStruct MyListData { LIST_ENTRY list; Int age; int num; UnicodeString Name; }内存RtlCopyM

2021-05-21 17:40:42 148 1

原创 win10添加过时硬件调试wdm

以管理员权限启动cmd hdwwiz选择系统设备中的标准系统设备

2021-05-21 15:52:15 2757

原创 vs2019 NT驱动双机调试

下载vs2019 安装C++桌面开发环境,如果后期有报缓解库的问题,需要在单个组件中安装对应版本的缓解库下载对应版本的wdk安装vmware虚拟机,最好操作系统的版本与物理机相同,一般都按专业版win10在虚拟机中添加串行端口,去除打印机以防止冲突,使用命名管道 名字为\.\pipe** 设置另一端为应用程序虚拟机设置串口调试参数以管理员权限打开cmd 打开调试模式bcdedit /debug on设置调试绑定的串口号,用于以串口的形式调试 bcdedit /dbgsettings se.

2021-05-20 20:31:32 690

原创 Qquazip使用

Qquazip的使用Qquazip的编译Quazip的使用Qquazip的编译Quazip库是一个用于压缩与解压缩的跨平台库文件,是对zlib的封装。使得实现压缩更加简单。可在git上找到对应的zlib 和quazip项目,编译quazip项目前最好先编译一下zlib,网上提供的zlib库很有可能和你的版本不兼容。利用cmake可编译出zlib 库,在编译quazip时需要注意将zlib的头...

2019-09-18 19:38:58 745

原创 简单工厂以计算器设计为例

简单工厂实质是对某些具有相似动作操作的一种封装与选择。例如要输入两数及运算符求解运算结果。为了代码逻辑与界面分离,需设定运算基类,加法、减法、乘法等类继承基类。由于运算符很多,如何选择这些运算符作为程序结果,这时就适用于简单工厂模式,它根据条件选用某种运算类,将运算类实例化,再添加运算类时,只需在工厂中加入分支语句,以及对应的运算类即可。...

2018-04-20 10:44:13 85

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除