问题标签 [wdk]
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.
licensing - 如何找出 cfgmgr32.lib 的许可证?
我有一个使用 PnP 配置管理器库中的一个函数的库。因此,cfgmgr32.lib 包含在我们的构建中。
但我不知道它来自哪里,也不知道它附有什么许可证。我认为它在DDK中。
可以将其标记为“专有”软件吗?
windows - 什么是 IOCTL_USB_GET_ROOT_HUB_NAME 的目标设备(USB 驱动程序特定的 IOCTL IRQ)
我对 USB IOCTL IOCTL_USB_GET_ROOT_HUB_NAME有点困惑。它的目标设备是什么?虽然 MSDN WDK 文档清楚地表明了目标设备,但我仍然对 WDK 提供的 USBVIEW 示例感到困惑。我感到困惑的原因如下:
我是在 Windows 中编写内核模式和 USB 驱动程序的新手,现在正在研究 Windows 驱动程序套件中的 USBVIEW 示例http://msdn.microsoft.com/en-us/library/ff558728(v=vs.85).aspx . MSDN 将 USBVIEW 示例执行的第一步描述为:
枚举主机控制器和根集线器。主机控制器具有“HCDx”形式的符号链接名称,其中 x 从 0 开始。
使用 CreateFile() 打开每个主机控制器符号链接。
在树视图中创建一个节点来表示每个主机控制器。
打开主机控制器后,向主机控制器发送 IOCTL_USB_GET_ROOT_HUB_NAME 请求以获取作为主机控制器一部分的根集线器的符号链接名称
但是,我仔细检查了 MSDN http://msdn.microsoft.com/en-us/library/ff537326(v=VS.85).aspx中 IOCTL_USB_GET_ROOT_HUB_NAME 的使用情况,上面 写着:
IOCTL_USB_GET_ROOT_HUB_NAME 是用户模式 I/O 控制请求。此请求以USB 集线器 FDO为目标。
请注意,IOCTL_USB_GET_ROOT_HUB_NAME IRP 的目标是 USB 集线器 FDO。但是,正如 USBVIEW 示例所描述的,我们只是检索了主机控制器符号链接,这意味着设备对象是主机控制器设备对象。我们如何向它发送 IOCTL_USB_GET_ROOT_HUB_NAME IRP?我们应该先以某种方式检索 USB 集线器 FDO 吗?
windows - 为每个打开的设备实例保留数据
在 Windows 设备驱动程序中:
- 每个驱动程序的信息存储在全局变量中
- 每个设备的信息存储在
DEVICE_OBJECT.DeviceExtension
据我了解, a在内核空间中CreateFile
构造 a FILE_OBJECT
,因此设备的每个打开实例都有自己的FILE_OBJECT
. 如果是这样,我可以将每个实例的信息保留在该IO_STACK_LOCATION.FileObject.FsContext
字段中吗?
c++ - std::string 和 std::wstring 的 wdk ddk 编译器问题
我已经开始使用 WDK / DDK(我假设它们是同一件事)示例,尤其是打印机端口监视器示例。我已经使用他们的构建工具进行了编译,我可以附加到假脱机进程并通过......好东西进行调试!
.. 当我只想写一些调试时,问题就来了。我真的认为这很简单(有一段时间没有做 c++ 了!)但它似乎不是!
我遇到的当前问题只是尝试创建 std::wchar 的实例,如下所示:
问题是,当我使用 wdk 构建工具进行编译时,会出现以下错误:
我猜这是因为编译器可能不理解 std:: 位?行号指向上面的 wstring 声明。
我已经添加了include <string.h>
,但这没有帮助,我的源文件如下:
此外,如果我让 wstring 工作,我将使用它和 OutputDebugString() 来处理我对 Visual Studio 输出控制台的调试,但我想我已经读到某处可能无法正常工作,因为端口监视器在内核模式下运行?
如果有人能对此有所了解,我将不胜感激!:)
安迪。
winapi - DeviceIoControl 如何从设备驱动程序返回空终止字符串
一些驱动程序通过DeviceIoControl返回一个结构,该结构包含一个以 null 结尾的字符串,比如符号名称。该字符串的位置应该在哪里?例如,USB 主机控制器接受IOCTL_USB_GET_ROOT_HUB_NAME ( http://msdn.microsoft.com/en-us/library/ff537326(v=VS.85).aspx ),它接受USB_HCD_DRIVERKEY_NAME结构的缓冲区作为输出。仔细观察,该结构的DriverKeyName字段http://msdn.microsoft.com/en-us/library/ff539325(v=VS.85).aspx只是一个具有 1 个 WCHAR 类型元素的数组。实际的驱动程序密钥名称应该在哪里?
vb.net - 使用 Windows 驱动程序工具包 DriverPackagePreinstall 时出错
我试图在我的 Windows 程序加载后预安装一个 .inf 驱动程序,并以这个问题为例。我在 VB.Net 中写作,而原始问题是在 C# 中完成的,所以这可能是我在翻译中丢失的东西,但这就是我所拥有的:
我的 .inf 文件位于名为 Drivers 的目录中,并在应用程序文件中设置为必需的“数据文件”。我的应用程序是通过 ClickOnce 部署的;但是,我目前无法让它在我的本地机器上工作。
但是,当我逐步使用调试器并在 PreInstall 函数中调用 DriverPackagePreinstall 时,我得到 -536870347 作为 Int32 结果。我知道这没有意义,因为它应该是一个正错误代码或 0 (ERROR_SUCCESS)。我已经检查了 .inf 文件是否位于我期望的位置,并且我已经使用该文件位置和 WDK 构建环境运行了 DIFxCmd.exe \p,我得到了预期的结果。有谁知道为什么我会在我的申请中得到如此奇怪的结果?或者有没有人有另一种/更好的方式来安装带有 ClickOnce 应用程序的 .inf 驱动程序?
windows - 是否可以在硬件配置文件中自定义上限或下限过滤器?
要在特定类别的设备上设置过滤器驱动程序,您必须修改其UpperFilters
或LowerFilters
MULTI_SZ 注册表值。例如,要将上层过滤器附加到属于 USB 设备类的所有设备,您需要修改以下值(可能通过 DpInst 等):
是否可以针对硬件配置文件进行此更改?--也就是说,仅在特定的硬件配置文件中附加过滤器驱动程序?
我的目标是,如果在开发过程中无意中引入了导致过滤器驱动程序在启动时崩溃的错误,那么在没有崩溃驱动程序的情况下很容易启动机器。(安全模式也解决了这个问题,但需要一段时间才能启动。)
winapi - 从用户模式打开驱动程序的句柄
我有一个驱动程序,并为它创建了一个符号名称。象征性的名字是...
当我尝试使用CreateFile()
from访问设备对象时usermode
,总是出现错误,"The system cannot find the file specified".
我尝试使用CreateFile()
以下路径...
但它仍然不起作用。但是,如果我在 Visual Basic 6 中尝试相同的 API 调用,“\\.\\hook”可以正常工作,但是文档说它应该是“\\\\.\\hook”。这里有什么问题 ?所有这些“\”的目的是什么,我如何使它与 Visual C++ 一起工作?
winapi - Windows Driver Kit 的 RtlStringCbCopy 函数
根据 MSDN 文档,RtlStringCbCopy 安全字符串函数应该是这样的:
但是当我编译我的代码时,ddk 说:
1>c:\work\mydevdrv\loopback\driver.cpp(421):错误 C2664:“RtlStringCbCopyW”:无法将参数 1 从“LPTSTR”转换为“NTSTRSAFE_PWSTR”链接可执行文件 - i386\loopback.sys 1>链接:错误LNK1181:无法打开输入文件 'c:\work\mydevdrv\loopback\objchk _wxp_x86\i386\driver.obj' 构建:完成时间:2011 年 4 月 19 日星期二 20:21:51
似乎它期望第一个参数的类型是 NTSTRSAFE_PWSTR 而不是 LPTSTR。但是这种 NTSTRSAFE_PWSTR 类型从未在 MSDN 文档中提及。那么我应该使用哪种类型?
我对这个函数的调用是这样的:
c++ - 将 char 数组转换为 Unicode
我正在用 Visual C++ 开发设备驱动程序。我需要将字符数组转换为 Unicode 以及驱动程序中的宽字符数组。
指向有用功能的指针将不胜感激。我知道“RtlInitUnicodeString”,它将 wchar 与 Unicode 相协调,但需要帮助来转换简单的字符数组。