问题标签 [wdm]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - 驱动程序卸载通知
我对 Windows 开发非常陌生,特别是在驱动程序创建领域。我想创建一个驱动程序,每当卸载另一个驱动程序(任何类型的驱动程序,但最好不是设备驱动程序)时都会收到通知。到目前为止(我可能弄错了)我还没有找到任何允许我实现它的回调函数。
以下是我的问题:
1.) 有一个函数可以让我检测驱动程序负载 (PsSetLoadImageNotifyRoutine/Ex)。有人告诉我,也许我可以获取另一个驱动程序的驱动程序对象并将我的函数设置在从那里卸载的驱动程序中,但我还没有找到任何函数可以做到这一点。是否有在卸载驱动程序时直接获取通知的功能?如果没有,是否有获取驱动程序对象的功能?
2.)因为我还没有找到第一种“方式”的功能。现在我正在尝试使用“事件”来实现这一点。当我在 WinDbg 中运行“.eventlog”时,它显示“模块已卸载”消息。现在我的问题是,有没有办法在使用 C 的驱动程序中收听这个事件?我只能看到用于消费这些事件的工具。如果没有,我可以只读取“.eventlog”文件并进行处理吗?如果是这样,“.eventlog”文件的名称应该是什么?
windows - 给定一个 IO 请求数据包,我如何判断它与哪些功能相关联?例如 IRP_MJ_READ
如果我有一个完整的 IRP,并且我正在 IRP Monitor 等程序中查看它,我如何知道这个 IRP 与哪些函数相关联,例如 IRP_MJ_READ 或 IRP_MJ_WRITE?
windows - 什么是关于 Windows NT MiniFilter 驱动程序的“上下文”?
作为微过滤器课程的一部分,我构建了一个非常简单的微过滤器驱动程序。我还阅读了Microsoft 提供的 PDF 文档形式的微过滤器文档,以及此参考资料。这些指南解释了如何设置上下文和实例。但是,它们没有解释为什么要使用上下文和/或实例以及它们的用途。我非常小的过滤器驱动程序对上下文和实例都使用了 NULL 并且仍然可以运行,所以我想知道这些构造的用例。
c - 如何检索进程特权(Windows 驱动程序)?
我的驱动程序中有一个 IRP 和 EPROCESS 对象我想知道如何从这些结构中检索进程权限(如普通或管理员或系统)?
c - WDM 驱动程序和用户模式通信:最佳实践和回调问题
我的驱动程序的目的是通知用户模式应用程序我收到的每个回调,并将我从那些注册例程中获得的数据传递给它。然后,用户模式应用程序将在屏幕上打印(它是一个简单的 Win32 控制台应用程序)它从内核接收到的所有信息。我目前注册了三个回调PsSetCreateProcessNotifyRoutineEx
:PsSetCreateProcessNotifyRoutineEx2
和PsSetLoadImageNotifyRoutine
。我想知道:
1)考虑到可以同时加载许多进程和许多图像,内核模式和用户模式之间通信的“最佳”方法是什么?
2)我应该为每次调用实现这样的方法还是应该存储一些信息并将它们推送到用户模式,例如,0.5 秒?
我实际上使用以下代码在驱动程序中定义 IOCTL:
这是我的 DispatchDeviceControl 函数的代码:
还有我的一个回调例程的代码:
最后是结构定义(我包含了一些示例值,但第一个元素显然是LIST_ENTRY
:
供您参考,我正确调用了我的DriverEntry
函数:
在我的用户模式控制台应用程序中,我在主例程中创建了一个线程,并在其相关线程函数中不断检查DeviceIoControl
' 的返回值,以便实时打印从驱动程序获得的信息。
3)有点离题,但我认为这是相关的:我在用户模式下错过一些通知是否正常,使用此代码?有人知道为什么吗?
c++ - 通过网络传递 SCSI 命令
我想通过网络共享 cdrom 设备。
在客户端,我创建了根枚举设备(scsi 总线)。在服务器端(cdrom 设备所在的位置),我将设备堆栈的 FDO 替换为我自己的(换句话说 - cdrom.sys 被另一个驱动程序替换)。
使用 Windows 套接字将请求从客户端重定向到服务器。
通过网络传输的数据格式(从客户端到服务器):USER_HEADER, USER_SCSI_REQUEST_BLOCK, [data to be transferred to device]
通过网络传输的数据格式(从服务器到客户端):
结构定义如下:
用于打包和解包从 cdrom.sys 发送的请求的客户端代码:
分配请求和 IO 完成例程的服务器端代码:
一切运行良好(请求在服务器和客户端之间传递,没有 BSOD 等),但 cdrom 设备只是没有出现在客户端。我认为这可能与 srb 数据缓冲区访问有关。你能帮我弄清楚吗?谢谢你。
driver - WDM驱动开发,sc启动错误
我正在学习使用win10 1709和visual studio 2017开发驱动程序。我创建了一个空的wdm项目并将其构建到mydriver1.sys中
但我无法启动服务
sc create mydriver binpath= mydriver1.sys type= kernel [SC] CreateService SUCCESS
sc start mydriver [SC] StartService FAILED 2:
然后我用 Dependency Walker 检查了 mydriver1.sys,它显示许多 sys 文件和 dll 丢失。 1
我该如何解决是问题。我不认为一个一个下载这些 dll 是一个好主意。
我的代码是一个简单的 Hello 世界:
c# - 获取当前 USB 电源状态
我一直在尝试读取 USB 端口 (D0/D1/D2/D3) 的当前电源状态。我无法找到有关如何访问实际状态的太多信息。这是Microsoft docs 上 USB 设备电源状态的描述。它有一整节关于更改,但真的不知道如何阅读它。我在 Windows 和硬件级别上工作的经验很少,如果很明显,请原谅。
我还发现了这个用 C 语言编写的 Microsoft 调试应用程序,名为USBView。如果您安装它并打开 USB 树,则为各个端口显示的第一个信息是其电源状态。
例如
它在 GitHub 上有可用的源代码,但文件长度超过 5000 行,而且我无法很好地浏览 C 代码以告诉如何实际读取电源状态。
我正在尝试将其实现到 C# 应用程序中,但任何语言的帮助将不胜感激!
driver - 如何安装 avssamp 和 avshws 驱动程序?
我正在尝试按照https://github.com/Microsoft/Windows-driver-samples/tree/master/avstream/avssamp中的说明安装 AVstream 驱动程序(avssamp) 。成功安装后,我的驱动程序显示在摄像头下的设备管理器中,但未显示在声音、视频和游戏控制器或音频输入和输出中。它也没有显示在graphedit中。
有没有人有安装这些 AVstream 驱动程序(avshws 和 avssamp)的经验。
我正在为 Win 10 版本 1803 和编译器 VS2017 使用 WDK。
naudio - 将 ASIO 输入路由到 WDM 虚拟麦克风
我正在使用 Dante Virtual Soundcard (DVS) 进行一些声音处理。我使用的软件(ffmpeg)只能从 WDM 麦克风录制。DVS 对 WDM 有 8 个立体声通道的限制,所以我正在查看是否可以使用 64 通道 ASIO 选项。
基本上,我正在尝试将 64 个 ASIO 输入通道路由到 32 个虚拟立体声 WDM 麦克风。然后,根据使用的麦克风,我将在不同时间启动这 32 个 WDM 麦克风的 ffmpeg 录音。
NAudio 的 patchbay 示例(https://github.com/markheath/naudio-asio-patchbay)是一个好的开始,但会路由到 ASIO 输出。是否可以路由到多个 WaveIn 设备?