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

windows - windows I/O manager - IRP在read-like和write-like中的分类

我正在编写一个Windows 文件系统微过滤器驱动程序,该驱动程序必须根据其类型(读/写)在操作前回调中使I/O 请求数据包(IRP)失败。 我如何从回调参数(或其他地方?)中找出操作是类似读取(仅读取数据)还是类似写入(修改磁盘上的数据 - 写入、删除、格式化等)?

是主要 IRP 代码的列表。

我正在考虑类似的事情:

但我不确定,我认为这些仅在术后回调中可用。文档真的很麻烦。

进一步说明的代码示例:

0 投票
1 回答
258 浏览

function - 我无法包含 NTDDk 标头

我正在尝试包含标题<ntddk.h>,但它没有被整合。我需要更改任何项目设置吗?

0 投票
2 回答
3321 浏览

c++ - 使用 MinGW 进行 Windows DDK 开发?

是否可以在不使用 Visual Studio 的情况下开发 Windows 驱动程序(特别是在屏幕上显示数据而不是实际打印的类似 PDF 的打印机驱动程序)?我正在考虑使用免费的 C++ 工具,例如 MinGW/gcc。

0 投票
1 回答
3044 浏览

c - 将 32 位 Windows 驱动程序移植到 64 位 Windows

由于我们的应用程序在全屏模式下运行,因此我们开发了一个键盘挂钩驱动程序来禁用用户对诸如 等键的ALT+F4输入CTRL+ALT+DEL

该驱动程序是使用 Windows 驱动程序工具包用 C 语言开发的。

为 32 位编译工作,它在 Windos 7 32 位上加载驱动程序,它按预期工作。

为 64 位编译工作,它只是不会在 Windows 7 64 位上加载驱动程序(但已签名并在键盘驱动程序中列出)。

以下是我们的SetEnv设置:

有什么我想念的吗?

我是否需要对代码进行特定更改才能使其在 64 位上运行?

0 投票
3 回答
2297 浏览

c# - 打印作业接受和路由软件

我想创建一个可以接受来自其他计算机的打印作业的软件,然后将这些打印作业路由到连接了打印机的 LAN 上的 PC。

它是如何发生的 -> 1- 当名为“虚拟打印机”的软件安装在计算机“X”上时,Windows 应该认为它是该计算机的打印驱动程序/附加打印机。2-然后该PC的管理员转到Windows中的“设备和打印机”并选择“虚拟打印机”,右键单击并查看属性并选中复选框“共享这台打印机” 3-现在局域网上的其他PC可以看到在连接到计算机“X”的 LAN 中有一个名为“虚拟打印机”的共享打印机 4- 因此,当他们需要打印某些东西时,他们可以通过选择“虚拟打印机”将打印作业发送到这台“虚拟打印机”。

如何编写此程序(可能是 c#)以将其自身作为打印机显示到 Windows,然后接受传入的打印作业并将它们发送到连接了打印机的所需计算机。

我不知道如何编写这个东西,我也没有知识,请帮助我提供一些资源、代码或示例项目或至少与此类似的示例。谢谢

0 投票
1 回答
18234 浏览

visual-c++ - WDK (Windows Driver Kit) 和 VC++ 头文件问题

我正在尝试从 USB HID 设备中读取数据,我知道如何在 C# 中使用 DLLImport hid.dll 进行读取,但我想从 C++ 中读取,这样我就不必声明所有结构等,并且只包含头文件。

所以我下载了WDK,然后在包含头文件和链接库时遇到很多错误:

错误(163 个中的 6 个):

好的,所以我在某处读到我也必须升级 Windows SDK,我有 Microsoft Windows SDK v6.0A,我下载并安装了 Windows SDK v7.0。但是看起来我现在有两个 SDK?我如何在 Visual Studio 中正确进行 SDK 升级?

非常感谢您的帮助,

谢谢,卡洛斯

0 投票
7 回答
1833 浏览

c - 如何编译 Programmer Dvorak?

我正在尝试编译开源项目Programmer Dvorak。问题是它有点旧,并且没有使用当前版本的构建工具构建。

你可以在我的项目的谷歌代码页面上看到完整的源代码以及我在网上所做的修改。修订版 2是原始项目中未经修改的源文件。修订版 3是我进行所有重大更改的地方。您可以在此处查看两个修订版之间的差异

剩下的唯一明显问题是一些 LINK 警告:

  • LNK4254(例如)——我在这里section '.edata' (40000040) merged into '.data' (C0000040) with different attributes.问了一个独立版本的问题。
  • LNK4210(例如.CRT section exists; there may be unhandled static initializers or terminators

如何修复这些警告?我可以忽略它们吗?

尽管有这些警告,它仍然会生成一个 exe。但是,如果我继续运行它,它不会正确安装,我需要求助于系统还原才能再次安装正式版本。

这可能是因为警告或仅仅因为我没有正确修改项目。

我还需要做什么才能使该项目可安装?


构建过程(以及我的修改的解释):

它说您需要 Windows DDK,但似乎Windows 驱动程序工具包已经取代了它,所以我得到了它。我只安装了“构建环境”。

1. 根据Readme.txt,您应该运行:

2.build-layout.bat运行。

我不得不修改这个文件(见这里的差异):

  • WinDDK路径已修改,因为我有更新版本(MOD-1)
  • set PATH=...%WINDDK%\bin\x86\x86;添加了,因为link.exe它位于那里(MOD-2)
  • set INCLUDE=,%WINDDK%\inc\wxp更改为%WINDDK%\inc\api,因为该wxp文件夹不存在,我最好的猜测是该api文件夹是必需的,因为它包含kbd.h,它kbddvp.c使用(MOD-3)
  • 对于set LIB=,%WINDDK%\lib\crt被修改为%WINDDK%\lib\crt\i386, 这样libcmt.lib就可以找到了。请参阅下面的 MOD-7。(MOD-4)

3.fkbddvp.mak运行。

我不得不修改这个文件(见这里的差异):

  • 变量的路径CL32从 更改$(WINDDK)\bin\x86\cl.exe$(WINDDK)\bin\x86\x86\cl.exe,第一个 .exe 不存在,我相信这是我应该使用的 .exe 。(MOD-5)
  • 变量的路径CL64从 更改$(WINDDK)\bin\win64\x86\amd64\cl.exe$(WINDDK)\bin\x86\amd64\cl.exe,这是我对丢失 .exe 位置的最佳猜测。(MOD-6)
  • -opt:nowin98根据 Bobby 的建议,删除以抑制警告LNK4224(即/OPT:NOWIN98 is no longer supported)。(MOD-10)
  • libc.lib我没有使用不存在的,而是使用libcmt.lib. 我读了这篇文章,它建议改用这个文件。(MOD-7)
  • cabarc我没有使用过时的实用程序,而是使用makecabwith makecab-dir.ddf。我对如何使用这个新实用程序执行相同的逻辑做出了最好的猜测。(MOD-8)

4.build-installer.bat运行。

我不得不修改这个文件(见这里的差异):

  • 这也是 using cabarc,我将其修改为 use makcab,类似于 MOD-8,除了这里它以编程方式创建 .ddf 文件。(MOD-9)

完整的输出

这是完整的输出,如果您想查看它:

0 投票
3 回答
23040 浏览

c - 如何理解windows ddk中的“NTSTATUS”、“NT_SUCCESS” typedef?

两个问题:

1.

在“ntdef.h”中,NTSTATUS定义如下:

“__success(return >= 0)”到底是什么?

2.

在“ntstatus.h”中,STATUS_SUCCESS被定义为 0。

但是“ntdef.h”中的NT_SUCCESS宏是:

不应该是“状态== 0”吗?

0 投票
1 回答
1070 浏览

process - WDK : 通过 name.exe 获取 processId

我正在 Windows 过滤平台中开发一个驱动程序,我需要另一个进程的进程 ID 来完成我需要做的事情。我只知道该进程的文件名(name.exe)。

在 win32 中,我可以使用函数CreateToolhelp32Snapshot来获取所有进程的列表,并且可以在那里搜索 PID。( http://msdn.microsoft.com/en-us/library/ms684834(VS.85).aspx )

不幸的是,在内核模式下,这些东西不可用。任何人都知道如何通过内核空间获取只知道二进制名称的 processID 吗?

谢谢,马可

0 投票
1 回答
255 浏览

c++ - 打印机驱动程序开发 - 从 32 位到 64 位

我开发了一个为 32 位系统编译的驱动程序。驱动程序是基于 unidriver 的。

有谁知道要获得与 64 位兼容的驱动程序需要什么?我需要对代码进行哪些更改(如果有)?还是只是用 64 位版本的 DDK 编译它?

提前致谢。

努诺