问题标签 [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.
c# - DeviceIoControl 返回 1306 和 IOCTL_SCSI_PASS_THROUGH
我正在尝试在 C# 中将 DeviceIoControl 与 IOCTL_SCSI_PASS_THROUGH 控制代码一起使用。但 DeviceIoControl 返回错误代码 1306。
我想做的是获得INTEL NVMe SSD的SMART。
我试过参考Crystal Disk Info的源代码。
它在 C 或 C++ 中成功运行。
以下源代码的问题在哪里?
c# - 无法获取 OneDrive 文件夹的重新分析点信息
我正在使用下面的代码在我的应用程序中检索重解析点信息。这适用于符号链接和交汇点,但对于 OneDrive 文件夹及其所有子项而言,“不是重新分析点”失败。
本机声明:
以下命令可以成功检索 OneDrive 文件夹的重解析点信息。
fsutil 重解析点查询 C:\Users\UserName\OneDrive
确定如何使此代码正常工作会很棒。非常令人沮丧的是,确认为具有重新分析点的文件夹会收到一条错误消息,但它们不是。
我也在 C++ 中尝试过这个,但得到了同样的错误。
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 命令。
我试图找到一些应该如何做到这一点的例子,但我找不到合适的例子。有人可以帮助如何做到这一点吗?或者一个示例来源会有所帮助。
c# - DeviceIoControl 控制代码
我在 c# 中使用 deviceIoControl 函数,我需要一个控制代码来定义会发生什么。我正在寻找它们的值,但我只能找到它们的名称,例如 FSCTL_FILESYSTEM_GET_STATISTICS。
如何知道 decixeIoControl 函数的代码值?
谢谢!
c# - 无法将 C# 字符串从用户态传递到内核模式 C 并使用它来查找特定的 LDR_DATA_TABLE_ENTRY
我很难将从用户模式类型 LPWSTR 传递的字符串与 LDR 表条目类型 UNICODE_STRING 进行比较
内核 C:
该结构通过 deviceiocontrol 传递给内核。对应的用户态结构如下:
其中字符串ModuleName
被编组为 LPWStr。
ModuleName
是进程中已加载模块的所需搜索词。现在,这就是事情变得棘手的地方。我可以通过 访问的字符串_LDR_DATA_TABLE_ENTRY
是UNICODE_STRING
. 我想将此 UNICODE_STRING 与我的 LPWSTR 进行比较。
我尝试了以下方法,但没有奏效:
我也尝试过 wcscmp 和其他一些东西。我不确定如何正确比较这两者。我在函数中添加了一些次要的伪代码,以提供关于我想要做什么的额外上下文。
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 不便......
delphi - DeviceIoControl - GetLastError: ERROR_NOACCESS - 998
我有一个用 C 编写的内核驱动程序,它需要一个类型为 的文本PCWSTR
。什么是相当于发送控制代码的 Delphi 类型?我尝试使用以下代码发送但GetLastError
报告ERROR_NOACCESS
。如何解决?
编辑
在内核驱动程序“Dispatch”方法上接收文本:
c# - C#调整BLE扫描窗口大小在Win10上不起作用
我找到了调整 BLE 扫描窗口大小的解决方案:BLE Scan Interval Windows 10
但是,它不起作用。扫描时错过了许多信标。
DeviceControl 返回 false 但最后一个错误代码为 0 并且仍然进行延迟扫描。
有 40033_1、3、6、9、18 个信标,但有些信标在某些时间段内没有被扫描。
广告间隔为 700 毫秒。
我应该检查什么?
cpu - 内存映射设备如何分配地址以及CPU如何知道它是什么
我认为CPU寻址设备的主要方式是“端口”和“内存”映射。
在这两个中:
- 设备如何动态分配地址 - 谁分配它以及如何分配?
- 那么 CPU 如何知道设备的存在、已分配以及地址是什么,尤其是它正在运行的程序?(如果计算机打开和关闭,这如何工作)
- 中断如何与这些设备一起工作?
- 操作系统和硬件之间的区别是什么?
- 可以说内存映射是现代系统中的主要方法吗?
意识到这可能一口气很多,但在此先感谢!
c# - 在 C# 代码中使用 DeviceIoControl 总是返回空的输出缓冲区
我有一个驱动程序,我想从我的 C# 客户端应用程序中使用它。这里的问题是我的输出缓冲区总是空的(0)。当我从 C 代码中使用这个驱动程序时 - 一切都像魅力一样,所以我认为问题出在我的客户端 C# 代码中。
外部定义如下:
我将其用作:
我不知道为什么,返回的字节数 = 8,虽然它应该是 4。正如我所说的 - 输出缓冲区是空的。司机的代码:
和
可能这与结构对齐有关,但我不确定(在 C 客户端应用程序中,sizeof 结构为 18 字节,在 C# 中为 32 字节)。
请指教