当前位置:

首页 > 软件教程 > 内核开发第二讲:编写Kernel程序注意事项

内核开发第二讲:编写Kernel程序注意事项

一、函数多线程的安全问题函数多线程安全指的是,当一个函数在被调用但尚未返回时,如果被其他线程再次调用,其执行结果仍然是可靠的。在用户层编写多线程程序时,我们通常会关注同步问题,以确保线程安全。同样地,在内核中也需要注意以下几点:可能在多线程环境中运行的函数必须保证线程安全。如果运行在单线程环境中,则不需要考虑线程安全性,因为没有其他线程操作。如果函数A调用函数B,函数B调用函数C,且A和B都运行在同一单线程中,那么C也应保证运行在单线程中。如果函数A调用函数B,函数B调用函数C,且B和C可能在多线程环境中

本文目录

    一、函数多线程的安全问题

    函数多线程安全指的是,当一个函数在被调用但尚未返回时,如果被其他线程再次调用,其执行结果仍然是可靠的。

    在用户层编写多线程程序时,我们通常会关注同步问题,以确保线程安全。同样地,在内核中也需要注意以下几点:

    1. 可能在多线程环境中运行的函数必须保证线程安全。如果运行在单线程环境中,则不需要考虑线程安全性,因为没有其他线程操作。

    2. 如果函数A调用函数B,函数B调用函数C,且A和B都运行在同一单线程中,那么C也应保证运行在单线程中。

    3. 如果函数A调用函数B,函数B调用函数C,且B和C可能在多线程环境中运行,那么A也可能在多线程环境中运行。因为A会调用B和C,所以B和C在多线程环境中运行。

    4. 如果函数A调用函数B,函数B调用函数C,且B运行在多线程环境中,那么需要采取多线程序列化为单线程的强制措施,使得函数B在单线程中运行。

    内核中的“多线程序列化为单线程的强制措施”包括互斥体和自旋锁。

    1. 只使用函数内部资源,不使用全局变量、静态变量或其他全局性资源的函数是多线程安全的。

    2. 如果使用全局变量、静态变量等,那么需要使用同步函数来进行同步。

    二、中断级别

    这篇博客主要讨论了理论和需要注意的问题。在内核中,Kernel API有中断级别之分。

    在用户层,代码都是同级别运行,因此不需要关心中断级别,但在Kernel内核中,必须关注中断级别,否则可能会导致持续的问题。

    目前,中断级别有两个:

    1. Passive级别。
    2. Dispatch级别。

    关于这两种级别,内核博客的前两课有简单介绍其本质。我们只需注意这两种级别的区别即可。

    简单的函数运行在Dispatch级别中。因此,在调用任何Kernel API之前,都需要查询一下中断级别。

    Dispatch级别比Passive级别高。

    如何判断中断级别?

    • 调用路径:A -> B -> C,那么C的调用路径就是A和B,因为是一条线。
    • 调用源:A -> B -> C,那么一次递推到A,那么C的调用源就是A。

    判断规则:

    1. 如果调用路径上没有特殊情况(导致中断级别提高或降低的情况),那么函数执行时的中断级别与其调用源级别相同。
    2. 如果调用路径上有获取自旋锁,则中断级别随之提高;如果有释放自旋锁,则中断级别降低。

    内核中的中断级别:

    调用源级别
    DriverEntryPassive级别
    DriverUnloadPassive级别
    各种分发函数Passive级别
    完成函数Dispatch级别
    各种NDIS回调函数Dispatch级别

    查询Kernel API时,会发现有说明该API在什么级别使用。

    例如:

    内核开发知识第二讲,编写Kerner 程序中注意的问题.

    可以看到中断级别是...

    疑问?

    如果当前代码运行在DISPATCH级别,但必须调用PASSIVE级别的API,该怎么办?可以利用内核API降低当前中断级别吗?

    答:

    不可以。Windows代码都是在规范的级别上运行的,任意降低或提高都会影响代码的执行。因此,在需要调用这种API时,可以创建一个专门的线程来执行PASSIVE级别的代码。

    解决方法很多,可以在网络上搜索相关资料。博主也是自学,所以暂时还没有接触到更多方法。

    三、内核中宏代码代表的意思

    在内核中查看API时,可以看到许多宏,这些宏都是空宏,用于说明。

    例如:

    • IN:表示这个参数是传递进去的。
    • OUT:表示这个参数是传出参数。

    例如:

    __in_bcount(StatusBuffsize) IN PVOID statusBuffer;

    这里的参数表示statusBuffer的大小依赖于StatusBuffsize这个参数来指定。

    四、指定函数位置的预编译指令

    这个小主题本来可以放在第三个问题中,但单独说明更重要。

    #pragma alloc_text()

    这个宏表示我们的函数的可执行代码编译出来之后在.sys文件中的位置。

    .sys文件本质上是PE文件,PE文件有段和节,不同的节加载到内存中会有不同的处理情况。我们需要关注的有三种:

    1. INIT节:这个节的特点是初始化完毕后就会释放,不再占用内存空间。
    2. PAGE节:这个节的特点是可以进行分页交换的内存空间,即内存不够时可以临时放到磁盘上。
    3. PAGELK节:这是默认的节,如果不指定代码放在哪里,就会放在这个节中。特点是不能进行内存交换,即不可以和磁盘交互。

    我们可以指定我们的代码放到哪个节中。

    例如,入口函数只会调用一次,可以放到INIT节中,这样初始化完后就不占用内核内存,因为内核内存是共享的,用完就没了。

    例如:

    #pragma alloc_text(INIT,DriverEntry)

    注意的问题:

    如果将函数放入PAGE节中,代表该函数运行中可以放到磁盘上,这样会产生缺页中断。因此,放到PAGE节中的函数不能调用DISPATCH级别的函数。

    本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系bd@zhengruan.com
    作者最新文章
    软件教程 安全
    相关文章 更多
    华为擎云亮相金融展,高效安全助力行业升级
    华为擎云亮相金融展,高效安全助力行业升级

    6月18日至20日,2025中国国际金融展在上海盛大举行,本次展会以“开放创新科技赋能共创金融新未来”为主题,集中呈现了全球金融科技与金融服务领域的最新成果。华为擎云携其智慧金融解决方案及华为擎云C5(第三代)等商用终端亮相现场,引发了众多观众的关注。据悉,即将面世的新一代华为擎云C5搭载了自主操作系统HarmonyOS,具备简洁流畅、连续交互、安全稳定等多项全场景使用优势。该设备支持智慧多窗、平行视界、超级中转站等功能,能够实现高效的多任务处理和跨设备协作,满足多样化的办公需

    solaris 9 .0基本安全设置
    solaris 9 .0基本安全设置

    Solaris 9的安全加固,说难不难,说简单也不简单。很多人拿到一台新系统,装完就扔那儿了,结果漏洞百出。其实只要按着下面这些步骤走一遍,系统安全性就能上一个台阶。这里整理了一套实操流程,从安装到内核调整,再到工具部署,基本覆盖了主要的安全面。 1. 选择合适的安装 这一步看似简单,但很多人却走错

    硬件防黑:电脑安全防护全攻略
    硬件防黑:电脑安全防护全攻略

    硬件安全是防护基石,通过TPM、安全启动、BIOS/UEFI加固、物理访问控制及数据销毁等多重措施,构建从开机到报废的全周期防御体系,确保系统完整性与数据保密性。

    勒索病毒再现,17年漏洞被复用?
    勒索病毒再现,17年漏洞被复用?

    0x00前言

    Windows 远程桌面漏洞预警:CVE-2019-0708风险通报
    Windows 远程桌面漏洞预警:CVE-2019-0708风险通报

    近日,PHP中文网安全中心监测到微软应急响应中心发布了一项关于WindowsServer2003、WindowsServer2008R2及WindowsServer2008操作系统的高危安全风险(漏洞编号:CVE-2019-0708)。此漏洞可能被攻击者利用进行类似Wannacry的蠕虫式攻击,威胁到大量服务器的安全。为了保护您的业务不受影响,云鼎实验室建议您立即进行安全自查。如果您的系统在受影响范围内,请尽快更新并修复漏洞,以防被外部攻击者入侵。同时,建议云上租户启用「安全运营中心」-安全

    CVE-2019-0708 RDP漏洞EXP曝光
    CVE-2019-0708 RDP漏洞EXP曝光

    0x00漏洞概述CVE-2019-0708是微软于2019年05月14日发布的一个严重的RDP远程代码执行漏洞。该漏洞无需身份认证和用户交互,可能形成蠕虫爆发,影响堪比wannycry。2019年09月07日,@rapid7在其metasploit-framework仓库公开发布了CVE-2019-0708的利用模块,漏洞利用工具已经开始扩散,已经构成了蠕虫级的攻击威胁。0x01影响版本Windows7WindowsServer2008R2WindowsServer2008Windows

    密码管理器安全吗?会成为单点故障吗?
    密码管理器安全吗?会成为单点故障吗?

    密码管理器通过端到端加密、零知识架构和AES-256加密保障安全,主密码是唯一解锁钥匙。它确为单点故障,但风险可控。合理选择经审计的产品、设置强主密码、启用2FA、定期备份并防范钓鱼,可显著提升安全性。相比弱密码或明文记录,正确使用密码管理器更安全,是应对复杂账户体系的有效防线。

    Permeate漏洞靶场实战挖掘指南
    Permeate漏洞靶场实战挖掘指南

    简介最近在逛码云时候发现permeat靶场系统,感觉界面和业务场景设计的还不错.所以过来分享一下.同时也是分享一下我平时挖掘漏洞的一些思路吧,这篇文章里虽然只简单介绍其中三种漏洞类型,但也是想是一个抛转引玉吧,给web安全新手提供一些挖掘思路.下载地址:代码语言:javascript代码运行次数:0运行复制GitHub地址:https://github.com/78778443/permeate国内地址:https://gitee.com/songboy/permeate这篇文章里主要介绍其中的,SQ

    PHP框架安全研究论文
    PHP框架安全研究论文

    PHP框架安全研究简介PHP框架广泛应用于构建web应用程序,但它们的安全性至关重要。本文探讨了PHP框架的常见安全漏洞及其缓解措施。常见漏洞及缓解措施SQL注入(SQLi)描述:未经验证的用户输入可直接传递给SQL查询,从而允许攻击者执行恶意SQL语句。缓解:使用预处理语句并参数化查询。跨站点脚本(XSS)描述:未经验证的用户输入直接输出到web页面,从而允许攻击者注入恶意脚本。缓解:转义用户输入,或使用内容安全策略(CSP)。跨站点请求伪造(CSRF)描述:

    Java框架安全问题:常见错误和缓解措施
    Java框架安全问题:常见错误和缓解措施

    Java框架的常见安全错误包括:输入验证不当、未验证重定向、未受保护的资源访问、序列化的漏洞和日志记录配置不当。为了缓解这些错误,应实施以下措施:1.验证输入;2.验证重定向;3.保护资源;4.安全序列化;5.日志记录安全。例如,使用StringEscapeUtils转义HTML标记可以防止跨站点脚本攻击。

    查看更多
    精品专题 更多
    装机必备
    装机必备

    正软商城装机必备专区,精选办公、浏览器、安全防护、影音播放、压缩解压、设计创作和系统工具等电脑常用正版软件,帮助用户快速完成新电脑软件配置。

    Windows
    Windows

    正软商城Windows软件专区,汇集适用于Windows电脑的办公、设计、安全防护、影音播放、开发工具和系统优化软件,提供软件介绍、系统要求、正版授权及购买下载服务。

    PDF教程
    PDF教程

    正软商城PDF教程频道提供PDF编辑、转换、合并、拆分、压缩及格式处理方法,同时介绍常用PDF软件和工具的使用技巧。

    Mac软件 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    Aperty macOS版
    Aperty macOS版
    macOS

    Aperty 是 Skylum 推出的 AI 人像修图软件,支持自然肤质修饰、瑕疵处理、面部与身体调整、预设及批量同步。

    WINDOWS 更多
    讯飞智作 网页版
    讯飞智作 网页版
    Windows/ macOS/ Linux

    讯飞智作是一款基于语音合成技术、虚拟人驱动技术与数字人形象声音构建能力的 AI 数字人音视频创作平台。

    火山引擎 网页版
    火山引擎 网页版
    Windows/ macOS/ Linux

    火山引擎是字节跳动旗下企业级云与AI服务平台。聚焦大模型核心能力,依托字节自研豆包多模态大模型,凭借火山方舟一站式平台,提供模型精调、推理部署、智能应用搭建等全链路服务,结合高性能AI算力,助力各行业快速落地大模型数字化与智能化应用。

    PixTV 网页版
    PixTV 网页版
    Windows

    PixTV 是一款在浏览器中使用的 AI 视觉内容创作平台,提供图片、视频、音频、文字生成、AI 分镜、局部重绘、提示词反推和无限画布等工具,适合短剧、漫剧、广告及社交媒体内容制作。