内核&驱动基础


WDK(Windows Driver Kit)

内核编程需要使用WDK

WDK 下载

windows xp wdk 下载地址

WDK 安装

勾选所有的安装项,避免错过一些例子

  • 默认安装目录: C:\WinDDK

first驱动开发

源码 first.c

#include <ntddk.h>#define DEBUG/** 卸载函数*/
VOID DriverUnload(PDRIVER_OBJECT driver)
{DbgPrint("good bye my world...\r\n");
}/** 装载函数*/
NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
{
/** 在调试时使用int 3,正常运行时驱动运行int 3 会导致蓝屏*/
#ifdef DEBUG_asm int 3
#endifDbgPrint("despacito world... \r\n");driver->DriverUnload = DriverUnload;return STATUS_SUCCESS;
}

编译驱动

makefile

驱动编写需要Makefile,放在和源文件同级目录即可

#############################################################################
#
#       Copyright (C) Microsoft Corporation 1998, 1999
#       All Rights Reserved.
#
##############################################################################
# DO NOT EDIT THIS FILE!!!  Edit .\sources. if you want to add a new source
# file to this component.  This file merely indirects to the real make file
# that is shared by all the driver components of Windows NT
##
# Build using BUILD.EXE (Do not edit this section of this file, edit SOURCES)
#
# Ensure that build environment is at least Windows Vista:
# For Reference
#     0x500 == Windows 2000
#     0x501 == Windows XP
#     0x502 == Windows Server 2003
#     0x600 == Windows Vista
#
MINIMUM_NT_TARGET_VERSION=0x501
!INCLUDE $(NTMAKEENV)\makefile.def

sources

除了makefile,还需要sources文件来定义模块的编译信息

TARGETNAME=first
TARGETTYPE=DRIVER
SOURCES=first.c

compile driver

开始->所有程序->Windows Driver Kits->x86 Checked Build Enviroment

  • 跳转到源码所在目录,并输入 “build” 命令

  • 会在源码目录下产生编译结果文件夹

服务安装

使用srvinstw.exe安装驱动程序

  • 启动这个服务所使用的的名称,不需要与驱动文件名相同

  • 驱动文件路径必须手动设置, 无法浏览选择

  • 选择设备驱动

  • NT驱动器目标名不设置,直接下一步

  • 启动类型设置为手动方便调试

装载驱动

net start lxhuster
net stop lxhuster

驱动打印查看

使用DebugView.exe查看驱动打印的内核输出

  • 注意勾选捕获内核消息

调试first驱动

win内核调试方法有winDbg、Syser、Softice

  • winDbg: 微软自家免费调试工具,不解释
  • Syser: 国人开发
  • Softice :有了winDbg之后,这个工具就悲剧了。

使用winDbg调试驱动

由于winDbg调试内核为双机模式,所以通过本地机器调试虚拟机中的驱动

设置windows为调试模式
  • xp系统的设置
    1> 显示所有系统保护文件

2> 将虚拟机中打印机删除

  • 如果不删除,新建的串口

3> 添加新的串口设备(用来调试内核)

  • 注意串口使用”命名管道”,同时第三个选项修改为”另一端是应用程序”

4> 设置xp启动进入调试模式

  • 修改文件C:\boot.ini,加入如下代码:(设置进入调试,以及波特率)
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional lxhuster debug" /noexecute=optin /fastdetect /debug /debugport=com1 /baudrate=115200

  • 重启进入系统

5> 使用winDbg调试

  • 重启虚拟机系统后,立即启动winDbg调试内核
windbg.exe -b -k com:port=\\.\pipe\com_1,baud=115200,pipe

-b:初始断点 -k:内核调试 com:port:命名管道 baud:波特率 pipe:管道

  • 输入命令: g 继续执行进入系统

6> 设置winDbg符号

File->Symbol File Path

  • 设置windows符号和first驱动pdb地址,地址间使用分号隔开
src*e:\symbols*http://msdl.microsoft.com/download/symbols;F:\windows\driver\first\objchk_wxp_x86\i386
  • net start lxhuster 启动驱动,断点被winDbg捕获

附加

  • 装载驱动显示系统错误5,cmd没有管理员权限

  • 装载驱动显示系统错误1275,说明驱动为32位想装载到64位系统上

内核编程环境


共享内核空间

对于32位系统,低2GB是用户空间,高2GB是内核空间

数据类型

基本数据类型

微软重定义了数据类型

  • unsigned long 重定义 ULONG
  • unsigned char 重定义 UCHAR
  • unsigned int 重定义 UINT
  • void 重定义 VOID
  • unsigned long * 重定义 PULONG
  • unsigned char * 重定义 PUCHAR
  • unsigned int * 重定义 PUINT
  • void * 重定义 PVOID

    返回状态

windows内核驱动相关推荐

  1. 【梅哥的Ring0湿润插入教程】第一课Windows内核/驱动编程概述及应用、商业驱动保护软件原理分析...

    [梅哥的Ring0湿润插入教程] Email:mlkui@163.com 转载请注明出处,谢绝喷子记者等,如引起各类不适请自觉滚J8蛋! 第一课Windows内核/驱动编程概述及应用. 商业驱动保护软 ...

  2. 九七的Windows内核驱动开发 WIN10-2004+VS2019+WDK驱动开发环境安装及配置

    WIN10-2004+VS2019+WDK驱动开发环境安装及配置 一.定义介绍   本节介绍如何在Windows10系统(2004版本,操作步骤中有如何查看版本)中安装VS2019及WDK开发包,并进 ...

  3. Windows 内核驱动签名策略

    Windows的驱动签名策略起始于Win7 64位操作系统,从Win7 64位一直到 Win10 1511版本,驱动程序必须要有SHA1签名,且证书必须使用微软签发的证书交叉签名. 后来微软推行了SH ...

  4. Windows内核驱动中操作文件

    一. 在驱动中使用文件 在Windows执行体中,通过文件对象来代表文件,该文件对象是一种由对象管理器管理的执行体对象.例如:目录也是由文件对象代表的. 内核组件通过对象名来引用文件,即在文件的全路径 ...

  5. Windows网络驱动、NDIS驱动(微端口驱动、中间层驱动、协议驱动)、TDI驱动(网络传输层过滤)、WFP(Windows Filtering Platfrom))

    catalog 0.引言 1.Windows 2000网络结构和OSI模型 2.NDIS驱动 3.NDIS微端口驱动编程实例 4.NDIS中间层驱动编程实例 5.TDI驱动 6.TDI驱动 7.TDI ...

  6. 详述欺骗性断言如何引发严重的 Windows 内核漏洞 (CVE-2020-0792)

     聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 2019年11月,微软发布软件更新,其中对 Windows 内核驱动 win32kfull.sys 的一个小的代码修改引发了一个严重漏 ...

  7. 寒江独钓-Windows内核安全编程(完整版).pdf

    寒江独钓-Windows内核安全编程(完整版).pdf   编写Windows内核程序,就意味着这个程序可以执行任意指令,可以访问计算机所有的软件.硬件资源.因此,稍有不慎就有可能将系统变得不稳定.W ...

  8. 寒江独钓 Windows内核安全编程

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! < ...

  9. 寒江独钓——Windows内核安全编程

    分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow <寒江独钓- ...

  10. 寒江独钓:Windows内核安全编程(china-pub到货首发)

    寒江独钓:Windows内核安全编程(china-pub到货首发) [作 者]谭文;杨潇;邵坚磊等 [丛 书 名] 驱网核心技术丛书  [出 版 社] 电子工业出版社     [书 号] 978712 ...

最新文章

  1. ZKFC服务异常:Parent znode does not exist.
  2. 解决Mono for android的xml编辑器无法代码完成的问题
  3. 【bzoj1010-toy】斜率优化入门模板
  4. 区分 JSON 字符串与JSON对象
  5. 语言身高预测实验注意事项_?新预训练模型CodeBERT出世,编程语言和自然语言都不在话下...
  6. idou老师教你学istio:监控能力介绍
  7. access 报表中序号自动_数据报表多种序号生成方式
  8. 没有IDEA与Eclipse,该怎么学Java?
  9. android 电脑 手柄游戏排行榜,各类吃鸡安卓模拟器测评排行,电脑玩手机游戏哪家强?...
  10. 不会写Java面试简历?看这一篇就够了(项目经历,个人技能)
  11. 3-20模拟赛【果冻之王】题解
  12. VBA WORD 光标处理
  13. 高等数学知识点总结——导数定义及性质、微积分、泰勒展开、洛必达法则、函数单调性判断
  14. myeclipse中设置项目编码方式
  15. 搭建一个多对多的音视频通信服务
  16. VS2017中处理命令行参数的方法----C++语言 Windows系统
  17. 实战引流技巧,教你如何做好运营
  18. js 递归函数(函数自己调用自己)
  19. 程序人生--2010年(60)
  20. 读书笔记-《ON JAVA 中文版》-摘要8[第八章 复用]

热门文章

  1. 初学者怎样看懂python代码_初学者怎样看懂代码?
  2. snipaste如何滚动截图_一文解决几乎所有截图需求:我多年来用过的优秀截图软件和插件推荐...
  3. 利用python炒股talib_TaLib在股票技术分析中的应用
  4. SAM2695 带效果器的低功耗单芯片合成器
  5. 从零打造Android计算器(安卓开发初体验)
  6. java编写安卓计算器_Android计算器编写代码
  7. Java开发手册 Java学习手册教程(MtJava开发手册)
  8. WiFi图标在任务栏里不见了,提示:适配器Qualcomn Atheros QCA9377 Wireless Network Adapter遇到驱动程序或硬件相关的问题
  9. python书在线阅读_这7本O’Reilly推出的免费Python电子书,够你看了
  10. 镜头像差之二——色差