寒江独钓1

驱动模型区分:
WDM 必须满足n种被要求的特性(如电源管理,即插即用);如果没有这些功能,则统一称为NT式驱动;如果调用了WDF的内核API,则称为WDF驱动。

本书关注于通用的内核程序开发,不是针对某种硬件。例如,文件系统驱动,存储设备驱动,网络驱动。不是为了驱动某个硬件,而是在通用的windows上实现某种功能。

开发环境的搭建:

下载WDK,编译调试。无需VS,VS只是方便工程管理和编码。

因为不是应用程序,所以所有win32API都不能使用。部分C Runtime函数也不能使用,但文档中说明的函数则可以使用。

简单代码示例:

#include <ntddk.h>// 提供一个Unload函数只是为了
VOID DriverUnload(PDRIVER_OBJECT driver)
{// 但是实际上我们什么都不做,只打印一句话:DbgPrint("first: Our driver is unloading…\r\n");
}// DriverEntry,入口函数。相当于main。
NTSTATUS DriverEntry(PDRIVER_OBJECT driver, PUNICODE_STRING reg_path)
{
#if DBG
//       _asm int 3
#endif// 这是我们的内核模块的入口,可以在这里写入我们想写的东西。// 我在这里打印一句话。因为”Hello,world” 常常被高手耻笑,所以// 我们打印一点别的。DbgPrint("first: Hello, my salary!");// 设置一个卸载函数便于这个函数能退出。driver->DriverUnload = DriverUnload;return STATUS_SUCCESS;
}

DriverEntry 是每个内核模块的入口,在加载这个模块时,被系统进程System调用一次。

设置DriverUnload函数指针,这样这个模块可以被动态地卸载。如果没有设置DriverUnload指针,则一个内核模块一旦被加载就不能卸载了。

增加两个文件,以便WDK build。

makefile,直接到Sample下找个,无需修改。sources,需要编译那些文件,只需要.c,不要加入.h,以及编译.sys的名字。

TARGETNAME=first
TARGETTYPE=DRIVER
SOURCES=first.c
TARGETPATH=obj

编译选择,Check,Free。build。

安装工具
srvinstw.exe,通过“安装服务”,指定.sys文件路径,“设备驱动”,指定为“手动”,安装驱动。

通过“net start xxx”启动驱动。“net stop xxx”停止驱动。(系统软件服务列表中,是不显示该项的)

虚拟机调试配置,以在前面的Blog中写明。

调试

windbg下载安装。设置Symbol,SourceFile,Image。Windbg把内核视为一个整体,没有必要告诉它需要调试哪个具体的模块。只要指定

Symbol和Source。

在设置断点不方便的地方,小技巧。
#if DBG
_asm int 3  //等于手动设置断点,但是只在调试状态,在非调试状态会蓝屏。
#endif

转载于:https://www.cnblogs.com/huangyong9527/archive/2012/07/25/2608159.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/475044.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

html canvas直线进度条,js+HTML5 canvas 实现简单的加载条(进度条)功能示例

本文实例讲述了jsHTML5 canvas 实现简单的加载条(进度条)功能。分享给大家供大家参考&#xff0c;具体如下&#xff1a;www.jb51.net canvas实现加载条动画/** 获取canvas, canvas本身没有画图能力&#xff0c;相当于一个画布&#xff0c;提供绘制图形的地方* document.getElem…

android 打开移动开关,教你一个让安卓手机运行更流畅的小技巧:打开这个开关即可...

原标题&#xff1a;教你一个让安卓手机运行更流畅的小技巧&#xff1a;打开这个开关即可安卓用户对于“系统优化”这个词一定不会陌生&#xff0c;因为Android系统越用越卡的毛病难以解决&#xff0c;必须进行优化才能保持流畅。那么如何调教才能让爱机达到最快的运行速度呢&am…

matplotlib 绘制梯度下降求解过程

机器学习过程中经常需要可视化&#xff0c;有助于加强对模型和参数的理解。 下面对梯度下降过程进行动图演示&#xff0c;可以修改不同的学习率&#xff0c;观看效果。 import numpy as np import matplotlib.pyplot as plt from IPython import displayX 2*np.random.rand(…

android aop 权限检查,AOP简单拦截实现验证权限功能

普通的权限验证一般都是写一个方法,然后再执行方法之前检查一下权限这样做的坏处是每个地方都需要修改加权限验证而用AOP的方式来做的话就很方便网上找了一个例子,测试通过,感觉蛮好用的,记录一下[AttributeUsage(AttributeTargets.All, AllowMultiple false, Inherited true…

COJ 1081 集训队分组

http://acm.csu.edu.cn/OnlineJudge/problem.php?id1081 不是太会写拓扑排序&#xff0c;所以再写一遍。 /*Accepted 880 kb 268 ms C/ 1671 B 2012-07-29 17:08:30*/ #include<cstdio> #include<cstring> #include<cstdlib>const int MAXN …

LeetCode 132. 分割回文串 II(DP)

文章目录1. 题目2. 解题1. 题目 给定一个字符串 s&#xff0c;将 s 分割成一些子串&#xff0c;使每个子串都是回文串。 返回符合要求的最少分割次数。 示例: 输入: "aab" 输出: 1 解释: 进行一次分割就可将 s 分割成 ["aa","b"] 这样两个回文…

html无框架,HTML框架技术详例

要将几个.html文件放入一个文件夹//UntitledFrameset-2.html 源码--------------------------------主框架//UntitledFrame-2.html源码------------------------------无标题文档XXXXX系统//UntitledFrame-3.html源码------------------------------无标题文档用户管理用户查询…

LeetCode 第 30 场双周赛(477/2545,前18.7%,第2次全部通过)

文章目录1. 比赛结果2. 题目1. LeetCode 5177. 转变日期格式 easy2. LeetCode 5445. 子数组和排序后的区间和 medium3. LeetCode 5446. 三次操作后最大值与最小值的最小差 medium4. LeetCode 5447. 石子游戏 IV hard&#xff08;博弈DP&#xff09;1. 比赛结果 时隔近5个月&am…

2012TI杯竞赛学习-----------时钟系统篇

因为参加了暑假的TI杯电子设计大赛&#xff0c;所以学习MSP430系列单片机&#xff0c;截止目前学习已有十几天&#xff0c;本想等比赛结束再做总结&#xff0c;后与人交流后发现&#xff0c;及时写下学习心得&#xff0c;与他人进行交流&#xff0c;更有益于今后学习。 430不同…

wp博客链接.html,WordPress博客文章标题链接到自定义网址链接

WordPress 支持多种文章形式&#xff0c;相信不少博主遇到过需要把wordpress文章的标题链接到自定义的URL地址的情况&#xff0c;点击文章链接时不是直接访问文章详情页面&#xff0c;而是直接访问分享的链接网页&#xff0c;就像微博一样。要实现这种效果&#xff0c;可以使用…

One year ago begininginginginging!

One year ago begininginginginging!转载于:https://www.cnblogs.com/gordon-ge/archive/2012/07/30/2615027.html

LeetCode 第 197 场周赛(468/5273,前8.88%)

文章目录1. 比赛结果2. 题目1. LeetCode 5460. 好数对的数目 easy2. LeetCode 5461. 仅含 1 的子串数 medium3. LeetCode 5211. 概率最大的路径 medium&#xff08;Dijkstra&#xff09;4. LeetCode 5463. 服务中心的最佳位置 hard&#xff08;最优化退火算法&#xff09;1. 比…

.html文件没法解析,HTML解析 - 从.html文件

这似乎为我工作(采取了一些试验和错误的)Grab(grouporg.ccil.cowan.tagsoup, moduletagsoup, version1.2)import org.ccil.cowan.tagsoup.*import groovy.xml.*String htmlTxt """SelectMaleFemale"""// Define our TagSoup backed parserdef s…

How to set up native subversion (javahl) with Subclipse on Mac OS X

macPorts 安装教程 Install the javahl binding with MacPorts: sudo port install subversion bash_completion sudo port install subversion-javahlbindings奇怪的是&#xff0c;安装到一半&#xff0c;下载不了了&#xff0c;晕死&#xff0c;先记下来吧。 Run eclipse, a…

LeetCode 174. 地下城游戏(DP)

文章目录1. 题目2. 解题1. 题目 一些坏人抓住了公主&#xff08;P&#xff09;并将她关在了地下城的右下角。 地下城是由 M x N 个房间组成的二维网格。 我们英勇的骑士&#xff08;K&#xff09;最初被安置在左上角的房间里&#xff0c; 他必须穿过地下城并通过对抗坏人来拯救…

计算机考研英语什么时候考试,计算机考研:早期复习三大注意事项

新的一年已经开始&#xff0c;这个时间对于很多考研的考生来说&#xff0c;都还是最初的准备阶段&#xff0c;而对于即将参加考研的考生来说&#xff0c;这个时期开始复习还是有些早&#xff0c;不过想要复习得更为充分&#xff0c;现在就已经可以开始了&#xff0c;今天沪江的…

Windows注册表操作基础代码

Windows注册表操作基础代码Windows下对注册表进行操作使用的一段基础代码Reg.h: #pragma once#include<assert.h>#include<windows.h>class Reg{HKEY hkey;public:void open(HKEY root,char*subKey);//打开注册表键&#xff0c;不存在则创建void del(HKEY root,cha…

[Hands On ML] 4. 训练模型

文章目录1. 线性回归1.1 正规方程求解1.2 时间复杂度1.3 梯度下降1.4 批量梯度下降1.5 随机梯度下降1.6 小批量梯度下降2. 多项式回归3. 线性模型正则化4. 早期停止法&#xff08;Early Stopping&#xff09;本文为《机器学习实战&#xff1a;基于Scikit-Learn和TensorFlow》的…

非常经典的C字符串函数的实现

1. strlen(),计算字符串长度 1 int strlen(const char string) 2 3 { 4 5 int i0; 6 7 while(string[i]) i; 8 9 return i; 10 11 } 2. strcpy(), 字符串拷贝. 1 char *strcpy(char *destination, const char *source) 2 3 { 4 5 while…

LeetCode 895. 最大频率栈(哈希+按频数存储)

文章目录1. 题目2. 解题1. 题目 实现 FreqStack&#xff0c;模拟类似栈的数据结构的操作的一个类。 FreqStack 有两个函数&#xff1a; push(int x)&#xff0c;将整数 x 推入栈中。pop()&#xff0c;它移除并返回栈中出现最频繁的元素。 如果最频繁的元素不只一个&#xff…