今天有同行问了一个问题,Windows文件过滤驱动里的如何去区分一个对象是文件还是文件夹?我花了1小时左右翻阅了一些微软的文档以及以前的遗留代码,发现在WDK的帮助文档中是这么定义的: FILE_OBJECT结构体中的一个成员:PVOID  FsContext; 说明FsContext指向了一个结构体FSRTL_ADVANCED_FCB_HEADER,这个结构体中有一个成员: WDK帮助文档是这么描述这个结构体的: 里面提到了这个结构体包含的文件信息里已经表明了这个文件究竟是文件?文件夹?卷区?…
本页主题:如何在windows内核驱动中对文件操作,实现对文件的拷贝.粘贴.删除.查询信息等,这是很常用也是很简单的方法. 部分内容参考:http://www.cppblog.com/aurain/archive/2009/12/31/104563.html 实现原理: 一.在Windows执行体中,通过文件对象来代表文件,该文件对象是一种由对象管理器管理的执行体对象.例如:目录也是由文件对象代表的. 内核组件通过对象名来引用文件,即在文件的全路径前面加\DosDevices.(在Windows…
Windows内核开发-10-监听对象 Windows内核除了可以监听进程,线程.dll还可以监听特定的对象和注册表.这里先讲一下监听对象. 监听对象 内核提供了一种可以监听对特定的对象类型的句柄进行打开或复制的机制.正式支持的对象类型有进程和线程,Windows10还支持一个桌面对象(桌面对象这个先不考虑). 这个和前面的监听进程线程以及模块加载是有区别的.这个是相对于对象的句柄的,比如说一个进程的句柄,线程的句柄,别的进程通过关闭这个进程的句柄来关闭这个进程这种.是这个意思. 这里也有很多和…
Windows内核开发-3-内核编程基础 这里会深入讲解kernel内核的API.结构体.和一些定义.考察代码在内核驱动中运行的机制.最后把所有知识合在一起写一个有用的驱动. 本章学习要点: 1:通用内核编程指南 2:debug和release版本的区别 3:内核API 4:函数和错误代码 5:字符串 6:动态内存分配 7:内核驱动对象 8:设备对象 1 内核编程注意事项 内核编程依赖于WDK(Windows Driver Kit)Windows驱动工具包,这个东西存放了大量头文件和第三方库.内…
Windows内核开发-4-内核编程基础 这里会构建一个简单但是完整的驱动程序和一个客户端,部署内核执行一些平时user下无法执行的操作. 将通过以下内容进行讲解: 1 介绍 2 驱动初始化 3 Create和Close操作调度实例 4 DeviceIoControl操作调度实例 5 安装和测试驱动程序 整个完整源代码最后面 1 介绍 该驱动将解决Windows API设置线程优先级的不灵活性. 在User模式下,线程的优先级由其进程优先级类和基于每个线程的偏移量组合来确定,偏移量具有有限的级别…
Windows内核开发-6-内核机制 Kernel Mechanisms 一部分Windows的内核机制对于驱动开发很有帮助,还有一部分对于内核理解和调试也很有帮助. Interrupt Request Level 中断请求级别 Deferred Procedure Calls(DPC) 延迟调用 Asynchronous Procedure Calls(APC) 异步调用 Structured Exception Handling 异常处理 System Crash 系统崩溃 Thread S…
上节讲了消息的相关概念,本文将进一步聊聊C++中的消息机制. 从简单例子探析核心原理 在讲之前,我们先看一个简单例子:创建一个窗口和两个按钮,用来控制窗口的背景颜色.其效果 图1.效果图  Win32Test.h #pragma once #include <windows.h> #include <atltypes.h> #include <tchar.h> //资源ID #define ID_BUTTON_DRAW 1000 #define ID_BUTTON_SW…
一.windows内核开发需要的软件 1.WDK 2.WinDbg 3.virtualKD 4.DebugView 5.Visual C++ 6.0 6.VMware Workstation 二.windows内核开发软件的安装 1.WDK的安装和配置 wdk的下载地址:http://download.microsoft.com/download/4/A/2/4A25C7D5-EFBE-4182-B6A9-AE6850409A78/GRMWDK_EN_7600_1.ISO 首先下载驱动开发包GR…
Windows内部概述-2- 线程: 执行代码的实体是线程.一个线程的包含在进程里面的,线程使用进程提供的资源来运行代码. 一个线程拥有以下的内容: 1:明确的运行模式,用户态或者内核态. 2:执行的环境,包括寄存器和执行状态. 3:一个或两个栈空间,用来存放变量和调用管理. 4:Thread Local Storage(TLS) 线程本地存储数组,用来存储线程专用数据和提供统一的访问语法. 5:基本的优先级和当前(动态)的优先级. 6:和处理器关联,用来指示允许线程在那个一个处理器上运行. 线…
Windows内核开发-2-开始内核开发-2- 第一个驱动程序: 直接采用vs2019中的Empty WDM Driver 模块创建: 初始的项目文件夹中有一个Driver Files里面会有一个.inf的文件,没用直接删除就好,然后在源文件里面创建一个.cpp的源文件. DriverEntry和Unload Routines DriverEntry: 每个驱动都有一个入口点,叫做DriverEntry,就好比平常写的C/C++代码里面的main函数.DriverEntry是由一个叫做IRQL_…