问题标签 [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.

0 投票
1 回答
111 浏览

infrared - IR_TRANSMIT_PARAMS.TransmitPortMask 值?

我到处环顾四周,找不到任何有关要放入 IR_TRANSMIT_PARAMS 结构的 TransmitPortMask 以与 IOCTL_IR_TRANSMIT 一起使用的值的文档。

所有文档都说它是“包含要传输的端口的位掩码”。

因此,我首先尝试:

那没起效!

然后,在我的计算机上,我尝试了所有值并发现:

这是一种奇怪的值......尤其是对于 PORT1。

当然,如果我输入 -1(或 ~0,或 0xFFFFFFFF),它会同时在所有端口上传输数据。但我想控制个别端口。

现在我收到一些用户的报告说它在他们的系统上不起作用,即使他们拥有相同版本的 Windows。

因此我问,我应该在 TransmitPortMask 中输入什么值?

  • 我正在使用 Windows 7 RC 32 位。
  • 我正在使用 Microsoft Media Center Remote 附带的 Microsoft IR Blaster(不仅仅是兼容的,而是真正的 Microsoft)
0 投票
1 回答
599 浏览

c# - 打印服务器 - 想要捕获打印命令

我应该如何在打印服务器上知道是否有任何客户端触发了任何命令。或以任何方式在服务器的打印驱动程序中连接打印机驱动程序

什么是打印服务器???打印服务器如何在 Window 中工作???多个客户端将如何向单个打印服务器发送请求???是否有任何实用程序正在运行???任何人都可以在这件事上澄清我吗???

0 投票
2 回答
6686 浏览

winapi - 原始 PDO 将 IOCTL 发送到上层过滤器驱动程序 (kbfiltr/moufiltr) 以启用/禁用设备

我对驱动程序开发很陌生,并试图编写一个简单的过滤器驱动程序来启用或禁用键盘或鼠标设备。如果我能让它工作,我想在插入鼠标时使用它来禁用笔记本电脑上的触摸板。我意识到可能已经有软件可以做到这一点,但我对设备驱动程序真的很感兴趣并想要自己学习如何做到这一点。

我正在使用 WDK 附带的kbfiltrmoufiltr示例,它们作为上层过滤器驱动程序安装。kbfiltr 示例创建了一个可以由用户模式程序枚举和连接的 pdo。这允许我将 IOCTL 发送到由KbFilter_EvtIoDeviceControlForRawPdo处理的 PDO 。但是,当我尝试做任何与过滤器驱动程序相关的事情时,比如调用KbFilter_EvtIoInternalDeviceControl这样我就可以做类似的事情

我得到一个蓝屏死机。不是上面的代码,在 vanilla 示例中,设置为 null 被注释掉,只是调用 Kbfilter 会导致 BSOD。我试图直接在 PDO 中设置设备扩展,但这也会导致 BSOD,大概是因为它是 PDO devExt,而不是 kbfiltr 的?

(相关:从 BSOD 获取堆栈跟踪的好方法是什么?我使用 Virtual PC 作为我的测试环境和未经检查的 XPSP3 构建)

我不能将 IOCTL_INTERNAL_KEYBOARD_DISCONNECT 直接发送到驱动程序堆栈(我知道输入设备一次只接受一个连接?)因此需要原始 PDO。我真的只需要发送两个 IOCTL(启用和禁用),我想我只需使用键盘断开和连接,因为这些已经定义。

如果我对这些假设中的任何一个有误,请告诉我,我知道我对此确实是个菜鸟,但我还没有找到很多关于通过 PDO 进行这种通信的文档。

0 投票
1 回答
3217 浏览

c++ - 在 WDK 构建中链接 boost lib 的警告(“LNK4217:本地定义的符号 _ 在函数中导入”)

我正在使用 WDK 构建以下使用 boost 的用户模式应用程序示例,但是当我从同一个终端窗口链接到我之前使用 bootstrap 和 .\bjam 构建的 boost 库时出现以下错误。

IIUC,MSDN说这是因为(严重损坏的)函数 - 似乎是 C++ std lib 函数 - 被标记为 DLL 导入,但我有一个本地定义。这怎么发生的?有没有办法解决这个问题?

另见:一个松散相关的问题

0 投票
2 回答
1632 浏览

windows-xp - 在 Windows XP 上静默安装设备驱动程序

有没有办法以编程方式静默安装设备驱动程序而无需 cat 文件且无需在 Windows Xp 上连接设备?

我正在使用 Windows Driver Kit 中的 DriverPackageInstall 函数。而且只有连接了设备才能安装驱动程序。在其他情况下,我收到一个错误:ERROR_NO_SUCH_DEVINST。但该方法适用于 Windows Vista。

另一个问题是由于 cat 文件丢失而要求用户继续或停止安装的警告对话框。它显示在两个操作系统上。

有任何想法吗?

0 投票
2 回答
32833 浏览

c++ - 虚拟网络摄像头驱动程序

我想开发一个虚拟网络摄像头驱动程序,我将从用户模式将图像传递给它,它将显示为网络摄像头输出。

我不想使用 DirectX 过滤器和 CSourceStream 等。因为它们不适用于某些不使用 DirectX 捕获网络摄像头图像的程序。

我必须编写一个内核模式设备驱动程序。

有任何想法吗?我从 DDK 样本中尝试了 testcap,但它不处理来自用户模式的图像,也没有得到任何输入,只是在网络摄像头中显示 7 种颜色......

任何帮助将不胜感激。谢谢


谢谢你们!

我从这里尝试了代码:http: //tmhare.mvps.org/downloads.htm (查找捕获源过滤器)

当我在 Yahoo、MSN 中编译它时它运行良好,但它使 AIM、Internet Explorer Flash 网络摄像头、Firefox Flash 网络摄像头和 Skype 崩溃......经过 8 次调用后,我在 QueryInterface 中崩溃了,我通过跟踪它找到了它很多套路。。

现在我知道,它在第 8 次调用 HRESULT CVCamStream::QueryInterface(REFIID riid, void **ppv) 时崩溃

如果达到最后一个,则进行第 8 次调用,我的意思是: return CSourceStream::QueryInterface(riid, ppv);

它在 Filters.cpp 的第 17 行

为什么你认为我会崩溃?

感谢大家指导我找到正确的解决方案,即 DirectShow,而不是驱动程序

0 投票
4 回答
2624 浏览

c++ - 以编程方式区分 Windows 中的 USB 软盘驱动器和 USB 闪存驱动器

在 Windows (XP-7) 上,是否有一种可靠的方法可以在 C++ 中以编程方式区分 USB 软盘驱动器和 USB 闪存驱动器?

目前,我使用 WMI 在Win32_LogicalDisk检测到新实例时获取更新,然后使用 LogicalDisk 对象的 DriveType 属性来确定基本类型。这很好用,除了软盘驱动器和 USB 闪存驱动器都是 DriveType DRIVE_REMOVABLE,所以为了区分它们(软盘与闪存),我使用IOCTL_STORAGE_GET_HOTPLUG_INFO接口来确定设备是否可热插拔,并且正在处理意味着它是闪存驱动器而不是软盘的主体。再一次,我认为这在内部软盘驱动器的情况下非常有效(如果效率有点低,使用 WDK API 和 WMI 来获取信息),但不幸的是 USB 软盘驱动器在很多时候也是热插拔的,所以有我可以看到,没有明确的方法可以区分闪存和 USB 软盘驱动器。我知道有些属性可能会起作用,比如检查它是否映射到保留的驱动器 A: 或 B(编辑:仅当机器肯定有软盘驱动器时才相关 - 请参阅MS-KB:如何在 Windows XP 中更改驱动器号分配),或查看描述,但我真的想要更可靠的东西。

很抱歉解释太长,但只是想清楚一点!谢谢

0 投票
1 回答
559 浏览

windows - 如何开发不接触硬件的 Windows 驱动程序?

我需要创建一个模拟不存在的设备的 WDM 驱动程序。O/S启动时需要加载驱动,通过SetupDiXXXand打开和关闭CreateFile,需要响应DeviceIoControl等。

我已经编码了驱动程序,但 XP 拒绝加载它。系统事件查看器说:

由于以下错误,MyDevice 服务无法启动:该服务无法启动,原因可能是它被禁用或没有与之关联的启用设备。

鉴于此,我认为问题出在 INF 文件中(参考下文)。是吗?我应该如何修复它?

0 投票
2 回答
1868 浏览

java - jsp标签库更改复选框名称?

我正在尝试使用全选复选框来选择一列复选框。

所以我给了所有我想要检查的相同名称ABoxesElement以便我可以轻松地在 javascript 中检查它们。

但是,当我在 firefox 中使用 firebug 时,我可以看到复选框没有保留我给它们的名称,而是预先添加了组件名称,并在我的复选框中附加了一个自动递增的数字。

由于我不能在 getElementByName 中使用正则表达式,我该如何在多个复选框中设置相同的值。(ID 用于其他用途).. 这是我的代码:

全选复选框

我要检查的复选框之一的示例

**** Javascript 示例 ****

但是,当页面呈现时,我注意到各个复选框的名称不是ABoxesElement而是类似于component_nameAboxesElement_2的名称,因此除非 getElementsByName 可以接受正则表达式,否则脚本将无法工作。

关于如何解决这个问题的任何想法?

复选框的顶级域名有另一个属性

可以用它来存储“名称”,然后通过它访问元素吗?

编辑单个复选框的 HTML 输出

为全选复选框编辑 2 HTML 输出

0 投票
1 回答
917 浏览

winapi - Win32 DDK:从驱动程序中断调用 API 是否错误?

注意:这不是我遇到的问题,但这是我想了解的事情(只是因为我想成为一个更好的人,并进一步扩大人类理解的视野)。

Raymond Chen的附赠章节中,

替代文字

Raymond 给出了声卡驱动程序中的错误示例:

在硬件中断时调用的原始函数在 DDK 中如下所示:

他们的函数版本如下所示:

零售代码中不仅有剩余的调试内容,而且还在硬件中断时调用非中断安全函数。如果 wsprintf函数被丢弃,系统将在硬件中断中出现段不存在故障,从而导致相当快的死亡。

现在,如果我正在查看该代码,我不会猜到调用库函数wsprintf会是一个问题。如果我的驱动程序代码需要使用 Win32 API 会怎样?

什么是段故障?我理解页面错误的概念:我需要的代码位于已换出到硬盘驱动器的页面上,并且需要在代码执行继续之前从硬盘驱动器返回。当我们在设备驱动程序的中断中时,什么是段错误?

页面错误是段错误保护模式吗?如何避免段错误?Windows 是否会换出设备驱动程序代码?我将如何阻止“ wsprintf 被丢弃”?什么会导致 wsprintf 被“丢弃”?什么是“丢弃”?丢弃有什么好处?当它有东西未被丢弃时

为什么从驱动程序内部调用 API 调用不好,如何解决它?