问题标签 [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 回答
1053 浏览

wdk - 如何在 WDK 中构建 WDM 驱动程序?

我想在最新的 WDK 中构建 WDM 驱动程序。WDM 和 WDF 的源文件有什么区别?如何将构建标记指定为 WDM 而不是 WDF?

0 投票
1 回答
206 浏览

driver - UMDF-应用层的锁设备

我正在使用UMDF over WinUsb 为我们的设备编写一个简单的 USB 驱动程序。该驱动程序可以被多个应用程序同时使用。我需要实现 WdfDeviceLevel\WdfObjectLevel 没有给我的自定义锁定系统:我想要一个原子读写功能:

  1. 获取设备上的锁
  2. 写一个值
  3. 读取一个值
  4. 释放锁

我怎样才能实现这样的功能?我找不到如何在界面功能之上公开自定义功能。除了这个特定的原子函数之外,如果我能让每个应用程序能够获得一个锁,该锁将阻止所有其他应用程序访问该设备,那就太好了。

0 投票
1 回答
206 浏览

winapi - 枚举在 Windows XP 上录制或播放的进程

我想枚举所有进程,这些进程对系统中的任何声卡都有一个打开的句柄。理想情况下,我想要一个“过程 - 声卡 - 动作”关系,其中动作可能是播放或录制。

是否有用于在 Windows XP 上获取此信息的 Win32 API?此 API 是否也适用于较新版本的 Windows?

0 投票
1 回答
720 浏览

wdk - Signtool 停止添加会签 - 怎么了?

我最近遇到了一个非常奇怪的问题。我们产品的编译包括签署内核模式驱动程序和添加会签。这是通过调用 DDK(现为 WDK)中包含的 signtool 来完成的:

"%DDKBASE%\6001.18000\bin\SelfSign\signtool.exe" 签名 /T http://timestamp.globalsign.com/scripts/timstamp.dll /ac "path-to-countercert\MSCV-GlobalSign.cer" /s SPC /n "EldoS 公司" %1

直到最近,当我们发现反证书没有添加到签名的驱动程序时,一切都运行良好。signtool 不报告任何错误并默默地忽略证书。签名本身和主证书链已正确应用,并且仅缺少反证书。

来自更高版本 WDK(版本 7600.16385.0)的 SignTool 使用相同的命令行可以正常工作。

我尝试重新注册 capicom.dll,附带有问题的 signtool(它位于同一个文件夹中),但这没有帮助。

我不确定我们是否可以使用来自 7600.16385.0 的 signtool,因为我觉得它可能会破坏与 Windows 2000 的兼容性。

所以问题是,是否有人知道可能出了什么问题?

Upd:嗯,看起来 7600 signtool 工作正常(即使用该版本签名的驱动程序在 XP 和 Windows 7 上工作正常),所以我们现在就走这条路,将来会用我们自己的自制工具替换 signtool 以避免这种情况惊喜。

0 投票
3 回答
1618 浏览

winapi - 指针增量差异 b/w 32 位和 64 位

我试图在 64 位 win7 (amd64) 上运行一些为 32 位 vista (x86) 编码的驱动程序,但它没有运行。经过大量的调试和反复试验,我让它在后者上工作,但我不知道它工作的原因。这就是我所做的:

在许多地方,缓冲区指针指向一个结构数组(在不同的地方不同),为了增加它们,在某些地方使用了这种类型的语句:

在某些地方:

第二个是退回垃圾,所以我把它们都换成了第一个。但是我在第二个之后在网上找到了许多示例驱动程序。我的问题:

  1. 这些宏在哪里定义(谷歌没有多大帮助)?
  2. 我知道所有 P_ 宏都是指针,为什么将指针转换为 ULONG?这在 32 位上如何工作?
  3. PCHAR 显然会根据环境改变宽度。你知道有什么地方可以找到这方面的文件吗?
0 投票
1 回答
1541 浏览

memory-management - #pragma alloc_text(PAGE) 代码不是页面对齐的

对于 WinXP 32 位,我在使用 DDK(一个相当旧的版本:3590)时遇到了一个(可能的)问题。我的驱动程序包含一些未初始化的静态变量(我想它们应该分配给 .bss 部分)和可分页代码部分中的一些函数(标有#pragma alloc_page(PAGE, func))。可分页代码收集在单独的目标文件中。我发现链接器似乎将静态和可分页代码分配给内核地址空间中的同一页面(即变量位于 0xEFFCB0A0 且函数位于 0xEFFCB600 - 已通过 windbg 验证)。静态变量在中断环境中使用,因此它们的页面必须锁定在内存中。但如果同一页面包含可交换代码,恐怕变量会突然消失。链接器'

如何强制链接器/加载器将单独的页面分配给可分页代码?是否有一些“#pragma”来强制部分对齐属性?难道我做错了什么?

PS:驱动程序加载器确实足够聪明,可以将包含变量和代码的页面从分页池中取出,但是由于页面包含变量,它必须是可写的。我希望可执行代码位于只读页面中。内核模式下错误的数组访问仍然很难调试......

PPS:在我的函数之前和之后添加了 4096 个“nop”......好吧,它有效......没有更好的建议吗?

0 投票
1 回答
811 浏览

delphi - delphi 应用程序与 Windows NT 系统驱动程序之间的通信

我正在尝试构建一个非常简单的驱动程序。它的唯一目的是注册“PsSetCreateProcessNotifyRoutine”,并在从内核收到的回调中,通知我的 Win32 应用程序启动和停止了哪些进程。

我只知道如何用“DriverEntry”和“DriverUnload”构建这样一个简单的驱动程序,并用DDK编译。但我不知道如何实际实现通信。我知道它可以用 IOCTL 来完成。但除此之外,我还在黑暗中。我找不到如何在 Delphi 中执行此操作的简单示例。我只知道可以做到。

所以我正在寻找的是一些简单易懂的教程,说明如何做到这一点或更好地使用带有驱动程序代码的示例 delphi 程序。也许还有其他的交流方式。

任何帮助都将不胜感激。

0 投票
1 回答
144 浏览

winapi - Windows 驱动程序中的 Windows 版本宏

_WIN64可用于查找平台是 32 位还是 64 位。

驱动程序(内核模式代码)中是否有任何可用的宏可用于告知操作系统的版本。XP、2003、Vista 还是 7?

0 投票
2 回答
832 浏览

visual-studio - 为什么从最近的 WDK 版本中删除 lib.exe?

这是一个错误吗?Visual Studio 2008 构建系统使用 lib.exe 创建静态库。我使用 WDK 的 setenv.bat 设置构建环境,然后启动 devenv.exe /USEENV。构建用户模式程序和 dll 可以工作,但由于缺少 lib.exe 静态库,无法构建。

0 投票
1 回答
689 浏览

windows - 2 只鼠标,在 Windows 上仅捕获一只鼠标(DirectInput、DDK、Linux 等)

我已将 2 只鼠标连接到 PC,我希望一只鼠标可以作为普通鼠标工作并专门捕获第二只鼠标。

首先,我尝试使用 DirectInput。它在 InstanceName 中显示了 2 个带有 word mouse 的设备。但只有一台设备有 DeviceType.Mouse,而且它只是真正工作的设备。当我获得它时,它正在阻止两只老鼠。

其次,我决定创建驱动程序。我下载了WinDDK。有鼠标过滤器驱动程序示例。我能够编译它。但我不是驱动程序程序员。我理解起来很复杂,但它有一些与 PS/2 鼠标相关的代码。我所有的鼠标都是USB的。

它应该与 .INF 文件一起安装。我更喜欢动态加载它。

我不太确定这是正确的方向。我这样做是为了我的业余机器人项目。我希望 PC 从鼠标中获取一些信息作为传感器。我认为一定有现有的类似项目或解决方案。

我的桌子上也有 linux pc。将鼠标附加到linux并解析可能会更好

看起来像 sudo cat /dev/input/mouse1 - 提供一些数据,但不阻止设备点击和移动。

我希望简单的解决方案已经存在

干杯马克斯