我正在编写一个需要与垂直空白中断同步的驱动程序,以便沿着USB管道发送一些数据。在用户模式下,有DirectX函数可用于此,如IDXGIOutput::WaitForVBlank和一些年长的。我无法从内核中使用它们。我在Windows8SDK中找到了另一个接口(interface):D3DKMTWaitForVerticalBlankEvent它甚至有一个内核头文件(头文件位于SDK的/km/文件夹中),但它需要gdi32.lib,这是一个用户模式库并与之链接会削弱驱动程序。有什么方法可以让我等待或收到有关垂直空白发生的通知(无需轮询)? 最佳答案
我在使用WDF/KMDF编写的Windows总线驱动程序中实现MSI-X中断时遇到了很多麻烦。我读过MSDNdocumentation,那里并没有太多有用的信息。我的理解是它应该真的只是“工作”。我已经更改了我们的驱动程序的INF文件以添加适当的注册表项,并确认它们被设置为在安装时正常工作。我正在正确查询PCI配置空间并确定是否支持MSI-X中断。问题是,一旦我有了这些信息,我就不知道如何更改我的代码来专门将中断设置为MSI-X。我执行标准调用来配置WDF_INTERRUPT_CONFIG_INIT结构并调用WdfInterruptCreate,但创建的中断不是消息信号,我不知道需要做
在回答我的问题之前,我将回顾一下我目前正在使用的东西,以便您对我已经做过/尝试过的事情有一个很好的了解。我有一个多线程用户模式Windows桌面应用程序,它向KMDF驱动程序发出DeviceIOControl调用(纯软件,无硬件)。有5个单独的线程,它们都不断地对驱动程序进行相同的自定义IOCTL调用。此请求包括:PsLookupProcessByProcessId以获取要从中读取内存的进程。MmCopyVirtualMemory将请求的内存复制到提供的缓冲区中。ObDereferenceObject减少引用计数。驱动程序目前正在连续执行此操作,而我的用户模式应用程序中的主要瓶颈是
我已经完成了以下步骤:1.构建并编译模拟磁带设备驱动程序的内核驱动程序。2.创建所需的.inf3.创建所需的.cat4.签署文件5.通过手动“右键单击”进行测试->从资源管理器安装在.inf文件上现在我准备做一个更简单的安装包,但我不知道如何做?我试图创建目录C:\drivers我还创建了一个dpinst.xml文件,其中包含:*DeviceDriverUpdaterWelcometotheDeviceInstaller!Thiswizardwillwalkyouthroughupdatingthedriversforyourdevice.Installingthesoftwarefo
我目前正在编写一个较低的过滤磁盘驱动程序来捕获SCSI命令,并测量每个命令的性能。目前,我的驱动程序能够捕获SCSI请求,并将其传递给下一个驱动程序。但是,当我尝试注册完成例程时,我得到以下状态:0xc0000010(STATUS_INVALID_DEVICE_REQUEST)。没有完成例程的工作代码:WDF_REQUEST_SEND_OPTIONS_INIT(&options,WDF_REQUEST_SEND_OPTION_SEND_AND_FORGET);WdfRequestSend(Request,Target,&options);带有完成例程的失败代码:WdfRequestFo
我正在使用KMDF和SCardlib开发智能卡驱动程序,我使用WDKSmarcard示例作为引用,我想我正确地实现了所有回调,除了CardPower和CardTracking。(我的读卡器和卡现在不支持RESET命令和插入新卡)当我尝试运行调用SCardListReaders()的测试应用程序时,我得到了SCARD_E_NO_READERS_AVAILABLE。我使用了INF,就像其中一个有变化的示例一样,我使用SmartCardReaderGuid创建了一个设备接口(interface),并将设备类型设置为FILE_DEVICE_SMARTCARD。我不知道我还能做什么,我该如何调试
我正在通过研究WDK8.1学习Windows驱动程序开发ToasterSampleDriver.我可以构建、安装、调试KMDF总线和KMDF功能驱动程序并与之通信。我遇到的问题是安装KMDF过滤器驱动程序。我尝试使用devcon安装过滤器驱动程序,但总是失败。任何帮助将不胜感激。宿主系统:Windows8.1专业版x64构建:VisualStudio2013Pro和WDK8.1调试:WinDbg(命名管道)目标系统(虚拟机):Windows8.1企业版评估启用内核调试和测试签名安装:devcon 最佳答案 我在OSR网站上找到了答案
我已经为本地内核调试设置了我的系统,因为我只打算编写一个具有两个函数的简单驱动程序。我刚刚构建了一个简单的“helloworld”类型的驱动程序,看看我是否能让我的驱动程序运行,目前我已经禁用了驱动程序签名验证并启用了内核Debug模式,使用:bcdedit/debugon我还使用Windows测试商店的证书对我的驱动程序进行了测试签名?或者在VS2015中叫什么:)现在,我的问题是我在构建后通过右键单击.inf文件来安装我的驱动程序,但是我在我的驱动程序(下面的代码)中没有看到任何调试打印的输出,所以这让我相信我的驱动程序根本没有运行?或者是什么?我在安装驱动程序的机器上更改了Com
我想在Windows10x64上使用相应的服务例程注册一个新的软件中断,这可能吗?是否提供了API来执行此操作?我是否必须使用未记录的功能手动完成此操作,这样做会触发内核补丁保护吗? 最佳答案 注册软件中断会导致针对正在运行的操作系统修改中断描述符表(IDT)。Windows具有内核补丁保护(KPP)/PatchGuard,可保护内核代码和数据结构(例如IDT)不被篡改。这包括防止添加新的中断描述符条目、删除它们以及修改描述符表。这也意味着不能修改中断描述符条目。开发人员这样做的原因是将中断重定向到新的中断服务例程,也称为中断Hoo
我正在使用WDK中的KbFilter示例,尝试在由KbFilter_ServiceCallback调用并因此在DISPATCH_LEVEL执行的函数中发送IOCTL。该函数只需发送一个IOCTL并返回,而不是等待输出缓冲区被填充,因此它可以是异步的,即触发即忘。我目前正在使用WDF函数WdfIoTargetFormatRequestForIoctl和WdfRequestSend尝试在DISPATCH_LEVEL发送,但什么也没得到。对WdfRequestSend的调用成功,但似乎未收到IOCTL。使用WdfIoTargetSendIoctlSynchronously或WDM模式IoBu