问题标签 [deviceiocontrol]

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 投票
0 回答
307 浏览

c# - DeviceIoControl 返回 1306 和 IOCTL_SCSI_PASS_THROUGH

我正在尝试在 C# 中将 DeviceIoControl 与 IOCTL_SCSI_PASS_THROUGH 控制代码一起使用。但 DeviceIoControl 返回错误代码 1306。

我想做的是获得INTEL NVMe SSD的SMART。

我试过参考Crystal Disk Info的源代码。

它在 C 或 C++ 中成功运行。

以下源代码的问题在哪里?

0 投票
1 回答
1230 浏览

c# - 无法获取 OneDrive 文件夹的重新分析点信息

我正在使用下面的代码在我的应用程序中检索重解析点信息。这适用于符号链接和交汇点,但对于 OneDrive 文件夹及其所有子项而言,“不是重新分析点”失败。

本机声明:

以下命令可以成功检索 OneDrive 文件夹的重解析点信息。

fsutil 重解析点查询 C:\Users\UserName\OneDrive

确定如何使此代码正常工作会很棒。非常令人沮丧的是,确认为具有重新分析点的文件夹会收到一条错误消息,但它们不是。

我也在 C++ 中尝试过这个,但得到了同样的错误。

0 投票
1 回答
108 浏览

c++ - 如何在 C++ 中将 OID_PM_WOL_PATTERN_LIST 发送到 NDIS 驱动程序?

我想查询在 C++ 中定义在以太网卡上的 Wake On Lan 模式(稍后我想上传这样的模式,但一步一步。:))。据我了解,我必须将OID_PM_WOL_PATTERN_LIST请求从用户空间发送到内核空间。我发现在 Windows 上可以调用DeviceIoControl发送这种请求。我使用 > this < 示例代码作为起点。我有设备的 GUID,我可以发出一些基本的 IOCTL_* 命令。

如果我理解得很好,我必须发出一个特定的 IOCTL_* 命令,其中 InBuffer 指向一些结构(可能是 NDIS_OID_REQUEST),其中填充了 OID_PM_WOL_PATTERN_LIST 命令。

我试图找到一些应该如何做到这一点的例子,但我找不到合适的例子。有人可以帮助如何做到这一点吗?或者一个示例来源会有所帮助。

0 投票
1 回答
432 浏览

c# - DeviceIoControl 控制代码

我在 c# 中使用 deviceIoControl 函数,我需要一个控制代码来定义会发生什么。我正在寻找它们的值,但我只能找到它们的名称,例如 FSCTL_FILESYSTEM_GET_STATISTICS。

如何知道 decixeIoControl 函数的代码值?

谢谢!

0 投票
1 回答
149 浏览

c# - 无法将 C# 字符串从用户态传递到内核模式 C 并使用它来查找特定的 LDR_DATA_TABLE_ENTRY

我很难将从用户模式类型 LPWSTR 传递的字符串与 LDR 表条目类型 UNICODE_STRING 进行比较

内核 C:

该结构通过 deviceiocontrol 传递给内核。对应的用户态结构如下:

其中字符串ModuleName被编组为 LPWStr。

ModuleName是进程中已加载模块的所需搜索词。现在,这就是事情变得棘手的地方。我可以通过 访问的字符串_LDR_DATA_TABLE_ENTRYUNICODE_STRING. 我想将此 UNICODE_STRING 与我的 LPWSTR 进行比较。

我尝试了以下方法,但没有奏效:

我也尝试过 wcscmp 和其他一些东西。我不确定如何正确比较这两者。我在函数中添加了一些次要的伪代码,以提供关于我想要做什么的额外上下文。

0 投票
1 回答
172 浏览

c++ - 在物理键盘上触发按键

我想在键盘上触发 Keypress。在物理键盘上 - 因此它必须以该特定键盘作为其源来遍历所有内核过滤器。这样的事情可能吗?

我查看了 DeviceIOCtrl 和 IOCTL_KEYBOARD_INSERT_DATA,但没有找到文档。有人说,它没有在驱动程序中实现。另一个来源尝试使用 IOCTL_INTERNAL_I8042_KEYBOARD_WRITE_BUFFER,但也说,它可能不适用于那种东西

在键盘通过内核过滤器之前,是否有其他选项可以触发键盘上的按键?

为什么我什至想这样做? 是的,这可能是一个 XY 问题,但它是我目前能想到的唯一解决方案。我只想截取来自特定键盘的键。有 RawInput,它告诉我击键的键盘,但无法拦截,还有一个 LowLevel Keyboard 钩子可以拦截,但无法识别键盘。更糟糕的是,RawInput在 LowLevel-Hook之后触发,因此在截取击键之前无法获取键盘。有一些神奇的独角兽方式可以使用在 RawInput 之后触发的全局 Hook,但处理所有边缘情况看起来很痛苦。

有一个API可以拦截我选择的键盘敲击。它基本上安装了一个允许拦截击键获取键盘ID。但是:该 ID 有点随意,并且不遵循我可以用来将整数值与特定键盘设备相关联的任何规则。例如,重新插入设备时它会发生变化,与 \Device\KeyboardClassX 等无关。因此,每次重新连接键盘/启动应用程序时,用户都必须主动按下一个键,以便我可以确定哪个物理键盘的 id实际上代表。我想避免这种情况并自动获取特定设备的 ID。我的想法是触发键盘(-控制器?)中的按键并使用驱动程序捕获它,从而将任意 ID 与设备相关联。

因此,如果我的 Y 有不同的 X,请随时提出建议。我想避免所有那些RawInput 和 GlobalHook 的 Magic Unicorn Way不能可靠工作的边缘情况。任何主要语言的示例都可以。也许没有办法解决在应用程序启动时手动按下按钮来识别键盘的 UX 不便......

0 投票
1 回答
263 浏览

delphi - DeviceIoControl - GetLastError: ERROR_NOACCESS - 998

我有一个用 C 编写的内核驱动程序,它需要一个类型为 的文本PCWSTR。什么是相当于发送控制代码的 Delphi 类型?我尝试使用以下代码发送但GetLastError报告ERROR_NOACCESS。如何解决?

编辑

在内核驱动程序“Dispatch”方法上接收文本:

0 投票
0 回答
331 浏览

c# - C#调整BLE扫描窗口大小在Win10上不起作用

我找到了调整 BLE 扫描窗口大小的解决方案:BLE Scan Interval Windows 10

但是,它不起作用。扫描时错过了许多信标。

DeviceControl 返回 false 但最后一个错误代码为 0 并且仍然进行延迟扫描。

有 40033_1、3、6、9、18 个信标,但有些信标在某些时间段内没有被扫描。

广告间隔为 700 毫秒。

我应该检查什么?

0 投票
1 回答
105 浏览

cpu - 内存映射设备如何分配地址以及CPU如何知道它是什么

我认为CPU寻址设备的主要方式是“端口”和“内存”映射。

在这两个中:

  • 设备如何动态分配地址 - 谁分配它以及如何分配?
  • 那么 CPU 如何知道设备的存在、已分配以及地址是什么,尤其是它正在运行的程序?(如果计算机打开和关闭,这如何工作)
  • 中断如何与这些设备一起工作?
  • 操作系统和硬件之间的区别是什么?
  • 可以说内存映射是现代系统中的主要方法吗?

意识到这可能一口气很多,但在此先感谢!

0 投票
1 回答
159 浏览

c# - 在 C# 代码中使用 DeviceIoControl 总是返回空的输出缓冲区

我有一个驱动程序,我想从我的 C# 客户端应用程序中使用它。这里的问题是我的输出缓冲区总是空的(0)。当我从 C 代码中使用这个驱动程序时 - 一切都像魅力一样,所以我认为问题出在我的客户端 C# 代码中。

外部定义如下:

我将其用作:

我不知道为什么,返回的字节数 = 8,虽然它应该是 4。正如我所说的 - 输出缓冲区是空的。司机的代码:

可能这与结构对齐有关,但我不确定(在 C 客户端应用程序中,sizeof 结构为 18 字节,在 C# 中为 32 字节)。

请指教