windows内核&驱动
来源:互联网 发布:tough cookie.js 编辑:程序博客网 时间:2024/06/07 06:51
内核&驱动基础
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#endif DbgPrint("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=firstTARGETTYPE=DRIVERSOURCES=first.c
compile driver
开始->所有程序->Windows Driver Kits->x86 Checked Build Enviroment
- 跳转到源码所在目录,并输入 “build” 命令
- 会在源码目录下产生编译结果文件夹
服务安装
使用srvinstw.exe安装驱动程序
- 启动这个服务所使用的的名称,不需要与驱动文件名相同
- 驱动文件路径必须手动设置, 无法浏览选择
- 选择设备驱动
- NT驱动器目标名不设置,直接下一步
- 启动类型设置为手动方便调试
装载驱动
net start lxhusternet 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
返回状态
阅读全文
0 0
- windows内核&驱动
- windows内核驱动编程基础
- Windows内核驱动开发入门学习资料
- Windows内核驱动中操作文件
- Windows内核常见数据结构(驱动相关)
- Windows内核遍历驱动模块源码分析
- Windows内核驱动开发入门学习资料
- Windows内核驱动开发入门学习资料
- 视频:60分钟理解Windows内核驱动
- Windows内核驱动开发入门学习资料
- Windows内核驱动开发入门学习资料
- windows内核情景分析---设备驱动
- 创建Windows Phone内核模式驱动
- Windows 内核驱动I/O定时器
- Windows内核驱动开发入门学习资料
- Windows内核驱动编程笔记(转载集合)
- Windows内核驱动开发入门学习资料
- Windows内核安全与驱动开发
- Node入门
- kotlin的必修之路
- 20170601
- 数据库分年度统计数据量
- [Linux]用户(user)和用户组(group)管理与操作教程
- windows内核&驱动
- 463.整数排序
- Android中自动生成的APK存放目录
- jackson反序列化漏洞分析
- 老史聊架构:当当网架构优化的几点心得
- MySQL常用查询语句
- 367. Valid Perfect Square
- 明朝崇祯元年状元刘若宰后裔在松滋
- 视图外连接空字符串问题的解决