kernel-mode相关内容

在运行时从 linux 内核模块获取内核版本

如何从 linux 内核模块代码(内核模式)中获取有关正在运行哪个版本内核的运行时信息? 解决方案 按照惯例,Linux 内核模块加载机制不允许加载未针对正在运行的内核编译的模块,因此您所指的“正在运行的内核"很可能在内核模块编译时就已经知道了. 为了检索版本字符串常量,旧版本要求您包括、其他和较新的.如果你真的想在运行时获取更多信息,那么 linux/utsname.h 中的 ut ..
发布时间:2022-01-04 22:12:09 其他开发

使用 Visual Studio 15 使用 C++ 输入 Ring 0

是的,我知道,周围有一些类似的问题,但没有一个是令人满意的 我知道这是一个愚蠢的想法,但我需要使用我的 Visual Studio 2015 C++-Project 进入内核模式(又名 Ring 0). 我还想以最小的必要努力完成它(意思是,我不想创建一个专门用于测试的驱动程序,并且在每次构建后都必须签名和重新部署,因为这非常乏味). 我怎样才能做到这一点? 项目是在我的主机上 ..
发布时间:2021-09-18 20:04:13 C/C++开发

如何在递归模式下使用NtQueryDirectoryFile检索完整的文件名?

我正在使用此代码来递归遍历所有文件和目录. 现在我想知道如何提取完整的文件名(路径+文件名+扩展名)?以下行(也出现在参考代码上)仅给出文件名+扩展名(不带目录名). DbgPrint(“%s%8I64u \ n",前缀,DirInfo-> EndOfFile.QuadPart,& ObjectName); 谢谢. 解决方案 如果我们不希望简单地枚举文件夹/文件而是 ..
发布时间:2021-05-03 18:39:13 C/C++开发

在Windows 10驱动程序中将内核空间虚拟地址映射到用户空间虚拟地址

我正在Windows 10(64位)中编写内核模式驱动程序,其主要目的是从DMA读取数据,我想知道是否将内存块从内核空间复制到内存中分配的缓冲区中,而不是复制用户空间,我可以以某种方式向用户空间公开一个地址(当然不是物理地址),并保存在内存复制操作中. 也许是这样的: 分配一块连续的物理内存(并将物理地址映射到内核空间中的虚拟地址). 将内核空间中的虚拟地址映射到用户空间中的虚拟 ..
发布时间:2021-05-03 18:38:08 其他开发

目录相对ZwCreateFile

我必须为我的大学项目实现交叉视图文件完整性检查器。为此,我如何在内核模式下列出目录的文件? 解决方案 您的起点将是 ZwCreateFile -具有诸如“ FILE_LIST_DIRECTORY”之类的选项。 然后您将使用 ZwQueryDirectoryFile 来获取有关该目录中文件的信息。 确保确保,您不会忘记 ZwClose -在用户模式应用程序中,它并不那么重要在使用 ..
发布时间:2020-10-26 19:33:58 C/C++开发

如何从驱动程序显示弹出消息框(内核模式)?

我正在编写一个驱动程序,该驱动程序需要立即弹出一个对话框来通知用户事件。 (种类类似于NTFS的“损坏的文件” 通知,除了不是与文件系统相关的驱动程序。) 我知道 ExRaiseHardError 和 IoRaiseInformationalHardError 应该可以解决问题,但是它们似乎没有用,它们在没有做任何事情的情况下“成功”返回。 如何执行此操作(不创建用户模式程序)? ..
发布时间:2020-10-26 19:21:16 其他开发

内核模式代码签名

我做了一个驱动程序,现在需要签名。它以内核模式运行。 从我在Microsoft的内核模式代码签名演练,我必须从商业 CA 。他们说要看最后,然后按照此链接可以从中购买该证书的CA列表。我发现链接非常混乱,因为我无法确切地知道我需要购买的什么证书。我需要对驱动程序进行签名,以便将其安装在64位Windows系统上。直接链接将非常受欢迎(我想从GlobalSign购买)。 它是来自此处? ..
发布时间:2020-10-05 03:31:31 其他开发

敏感指令与特权指令之间的区别

我一直在寻找与敏感和特权指令明显不同的指令,但是现在所有指令都模糊了. 据我所知:如果在用户空间中执行,敏感指令需要会陷入内核模式,否则它会被忽略,而特权指令将会陷阱进入内核模式如果在用户空间中执行. 这种差异对我来说是模糊的并且不能令人满意.随意放弃一个令人敬畏的答案! 编辑:只是一个想法,这些都是同一回事吗? 解决方案 这些术语通常在硬件虚拟化的上下文中使用:虚拟机. ..

用户与内核系统调用之间的区别

系统调用是程序从操作系统内核请求服务的方式. 它们可以在用户模式和内核模式下发生. 有什么区别? 例如: 开销 系统时间 解决方案 系统调用是您在应用程序(“用户模式")和内核之间进行过渡的方式. 系统调用比正常的函数调用要慢,但是英特尔和AMD的新型x86芯片具有特殊的sysenter/syscall操作码,可以花100毫微秒左右的时间进行操作. ..

当CS寄存器的CPL值等于0时,x86 CPU是否处于内核模式?

CS寄存器的最后两位包含当前特权级别(CPL),该特权级别可以包含值0或1或2或3. 如果CPL的值为0,是否表示CPU处于内核模式(因此可以执行所有操作)?还是要使CPU进入内核模式还必须执行其他操作? 解决方案 是的,CPL = 0表示内核/主管模式.但是,在实模式下,CPL也为0,但未反映在CS中.同样,在虚拟8086模式下,CPL为3,而不反映在CS中. 有些相关,您也 ..
发布时间:2020-05-21 19:10:31 其他开发

从内核模式返回到用户模式

我对Unix内核中的模式切换的理解有些困惑.我在这里提供我的理解,并打开以进行讨论/更正. 从用户模式转换到内核模式时,处理器在每个进程用户堆栈和每个进程内核堆栈之间进行切换.然后,每个进程用户堆栈段选择器和堆栈指针存储在内核堆栈中,然后eip指令指针(用户模式下的返回地址)和其他硬件寄存器被压入内核堆栈 当内核必须返回用户模式时,trapret代码会将存储在内核堆栈中的所有值弹出回到 ..

在运行时从linux内核模块获取内核版本

如何从linux内核模块代码(内核模式)内部获取有关正在运行哪个版本的内核的运行时信息? 解决方案 按照惯例,Linux内核模块加载机制不允许加载未针对正在运行的内核编译的模块,因此您所指的“正在运行的内核"很有可能是在内核模块编译时就知道的. 要检索版本字符串常量,较旧的版本要求您包括,其他和较新的 ..
发布时间:2020-04-25 11:40:41 其他开发

Linux内核中的函数调用程序

有没有一种方法可以在Linux内核中获取函数调用者?我知道 __ func __ 返回正在执行的函数名称.我正在寻找名为" __ func __ " 的函数 解决方案 您可以使用__builtin_return_address(0)来获得呼叫者. 呼叫者的呼叫者是__builtin_return_address(1),依此类推. 这是GCC扩展,在gcc手册中有记录: http: ..

WinDbg通过网络失去连接调试,目标机器冻结

我正在尝试通过网络获取WinDbg调试工作,但是当我进入调试器(Debug-> Break)后,它总会失去连接,然后尝试重新启动它(Debug-> Go)。但是,如果我没有进入调试器,看起来连接在'N'时间段内是稳定的。我甚至可以在WinDbg中查看调试打印语句,因为我在这个宽限期内使用目标系统。而且,在调试中断时,连接好像是好的,因为我可以从目标系统收集信息。我使用“!ustr srv!SrvC ..
发布时间:2017-04-18 02:20:07 开发方法

微型过滤器将文件拖放到磁盘?

我正在开发一个小型过滤器来拦截文件并获取文件名称删除到特定磁盘并获取文件名。 如果我拖动&删除一个文件,我可以得到这个文件名并拦截它成功(这意味着这个文件不是在磁盘上创建的)。 如果我拖动&删除多个文件,我只能获得第一个文件名,而其他不是。但是当我打开磁盘,我没有看到任何文件在这里(这意味着Mini-Filter拦截他们成功)。 所以我无法获取文件名(除了第一个文件) 我截取拖动 ..
发布时间:2016-11-02 22:49:18 C/C++开发

是否有可能使用WCF与Windows内核模式软件进行通信?

WCF支持一些互操作性的绑定。是否有这些绑定的实现与内核模式软件进行通信? AFAIK内核模式软件可以打开命名管道,在本地系统的安全上下文。那些是命名管道互操作WCF? 解决方案 是的,你应该能够使用命名管道的WCF绑定的内核模式软件进行通信。 虽然有可能,但肯定不会是容易的。创建WCF服务,以服务的数据通过命名管道和消费者不会很困难。 在WCF消息帧是你要去哪里打你的障碍。您的客户端必 ..
发布时间:2015-11-27 11:50:25 C#/.NET