windows内核驱动
内核&驱动基础
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内核驱动相关推荐
- 【梅哥的Ring0湿润插入教程】第一课Windows内核/驱动编程概述及应用、商业驱动保护软件原理分析...
[梅哥的Ring0湿润插入教程] Email:mlkui@163.com 转载请注明出处,谢绝喷子记者等,如引起各类不适请自觉滚J8蛋! 第一课Windows内核/驱动编程概述及应用. 商业驱动保护软 ...
- 九七的Windows内核驱动开发 WIN10-2004+VS2019+WDK驱动开发环境安装及配置
WIN10-2004+VS2019+WDK驱动开发环境安装及配置 一.定义介绍 本节介绍如何在Windows10系统(2004版本,操作步骤中有如何查看版本)中安装VS2019及WDK开发包,并进 ...
- Windows 内核驱动签名策略
Windows的驱动签名策略起始于Win7 64位操作系统,从Win7 64位一直到 Win10 1511版本,驱动程序必须要有SHA1签名,且证书必须使用微软签发的证书交叉签名. 后来微软推行了SH ...
- Windows内核驱动中操作文件
一. 在驱动中使用文件 在Windows执行体中,通过文件对象来代表文件,该文件对象是一种由对象管理器管理的执行体对象.例如:目录也是由文件对象代表的. 内核组件通过对象名来引用文件,即在文件的全路径 ...
- 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 ...
- 详述欺骗性断言如何引发严重的 Windows 内核漏洞 (CVE-2020-0792)
聚焦源代码安全,网罗国内外最新资讯! 编译:奇安信代码卫士团队 2019年11月,微软发布软件更新,其中对 Windows 内核驱动 win32kfull.sys 的一个小的代码修改引发了一个严重漏 ...
- 寒江独钓-Windows内核安全编程(完整版).pdf
寒江独钓-Windows内核安全编程(完整版).pdf 编写Windows内核程序,就意味着这个程序可以执行任意指令,可以访问计算机所有的软件.硬件资源.因此,稍有不慎就有可能将系统变得不稳定.W ...
- 寒江独钓 Windows内核安全编程
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! < ...
- 寒江独钓——Windows内核安全编程
分享一下我老师大神的人工智能教程.零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow <寒江独钓- ...
- 寒江独钓:Windows内核安全编程(china-pub到货首发)
寒江独钓:Windows内核安全编程(china-pub到货首发) [作 者]谭文;杨潇;邵坚磊等 [丛 书 名] 驱网核心技术丛书 [出 版 社] 电子工业出版社 [书 号] 978712 ...
最新文章
- ZKFC服务异常:Parent znode does not exist.
- 解决Mono for android的xml编辑器无法代码完成的问题
- 【bzoj1010-toy】斜率优化入门模板
- 区分 JSON 字符串与JSON对象
- 语言身高预测实验注意事项_?新预训练模型CodeBERT出世,编程语言和自然语言都不在话下...
- idou老师教你学istio:监控能力介绍
- access 报表中序号自动_数据报表多种序号生成方式
- 没有IDEA与Eclipse,该怎么学Java?
- android 电脑 手柄游戏排行榜,各类吃鸡安卓模拟器测评排行,电脑玩手机游戏哪家强?...
- 不会写Java面试简历?看这一篇就够了(项目经历,个人技能)
- 3-20模拟赛【果冻之王】题解
- VBA WORD 光标处理
- 高等数学知识点总结——导数定义及性质、微积分、泰勒展开、洛必达法则、函数单调性判断
- myeclipse中设置项目编码方式
- 搭建一个多对多的音视频通信服务
- VS2017中处理命令行参数的方法----C++语言 Windows系统
- 实战引流技巧,教你如何做好运营
- js 递归函数(函数自己调用自己)
- 程序人生--2010年(60)
- 读书笔记-《ON JAVA 中文版》-摘要8[第八章 复用]
热门文章
- 初学者怎样看懂python代码_初学者怎样看懂代码?
- snipaste如何滚动截图_一文解决几乎所有截图需求:我多年来用过的优秀截图软件和插件推荐...
- 利用python炒股talib_TaLib在股票技术分析中的应用
- SAM2695 带效果器的低功耗单芯片合成器
- 从零打造Android计算器(安卓开发初体验)
- java编写安卓计算器_Android计算器编写代码
- Java开发手册 Java学习手册教程(MtJava开发手册)
- WiFi图标在任务栏里不见了,提示:适配器Qualcomn Atheros QCA9377 Wireless Network Adapter遇到驱动程序或硬件相关的问题
- python书在线阅读_这7本O’Reilly推出的免费Python电子书,够你看了
- 镜头像差之二——色差