前些时间在做一个搜索功能时发现一个比较有意思的现象,场景是这样的:在一个模态窗口中是一个订单列表,页面的顶部有若干个状态筛选框和一个搜索关键字输入框,当焦点在关键字输入框时按回车,本来是对input的keyup...事件做了监听,当发现是按了回车键时便自动提交搜索请求的,但输入关键字后按回车时页面竟然跳转了,并且出现“HTTP 错误 405.0 - Method Not Allowed无法显示您正在查找的页面,因为使用了无效方法...(HTTP 谓词)”的错误,非常纳闷。...按照错误信息及现象(页面跳转了)来看,应该是因为触发了页面提交了,但事实上,当在keyup事件里面alert时,根本还没有执行到keyup事件里面去就已经跳转了。...自动提交的动作本身浏览器在默认事件中绑定的,按键盘的操作就是keyup和keydown,我原本的按键监听是在keyup事件里写的,所以把keydown事件重写,然后终止默认事件执行就OK了。
驱动程序中这样的处理对于驱动程序的健壮性起着不容忽视的作用; 10、驱动程序的设备名称对应用程序来说是透明的,只能应用于内核,这也是为什么要创建设备符号链接、GUID的原因; 为了不给读者带来疲劳,再从...这样安装后,PnP管理器就能通过注册表来确定设备的函数驱动程序和筛选器驱动程序了; 5、发送到设备的请求大部分都打包在I/O数据请求包中(IRP),IRP结构体:http://msdn.microsoft.com...如果框架可以处理IRP,则不会涉及到KMDF驱动程序;如果框架处理不了就通过调用KMDF驱动程序来实现事件处理程序来获取帮助; 10、WDK中的头文件包含的条件语句指定编程元素仅在某些版本的Windows...7、回调函数一定要返回STATUS_SUCCESS (如果操作成功)否则,回调函数将返回错误信息(定义在Ntstatus.h); 8、KMDF修订历史记录:http://msdn.microsoft.com...好吧,先写到这里吧,想到后再补充,下一篇应该就会介绍WDF驱动程序中的几个重要的例程了。
0x02 HelloWorld开发 参考资料 根据官方教程,我们在 Visual Studio 中创建空的 KMDF 项目,并在其中创建 Driver.c 文件,编写代码如下: #include 器」中设置为 Debug/x64,编译生成项目发现如下错误: Visual Studio 默认开启了缓解 Spectre 攻击的机制,可在 VS 安装器中选择安装指定的支持库,我们实验环境下可以直接关闭该功能...,如下: 在 Visual Studio 中将被调试机(debugee)添加完毕后,在如下窗口选择该主机并设置驱动的硬件 ID 为 Root\KmdfHelloWorld,如下: 配置完成后,我们在...Visual Studio 菜单中 生成-部署解决方案,驱动程序将自动部署在被调试机上(debugee)并进行测试运行: 在被调试机(debugee)上我们在设备管理器中可以看到 KmdfHelloWorld...配置管理器」中设置为 Debug/x64,编译生成项目。
Windows Driver Kit (WDK) 包含各种驱动程序的示例源代码。这些示例可在您编写自己的驱动程序时提供有用指导。在安装 WDK 时,示例将安装到 \src 目录的子目录中。...包括使用用户模式驱动程序框架 (UMDF)、内核模式驱动程序框架 (KMDF) 和 Windows 驱动模型 (WDM) 接口的驱动程序。 src\input 键盘和鼠标类筛选器驱动程序。...此外,请参见此 WDK 中设备类型特定的文档。 如果选择将代码基于一个或多个示例,请记住以下几点: 一些示例不是完整的驱动程序,但提供了有关如何编写此类驱动程序的指南。...例如,为了简洁明确起见,示例可能忽略错误处理代码。 确保使用针对正在编写的驱动程序的类型编写的驱动程序示例。例如,如果正在编写 WDM 函数驱动程序,则使用示例 WDM 函数驱动程序。...如果正在编写存储筛选器驱动程序,则使用示例存储筛选器驱动程序。 确保更新驱动程序的示例 INF 文件。特别是,确保硬件的设备 ID 与 INF 文件中指定的设备 ID 匹配。
3、 用户模式和内核模式 运行 Windows 的计算机中的处理器有两个不同模式:“用户模式”和“内核模式”。根据处理器上运行的代码的类型,处理器在两个模式之间切换。...而KMDF内核模式驱动程序中的错误会损坏系统地址空间,并可能会导致计算机失败。...注意:WDK10一定要在vs2015后面安装,安装完后,启动vs2015在界面菜单上会出现driver菜单,如下图。...注意:如果在设置过程中在Creaing system restorepoint出现错误的话,需要在测试目标主机的C盘上打开系统还原点。...注意:如果在设置过程中在Creaing system restorepoint出现错误的话,需要在测试目标主机的C盘上打开系统还原点。
开发人员在具备一定的驱动概念知识后,通过参考官方例程可以很容易实现拥有特定功能的驱动应用程序。...驱动类型 驱动分为如下几种类型: 设备函数驱动程序 设备筛选器驱动程序 软件驱动程序 文件系统筛选器驱动程序 文件系统驱动程序 驱动程序不是一定需要与硬件通讯,如果需要访问操作系统核心数据,往往应用程序没有足够的权限...,你的两个选项为 KMDF 和内核模式 Windows NT 驱动程序模型。...使用 KMDF 和内核模式 Windows NT 模型,你可以编写驱动程序,而无需考虑即插即用 (PnP) 和电源管理。 你可以改为专心于驱动程序的首要任务上。...在驱动的安装过程中,系统会自动记录安装的日志,在INF目录(路径一般在 C:\Windows\inf下)下可以找到两个日志文件 setupapi.app.log 和 Setupapi.dev.log ,
3、 更重要的,也是微软反复炫耀的是封装了驱动程序中的某些共同行为:例如即插即用和电源管理就属于这种共同行为。...4、 改变了操作系统内核与驱动程序之间的关系,WDM驱动程序中,一方面要处理硬件,另一方面要处理驱动程序与操作系统内核的交互。...5、 两种模式的驱动程序(KMDF、UMDF)都使用同一环境进行构建,这一环境称为WDK。 即KMDF,UMDF的开发环境为WDK。...WDK是针对微软操作系统系列的驱动器集成开发系统。...6、 虽然经过封装并引入基于对象的技术,所开发的驱动程序在执行效率上并不比原来逊色。 WDF和WDM的关系有点类似于MFC和Windows SDK的关系。
在中间窗格中,选择内核模式驱动程序,空(KMDF)。 在名称字段中,输入“KmdfHelloWorld”作为项目名称。...备注 在创建新的 KMDF 或 UMDF 驱动程序时,必须选择一个不多于 32 个字符的驱动程序名称。 此长度限制在 wdfglobals.h 中定义。...该解决方案包含名为 KmdfHelloWorld 的驱动程序项目。 ? 在解决方案资源管理器窗口中,右键单击 KmdfHelloWorld,然后选择属性。...在 Driver.c 中,首先包括以下标头: C++ #include #include Ntddk.h 包含所有驱动程序的核心 Windows 内核定义,...在目标计算机上,导航到包含驱动程序文件的文件夹,然后运行 DevCon 工具,以安装驱动程序。
以此模型开发,开发者需要一方面实现驱动程序与硬件的交互,另一方面要对操作系统内核进行操作,难度大。驱动程序容易出现问题,这也是Windows2000以来操作系统容易蓝屏的原因。...WDF是UMDF(User Mode Driver Framework,用户模式驱动程序框架)和KMDF(Kernel Mode Driver Framework,内核模式驱动程序框架)的总和。...由于本课题基于PCIe硬件设备进行驱动开发,涉及到内存读写等内核操作,所以使用KMDF框架来编写驱动程序。...以上是希望读者能够对PCIe有个初步的了解,但是对驱动程序的开发并没什么卵用。 对PCIe设备来说,它可以有三个相互独立的物理地址空间:设备存储器地址空间、I/O地址空间和配置空间。...下一篇博客将讲述PCIe的WDF驱动程序中几个非常重要的概念,对初学者了解WDF非常有用。
为了能测试驱动程序运行状态,读者需安装VMWare虚拟机,双击附件中的VMware-workstation-full-16.2.4-20089737.exe安装程序一直点击下一步即可,需要注意的是在如下选项中请在增强型键盘驱动程序上打对勾...,耐性等待即可; 当一切安装就绪后我们需要在系统中安装VMware Tools工具,该组件在安装后可让虚拟机具备有拖拽上传文件的功能,且鼠标键盘将可以自由切换,该功能是我们必须要用到的; 安装VMware...Tools工具很容易,只需要点击安装菜单,后会在虚拟机中出现DVD驱动器,此时双击驱动器并按照要求安装即可,安装完成后重启系统,此时则具备了拖拽上传功能; 当这些都做好以后,建议用户关闭虚拟机,并点击...【虚拟机】菜单,找到【快照】并拍摄一个快照,快照的作用是当虚拟机系统出现问题后可快速恢复到初始模式,避免重装系统,在后续课程中读者会出现无数次的蓝屏,而虚拟机快照的快速恢复功能则是一个很好的选择; 配置驱动开发模板...g命令让系统运行起来,将编译好的驱动程序拖入到虚拟机中,并以管理员身份打开Windows 64Signer.exe,使用该工具对驱动程序进行签名,如下图所示; 签名完成后将我们的驱动文件WinDDK.sys
INIT标识是指此函数为入口函数,驱动成功加载后可以从内存删除。PAGE标识是指此函数可以在驱动运行时被交换到硬盘上,如果不指定,将被编译器默认为非分页内存。...11-58行定义了DriverEntry函数,每个 KMDF 驱动程序必须有一个 DriverEntry 例程,当操作系统检测到有新硬 件设备插入后,会查找它对应的驱动程序,找到这个驱动程序中的 DriverEntry...每个支持即插即用的 KMDF 驱动程序必须有 EvtDriverDeviceAdd 回调例程, 每次操作系统枚举设备时, PnP 管理器就调用这个回调例程。...在WDF驱动程序中,处理I/O请求的关键判断哪些类型的I/O请求由驱动程序处理,哪些类型的I/O请求由WDF框架自动处理。...在WDF驱动程序开发中,使用宏PAGE_CODE来标记某例程应在分页内存上。因此在驱动程序开发过程中要特别注意PAGE_CODE的使用。 对于PCIe设备驱动开发,开发者还注意读写映射内存不能越界。
2022 年,Meta 宣布将 Rust 语言纳入其服务器端编程语言。 2022 年 12 月,Linux 内核 6.1 发布,包含了初始 Rust 支持。...继 5 月效仿 Linux 用 Rust 重写部分 Windows 内核后,近来微软在拥抱 Rust 上又进了一步:微软在 GitHub 中发布了一系列开发工具包,让开发者可以使用 Rust 语言来编写...据介绍,windows-drivers-rs 具体包含以下板块: wdk-build:一个用于配置 Cargo 构建脚本的库,可用于绑定生成和 WDK(Windows Developer Kit)的下游链接...值得注意的是,微软补充:虽然该项目的计划灵活运用不同的 WDK 版本和不同的 WDF 版本,但目前“仅针对 NI eWDK、KMDF 1.33、UMDF 2.33 和 WDM 驱动程序进行了测试”,对于...“较旧的 DDK 可能会缺少链接器选项”。
WDF提供了两个框架:KMDF(内核模式驱动程序框架)和UMDF(用户模式驱动程序框架)。本文只介绍KMDF的设计与实现。 2....WDF对象模型 KMDF框架支持面向对象、事件驱动的驱动程序模型。它定义了一系列的对象用来表示设备、驱动、中断等,每个对象有对应的属性、方法和事件。驱动程序利用这些方法创建对象、设置属性和响应事件。...对于大多数对象,驱动程序在创建他们的时候可以指定父对象,如果没有指定,则框架默认其父对象为WDFDRIVER对象。 WDF大大简化了WDM中的pnp和电源管理的开发。...最简单的是 WdfIoQueueDispatchSerial模式,在这种模式下,请求队列将请求串行化后再处理;而WdfIoQueueDispatchParallel模式则自动在每个请求到来时调用相应的回调函数...在WDM驱动程序中,I/O请求的取消是一个复杂难以理解的过程,开发人员必须有对内核深刻的理解才能正确处理I/O请求的取消。
图片 为了能测试驱动程序运行状态,读者需安装VMWare虚拟机,双击附件中的VMware-workstation-full-16.2.4-20089737.exe安装程序一直点击下一步即可,需要注意的是在如下选项中请在增强型键盘驱动程序上打对勾...,耐性等待即可; 当一切安装就绪后我们需要在系统中安装VMware Tools工具,该组件在安装后可让虚拟机具备有拖拽上传文件的功能,且鼠标键盘将可以自由切换,该功能是我们必须要用到的; 图片 安装VMware...Tools工具很容易,只需要点击安装菜单,后会在虚拟机中出现DVD驱动器,此时双击驱动器并按照要求安装即可,安装完成后重启系统,此时则具备了拖拽上传功能; 图片 当这些都做好以后,建议用户关闭虚拟机,...并点击【虚拟机】菜单,找到【快照】并拍摄一个快照,快照的作用是当虚拟机系统出现问题后可快速恢复到初始模式,避免重装系统,在后续课程中读者会出现无数次的蓝屏,而虚拟机快照的快速恢复功能则是一个很好的选择;...g命令让系统运行起来,将编译好的驱动程序拖入到虚拟机中,并以管理员身份打开Windows 64Signer.exe,使用该工具对驱动程序进行签名,如下图所示; 图片 签名完成后将我们的驱动文件WinDDK.sys
有错误和疏漏的地方,欢迎批评指证。 ...需要包含的头文件: 名字空间: std 也可以试用fstream.h> fstream提供了三个类,用来实现c++对文件的操作。(文件的创建,读写)。 ...文件指针位置在c++中的用法: ios::beg 文件头 ios::end 文件尾 ios::cur 当前位置 例子: file.seekg( =”nu0″>0,ios::end...); int fl_sz = file.tellg(); file.seekg(0,ios::beg); 常用的错误判断方法: good() 如果文件打开成功 bad() 打开文件时发生错误...发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/191878.html原文链接:https://javaforall.cn
20)<<"姓名:"<<"廉东方"<<endl; //使用插入运算符写文件内容 f1<<setw(20)<<"家庭地址:"<<"河南郑州"<<endl; f1.close(); //关闭文件 } 运行后打开文件...默认的打开方式) ios::out = 0x02, //供写,文件不存在则创建,若文件已存在则清空原内容(ofstream默认的打开方式) ios::ate = 0x04, //文件打开时,指针在文件最后...可改变指针的位置,常和in、out联合使用 ios::app = 0x08, //供写,文件不存在则创建,若文件已存在则在原文件内容后写入新的内容,指针位置总在最后 ios::trunc ...运算符已经重载 if(f.fail()){…} 读写操作 使用>运算符 只能进行文本文件的读写操作,用于二进制文件可能会产生错误。...读写二进制文件注意事项 打开方式中必须指定ios::binary,否则读写会出错 用read/write进行读写操作,而不能使用插入、提取运算符进行操作,否则会出错。
C++ 是在C语言的基础上开发的,早期的 C++ 还不完善,不支持命名空间,没有自己的编译器,而是将 C++ 代码翻译成C代码,再通过C编译器完成编译。...fstream.h:用于文件操作的头文件。 complex.h:用于复数计算的头文件。 和C语言一样,C++ 头文件仍然以.h为后缀,它们所包含的类、函数、宏等都是全局范围的。...实际上,编译器开发商不会停止对客户现有软件提供支持,可以预计,旧的 C++ 头文件在未来数年内还是会被支持。...2) 新的 C++ 头文件,如 iostream、fstream 等包含的基本功能和对应的旧版头文件相似,但头文件的内容在命名空间 std 中。...第 1) 种写法是标准的, 第 2) 种不标准,虽然它们在目前的编译器中都没有错误,但我依然推荐使用第 1) 种写法,因为标准写法会一直被编译器支持,非标准写法可能会在以后的升级版本中不再支持。
这个错误通常表示安装过程中出现了问题。幸运的是,NVIDIA提供了有助于解决安装问题的有用资源。...此README文件包含有关安装故障排除和已知问题的宝贵信息。在README文件中,搜索与您特定安装失败消息相关的安装问题或错误的部分。NVIDIA提供详细的说明和建议,以解决常见的安装问题。...在根据README文件中的建议解决特定安装问题后,按照README中推荐的步骤重新安装NVIDIA驱动程序。...NVIDIA驱动程序是NVIDIA公司为其图形处理器(GPU)提供的软件包。它包含了控制、管理和优化NVIDIA GPU的必要组件、库和驱动程序。...在Windows上,您可以使用设备管理器来禁用或卸载驱动程序。在Linux上,您可以使用适当的包管理器(如apt或yum)来卸载驱动程序。
您可以尝试更新显卡驱动程序,以确保您使用的是最新的驱动程序版本。5. 检查系统环境变量请确保系统环境变量中包含正确的CUDA路径。您可以在系统的环境变量设置中添加或修改CUDA路径。6....设备代码编译设备代码是在CUDA中运行在GPU设备上的代码。设备代码编译的过程通常由nvcc编译器完成。...这些编译器将设备代码转换为GPU硬件的特定汇编指令代码。汇编链接:最后, nvcc将生成的设备代码与主机代码进行链接,创建一个包含设备代码的可执行文件。...代码分析和转换:主机代码被传递给C/C++编译器进行分析和转换,生成汇编代码或目标文件。链接:编译器将主机代码的目标文件与设备代码进行链接,创建一个包含主机和设备代码的可执行文件。...链接阶段在CUDA编译的最后一个步骤中,设备代码和主机代码被链接在一起,形成最终的可执行文件。链接阶段将所有必要的库和依赖项与代码一起打包成一个可执行文件,以便在计算机上运行。
新建HelloWorld项目 新建一个以Kernel Mode Driver, Empty(KMDF)为模板的驱动项目,项目名称HelloDriver,在项目中新建一个hello.c文件作为驱动入口文件...否; 链接器 - 常规,警告视为错误 否; Driver Settings - General,Target OS Version改成Windows 7,Target Platform改为Desktop...; Stampinf里所有 是 的地方改成 否; Inf2Cat里所有 是 的地方改成 否; Driver Signing - General中的Sign Mode改为 Off; 改好后,使用Debug-x64...根据官网的描述,如果创建的驱动不是基于设备的,即通用型内核驱动,则需要删或者改一些东西,如果可以看懂怎么改就直接改就可以,例如: 原始inf中要改的部分: [Manufacturer] %ManufacturerName...驱动安装测试 打开win7,使用KMD Manager工具进行注册启动停止卸载服务,发现有出现Error Number not found的错误,通过一些测试发现是驱动签名检查没有完全禁用,根据官网给出的信息
领取专属 10元无门槛券
手把手带您无忧上云