2 苞米地里捉小鸡

尚未进行身份认证

程序蒟蒻

等级
TA的排名 9w+

windows驱动编程中的入口函数DriverEntry

1 入口函数的定义NTSTATUS DriverEntry( IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)这个函数的返回值是一个NTSTATUS类型,这个返回值的宏定义在ntstatus.h这个头文件中2参数PDRIVER_OBJECT它代表的是windows中的一个指向驱动对象的指针,前面的P就是Pointer的意思,这个驱动对象对应的就是我们要操作的.sys驱动这个驱动对象是Wi.

2020-05-28 09:54:43

windows驱动编程中的DO_DIRECT_IO和DO_BUFFERED_IO标志位

在学习《寒江独钓》这本书第3章的时候,书上说虚拟绑定设备需要拷贝真实设备对象的标志位,所以什么是标志位PDEVICE_OBJECT pDo;pDo->Flags;DO_DIRECT_IO和DO_BUFFERED_IO是什么标志位?在MSDN对DEVICE_OBJECT的介绍中有下面一段话:MSDN-DEVICE_OBJECTDO_BUFFERED_IO or DO_DIRECT_IOSpecifies the type of buffering that is used b

2020-05-27 16:56:32

内核编程常用API函数

编写内核程序的时候,尽量使用内核API,虽然类似于wcscpy、memcpy等函数也可以用,但这些函数没有长度的检查,很容易发生溢出错误,应该避免使用。主要的函数前缀有:Rtl-, Io-, Ke-, Zw-, Nt-, Ps-等。有以下几类:Ex系列--分配内存,获取互斥体等:ExAllocatePool,分配内存ExFreePool,释放内存ExAcquireFastMutex获取一个快速互斥体ExReleaseFastMutex释放一个快速互斥体ExRai...

2020-05-26 10:53:43

寒江独钓第3章——串口过滤

一、过滤的概念:  过滤是在不影响上层和下层接口的情况下,在Windows系统内核中加入新的层,从而不需要修改上层的软件或者下层的真是驱动程序,就加入了新的功能。1.1 设备绑定的内核API  进行过滤的最主要的方法是对一个设备对象(Device Object)进行绑定。通过编程可以生成一个虚拟设备对象,并“绑定”(Attach)在一个真实的设备上。一旦绑定,则本来操作系统发送给真实设备的请求,就会首先发送到这个虚拟设备。  在WDK中,有多个内核API能实现绑定的功能。以下三个绑定API是

2020-05-25 16:22:39

使用openSSL和开源httplib库搭建本地https代理服务器及https客户端

第一部分原理及环境搭建参考httplib库原理httplib搭建简单服务器与浏览器交互httplib GitHub1.0certmgr证书管理工具该项目本部分需要实现本地客户端与远端服务器进行通信(例如国外网站),那么如果直接进行Socket连接将会非常慢或者撞墙,那么这个时候考虑使用本地客户端先与本地代理服务器进行通信,然后本地客户端每次访问一次URL地址,都需要将证书添加到受信任的根证书颁发机构,不然证书以及私钥对不上服务器将不允许访问。查看证书可以通过cmd命令行certm..

2020-05-21 10:42:38

利用OpenSSL生成证书时出现问题(已解决)

创建Server证书请求出现错误2604:error:08064066:object identifier routines:OBJ_create:oid exists:crypto\objects\obj_dat.c:698: error in req创建Client证书请求出现错误16524:error:08064066:object identifier routines:OBJ_create:oid exists:crypto\objects\obj_dat.c:698:error in

2020-05-15 15:24:44

应用层R3程序以及内核R0程序实现获取时间功能

1.R3应用层windows下有专门的API获取系统时间以及本地时间通过调用GetLocalTime以及GetSystemTime函数原型:void GetSystemTime( LPSYSTEMTIME lpSystemTime);void GetLocalTime( LPSYSTEMTIME lpSystemTime);https://docs.microsoft.com/en-us/windows/win32/api/sysinfoapi/nf-sysinfoapi-g

2020-05-13 19:04:40

HANDLE HINSTANCE HWND等句柄的区别

HINSTANCE是应用程序实例句柄,HWND是窗口对象句柄,HANDLE是任意对象的句柄,CWnd是MFC中的窗口类。MSDN里面对于HINSTANCE的解释是"handletoaninstance"就是说是一个instance的句柄。而对instance的解释是"Anobjectforwhichmemoryisallocatedorwhichispersistent."占有内存的一个对象。对于HWND的解释是“Handletoawindow.”而对windo...

2020-05-13 16:25:29

重写windows系统HASH算法

1.首先Win+R输入Regedit打开注册表编辑器2.假设我们要看pdf格式的后缀应用程序的注册表路径就是HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\FileExts\.pdfUserChoice下的Hash是win10特有的校验值,防止第三方修改的微软秘密算法,win10经常弹出的默认程序出错就是这里的Hash出了问题。3.我们通过逆向方法直接从汇编语言逆向出了微软的HASH算法,但是是从二

2020-05-13 15:28:44

使用内核驱动Rtl函数实现更为安全的字符串处理

Rtl开头函数(Ntddk.h以及Ntstrsafe.h)大量的系统安全问题是由于薄弱的缓冲处理以及由此产生的缓冲区溢出造成的,而薄弱的缓冲区处理常常与字符串操作相关。c/c++语言运行库提供的标准字符串操作函数(strcpy, strcat, sprintf等)不能阻止在超出字符串尾端的写入。基于Windows XP SP1以及随后的操作系统的Windows DDK版本提供了安全字符串函数(safe string functions)。这类函数被设计的目的是用来取代相同功能的c/c++标准函数和.

2020-05-13 10:13:42

windows下的Handle句柄和Linux下的Fd文件标示符

在操作系统层面上,文件操作也有类似于FILE的一个概念,在Linux里,这叫做文件描述符(File Descriptor),而在Windows里,叫做句柄(Handle)(以下在没有歧义的时候统称为句柄)。用户通过某个函数打开文件以获得句柄,此后用户操纵文件皆通过该句柄进行。总之每个进程自己都会维护自己的信息,下面举一个实际的例子,在Linux中,值为0、1、2的fd分别代表标准输入、标准输出和标准错误输出。在程序中打开文件得到的fd从3开始增长。fd具体是什么呢?在内核中,每一个进程都有一个私有的..

2020-05-09 09:53:16

C++windows编程中的_In_、_Out_、_inout_等宏定义

首先贴上一些外文资料,有更多兴趣的可以参考SAL注释的相关资料,以及sal.h头文件// The helper annotations are only understood by the compiler version used by various // defect detection tools. When the regular compiler is running, they ...

2020-05-08 16:48:46

_tmain()和main()区别

_tmain()是unicode版本的的main()_tmain这个符号多见于VC++创建的控制台工程中,这个是为了保证移植unicode而加入的(一般_t、_T、T()这些东西都和unicode有关系),对于使用非unicode字符集的工程来说,实际上和main没有差别(其实就算是使用unicode字符集也未必有多大的差别)。1。main是C程序的函数,_tmain是main为了...

2020-05-08 11:08:29

stos dword ptr es:[edi]是什么意思

stos dword ptr es:[edi]stos,串操作指令,该指令把寄存器知EAX中(0)的值存于以指针ES:EDI(ES=023H为段选择子,EDI=12EAB5H为线形地址偏移,经段描述道符后,变为线性地址,再经分页机制,转为内物理地址)所指向内存单元为起始的一片存储单元里,并根据标志位DF对寄存器DI作相应增减。该指令不容影响任何标志位。ESI/EDI分别叫做"源/目标索引寄...

2020-05-07 10:30:34

同步IO、异步IO与阻塞非阻塞的关系

1、什么是同步、异步总之:可以将同步、异步行为理解为不同的行为方式定义:同步和异步关注的是消息通信机制 (synchronous communication/ asynchronous communication)。同步,就是调用某个东西时,调用方得等待这个调用返回结果才能继续往后执行。异步,和同步相反 调用方不会理解得到结果,而是在调用发出后、调用者可用继续执行后续操作,被调用者通过信号来...

2020-04-26 10:24:20

Unix网络编程中INADDR_ANY"的含义是什么?

写在前面:总之就是表示本机的IP地址因为一个主机可能不像我们普通的笔记本一般只拥有一块网卡,这对于需要进行大规模处理并发消息的服务器来说更是。所以将sin_addr.s_addr设置为INADDR_ANY就是等于能够证明主机IP地址的所有IP。因为这个字符串0.0.0.0转换成网络通用的二进制地址就是0,所以可以不加htonl将其转换成网络通用格式,但是为了标准的归一化,建议如下使用:s...

2020-04-25 14:41:48

sockaddr和sockaddr_in的区别

写在最前:这两个结构体主要的区别就是我们(指操作者)使用sockaddr_in设置端口、IP地址以及地址属性等参数,而不是直接使用sockaddr结构体,因为这个结构体是操作系统内核调用的,对于程序员来说不应该是透明的。所以一般的做法是我们设置好sockaddr_in结构体,然后将其显示转换为sockaddrstruct sockaddr和struct sockaddr_in这两个结...

2020-04-22 17:33:07

Unix高级编程《APUE》读书笔记——思维导图形式

终于看完unix高编了,试着利用XMind去记录看到的知识点,避免遗忘,算是自己的一个尝试吧。后面再补上对代码的思考和笔记。...

2020-04-18 14:45:26

第10章 信号

1. 常见信号还有其他的 见书265页2. signal函数

2020-04-18 11:05:27

c编译时的错误:程序中有游离的‘\240’‘\302’‘\XXX 时解决方案

偶尔从网上看到不错的源码,想研究下,不幸编译时遇到“错误:程序中有游离的‘\240’‘\302’”之类的错误,大量的源码不可能再全部重敲一遍,经过一番研究,终于让我找到简单的解决方案,还是本着让后人少走弯路的想法,分享下:首先,编译器提示的\xxx,都是8进制的编码,使用sed做下全文替换,命令如下:sed -i 's/\o240\|\o302//g' filename.cpp...

2020-04-16 09:24:02

查看更多

勋章 我的勋章
  • 领英
    领英
    绑定领英第三方账户获取
  • GitHub
    GitHub
    绑定GitHub第三方账户获取
  • 签到新秀
    签到新秀
    累计签到获取,不积跬步,无以至千里,继续坚持!
  • 新人勋章
    新人勋章
    用户发布第一条blink获赞超过3个即可获得
  • 阅读者勋章Lv1
    阅读者勋章Lv1
    授予在CSDN APP累计阅读博文达到3天的你,是你的坚持与努力,使你超越了昨天的自己。
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv3
    勤写标兵Lv3
    授予每个自然周发布7篇到8篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。
  • 原力新人
    原力新人
    在《原力计划【第二季】》打卡挑战活动中,成功参与本活动并发布一篇原创文章的博主,即可获得此勋章。
  • 分享学徒
    分享学徒
    成功上传1个资源即可获取