问题标签 [kmdf]

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 回答
210 浏览

c++ - DeviceIoControl 后访问冲突错误

我正在尝试将 INOUT_PARAM 发送到我的内核驱动程序,看来我已经成功了。当我尝试对其进行编辑并将其发送回应用程序时,我收到以下错误: 错误

这是应用程序代码:

这是驱动程序 IOCTL 函数:

我似乎无法找到问题所在,任何帮助将不胜感激。

先感谢您。

注意:当我发送没有 wp->RStr = "Test"; 的 INOUT_PARAM 时 它成功地回显了初始值,这意味着驱动程序编辑或读取编辑的内存无法正常工作。

注意 2:仅当我回显/计算 n.RStr PCHAR 值时才会出现错误。

重要提示:如果我有 wp->PID = 6969; 在驱动程序中,然后 echo(n.PID); 它实际上有效......我不知道为什么 PCHAR 会导致问题,但这很可能是它。任何想法如何解决这个问题?

0 投票
1 回答
634 浏览

c - 在 WDK 驱动程序中包含 hidpi.h 会导致编译错误

我正在尝试从 Github 上的 Windows 驱动程序示例中修改 KMDF vhidmini2 示例(https://github.com/Microsoft/Windows-driver-samples/tree/97cf8edcaddff4fdbc5cc48d56b7d7eb2c39b749/hid/vhidmini2)。我的一项修改需要包含 hidpi.h 头文件。但是,当我这样做时,会出现编译器错误,其中大部分是:

连同几个:

以及一些语法错误。

为了尝试排除错误,我尝试编译 vhidmini2 驱动程序(工作正常),然后在 vhidmini.h 文件中插入 include 语句(这会导致编译失败)。这是我修改后的 vhidmini.h 文件的包含部分;其余代码保持不变。

顺便说一句,我在这里发现了一个在 Stack Overflow 上发布的类似问题:WDK (Windows Driver Kit) and VC++ headers problem。这个问题的解决方案似乎是告诉 Visual Studio 在加载 SDK 头之前加载 WDK 头。不过,这个问题已经存在几年了,Visual Studio 2015 不允许以同样的方式编辑 VC++ 目录。如果这确实是我的问题的解决方案,那么如何在新的 Visual Studio 中进行此编辑?我试过查看项目的属性表,但格式完全不同。

0 投票
1 回答
426 浏览

kernel - Kernel Mode Win10 Driver BSOD,如何在c++中捕捉?

我正在尝试通过内核模式驱动程序读取另一个进程的内存。它正在工作,我将驱动程序注入另一个驱动程序的空间以使其工作(或者可以只启用测试模式)。

但是,它运行良好,但是当给出错误的地址时,我会导致 BSOD。

以下是关于一个示例 BSOD 的信息:

当我将驱动程序注入另一个驱动程序时,无法解析符号等。还有一些额外的信息:

现在我正在做的事情:我给驱动程序 4 个值并有一个全局缓冲区来将读出的值写入:

字符缓冲区[5000];NTSTATUS DevioctlDispatch( In struct _DEVICE_OBJECT *DeviceObject, Inout struct _IRP *Irp ) 我在驱动程序中所做的一切都在多个 __try __catch/__except/__finally 块中,我希望我能抓住错误的读出......我得到了这个过程处理然后将其(在 ProbeForRead 之后)传递给 RtlCopyMemory:

我经常这样做,但无论如何我都确保我分离。

我应该使用 KeStackAttachProcess 吗?蓝屏死机从何而来?我抓错了吗?谢谢!是的,我正在阅读用户空间应用程序。

0 投票
1 回答
99 浏览

inf - kdmf pnp驱动安装时找不到设备

我正在尝试创建一个 pnp 驱动程序,但是当我运行时sc start driver-name出现系统错误 1058(禁用禁用或没有关联的启用设备)。但是,如果我修改 nonpnp 的代码WDF_DRIVER_CONFIG_INIT(&config, WDF_NO_EVENT_CALLBACK);并且config.DriverInitFlags |= WdfDriverInitNonPnpDriver;服务启动并且我能够调试。

我已经为通过设备管理器验证的设备尝试了不同的 hwid 值。DriverEntry 运行良好,我使用了 windbg,但从未调用过设备添加函数。

pnp 的驱动程序输入代码。

0 投票
0 回答
310 浏览

windows - CreateFileMapping 返回错误 193(%1 不是有效的 Win32 应用程序)

我有一个打开文件然后调用 CreateFileMapping 的用户应用程序。我有一个驱动程序可以创建/打开我跟踪并成功执行的文件。问题是 CreateFileMapping 总是返回错误 193。我已经成功映射到其他文件,所以我认为一定是驱动程序方面的问题。Windows 8.1 x64(驱动程序显然是 64 位)和应用程序也是如此。我已经使用dependency walker来检查任何dll问题,一切似乎都很好。

驱动程序片段:

用户应用程序片段:

编辑1:驱动程序中的文件名是#define DEV_PATH L"\\DosDevices\\C:\\testdisk.txt" 符号链接正在#define DEV_SYMBOLIC_LINK L"\\DosDevices\\testdrive.txt"使用该功能WdfDeviceCreateSymbolicLink ,我将设备名称设置为#define DEV_NAME L"\\Device\\testdrive.txt"使用该功能WdfDeviceInitAssignName

编辑 2:我已经更新了设备和文件路径。从用户空间访问文件时,我仍然收到 193 错误\\.\qqdevice\test.txt,如果我使用C:\qqdevice\test.txt该文件,则会创建文件,但驱动程序永远不会收到通知。

0 投票
2 回答
1221 浏览

windows - 使用 WDK 10 构建(在 WDK 7 上)的等效命令

我有一些非常旧的脚本使用 build 命令来编译 WDK 7。构建静态库的示例命令是:

我可以使用什么等效命令来编译 WDK 10?另外,我在哪里可以找到有关 build 命令用法的文档。

0 投票
1 回答
2728 浏览

windows - DeviceIoControl 错误 1 ​​函数不正确

CreateFile我已经在内核空间中创建了一个设备,并使用我能够将 ioctl 发送到驱动程序并正确执行它们在用户空间中访问它。不知道如何跟踪返回后WdfRequestComplete和返回后发生的情况,我以错误 1(无效函数)结束。在将其标记为 dup 之前,请注意这与我编写驱动程序 ioctl 以及使用的是同步 io 而不是异步的不同处。

在用户空间:

在内核空间

更新1:

我试过WdfRequestCompleteWithInformation(Request, status, OutputBufferLength);但结果相同。

另外,我注意到 inputBuffer 和 outputBuffer 的地址是相同的。

更新2:我试着做

仍然得到错误1

0 投票
1 回答
88 浏览

windbg - windows kdmf 驱动程序 virtio 调用 virtqueue_add_buf 导致系统致命错误

我有一个 Windows VM 驱动程序,它允许用户空间应用程序通过 IOCTL 进行通信。我需要向主机公开一个结构(使用 virtio),并且在using函数virtqueue_add_buf中初始化 virt 设备后尝试使用。调用时出现致命错误。EvtDevicePrepareHardwareVirtIODeviceInitializevirtqueue_add_buf

下面是一段代码

我得到的错误是致命系统错误:0x000000d1(0x0000000000000014,0x0000000000000002,0x0000000000000000,0xFFFFF80109FC0637)

中断指令异常 - 代码 80000003(第一次机会)

然后windbg 无法加载符号和崩溃使我的调试会话无用。有什么想法可以调试这个或我可能缺少什么吗?

0 投票
0 回答
516 浏览

c++ - Visual Studio 2015 内核调试器卡住

我正在尝试使用 Visual Studio 2015 编写 KMDF 驱动程序。当我尝试部署驱动程序并启动调试器时,一切似乎都正常工作:Visual Studio 能够构建解决方案并将其部署到目标计算机(这是虚拟机),但是在部署文件之后,似乎卡住了:我无法暂停调试器并执行调试器的命令。

我的问题:如何让调试器中断/暂停?

我试过的:

我已经尝试通过网络和管道连接到目标计算机,但似乎都没有改变任何东西。

我尝试将测试证书设置为“WDKTestCert”。

我尝试将包项目添加到解决方案中。

附加信息:

我的项目配置与 MSDN here上显示的完全相同。

我的主机和目标计算机都运行 windows 8.1 64 位。

目标计算机是 VMWare 虚拟机。

我正在使用 Visual Studio 2015 版本 14.0.25123.00 更新 2。

我正在使用 WDK 10。

调试器的日志:

在这一点之后,似乎什么都没有发生。

任何帮助,将不胜感激。

0 投票
1 回答
233 浏览

driver - .reload 命令后与目标的连接丢失

在 WinDbg 中:文件->符号文件路径?我将路径设置为: Srv*c:\symbols*https://msdl.microsoft.com/download/symbols 在此路径文件设置之后,我正在尝试制作此示例: https ://msdn.microsoft.com/en-us/library/windows/hardware/mt269367 在第 5 节第 2 步中。当我键入.reload /f调试器失去了与目标的连接。如果我不设置符号文件路径,WinDbg 也会在同一点分解。

对我来说,windbg 似乎失去了与目标的连接并且不再建立它。即使我在 VM 上重新启动目标系统。

有人可以告诉我发生了什么,我做错了什么或为什么会发生这种情况?

我正在使用 VMWare Player。我的主机和目标操作系统是 Windows 10 Pro。VMWare 配置为在 NAT 中使用网络。Echo 驱动安装成功。

在下面,您可以看到 WinDbg 日志:

问候。