问题标签 [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 投票
1 回答
540 浏览

c# - 带有 FSCTL_SET_ZERO_DATA 的 DeviceIoControl 返回 ERROR_INVALID_PARAMETER

我正在尝试在 C# 中使用控制代码 DeviceIoControlFSCTL_SET_ZERO_DATA

我创建了文件C:\tmp\test.txt并在其中放置了文本“aaaa”。

我运行代码并收到错误号:87
根据MSDN:“参数不正确。”

在此处输入图像描述

我认为问题是因为我发送的输入缓冲区(参数号 3 in DeviceIoControl)没有任何数据。

DeviceIoControl回报false。_
如何插入有效参数,DeviceIoControl使其FSCTL_SET_ZERO_DATA返回true

0 投票
1 回答
831 浏览

python - 使用 DeviceIoControl 时出现错误 87(FSCTL_GET_RETRIEVAL_POINTERS)

我正在尝试获取磁盘上文件的物理位置。这是当前代码:

当我尝试运行代码时,出现此错误:

此错误是“无效参数”。我用错了什么参数?

0 投票
1 回答
437 浏览

c++ - 带 DWORD 的 DeviceIoControl

我的操作系统是Win7 64位。我试图通过 DeviceIoControl 将变量的值,而不是它的地址(进程 ID,DWORD)传递给我的驱动程序。试了好几次,都是蓝屏或者998的错误码。

在用户模式方面,我确保 hDevice 有效,CTL_CODE 如下所示:

然后我这样做:

在内核模式(DriverEntry)上:

和我的 IOCTL 函数:

如果有人能告诉我要改变什么,请告诉我:)

0 投票
0 回答
165 浏览

c++ - DeviceIoControl 内核到用户模式与 HANDLE c++

我在 Windows 7 x64 上有一个驱动程序,工作正常,但我不知道如何将句柄从驱动程序推送到我的用户模式应用程序。

这是我的内核模式代码:

现在是用户模式部分:

hTest 总是不同的,但永远不会正确。DeviceIoControl 成功,hDevice 有效。

有人能告诉我我错过了什么吗?:)

0 投票
1 回答
3797 浏览

c++ - DeviceIoControl GetLastError 87 (ERROR_INVALID_PARAMETER)

此代码在 Windows 7 上启动时非常好:

但是在 Windows 10 上运行它时出现错误 87 ( ERROR_INVALID_PARAMETER )。可能是什么原因?

0 投票
1 回答
386 浏览

winapi - Windows Storage Management API - VDS(虚拟磁盘服务)卸载磁盘等效方法

由于 VDS 已被弃用并且 Windows 存储管理 API 正在取代它 - 是否有任何 WMI、IOCTL、DeviceIoControl 或 Windows 存储管理 API 方法等效于 VDS 方法“UninstallDisks”?

我找不到任何其他方法来做 VDS 方法“UninstallDisks”所做的事情。

任何帮助,将不胜感激。

0 投票
3 回答
1900 浏览

winapi - 在 Windows 10 上浏览 NTFS 更改日志

我正在尝试阅读 NTFS 更改日志,但我注意到我能找到的所有示例代码在 Windows 10 上都失败了,即使它适用于 Windows 7。

例如,Microsoft 自己的示例“Walking a Buffer of Change Journal Records”在 Windows 7 上工作,但是当我在 Windows 10 上运行相同的代码时,当我使用 FSCTL_READ_USN_JOURNAL 调用 DeviceIoControl 时出现错误 87(参数不正确)(请注意,之前的调用使用 FSCTL_QUERY_USN_JOURNAL 到 DeviceIoControl 成功完成并返回有效数据。)。

我什至已经将在 Windows 7 上编译和工作的 EXE 复制到 Windows 10 机器上,但它仍然失败,所以我相信 Windows 10 可能对参数验证或类似的东西更严格?

我以管理员身份运行代码,所以这不是问题。

我找不到任何其他对此问题的引用,但如果我采用其他人的示例代码并尝试在 Windows 10 上运行它,我会遇到同样的问题。

编辑:

代码本身:

0 投票
0 回答
659 浏览

winapi - 如何从 NTFS 更改日志中获取已删除文件的完整路径?

我正在阅读 NTFS 更改日志以监视驱动器上的任何文件更改,但返回的 USN_RECORD 仅包括关联文件的文件名,而不包括完整路径。

为了获得完整路径,我使用带有 OpenFileById API 的 FileReferenceNumber(也在 USN_RECORD 中)来获取关联文件的句柄,然后使用 GetFinalPathNameByHandleA 来获取完整路径。

只要该文件仍然存在,这很好用,但是如果文件已被删除(例如,如果我正在处理 USN_RECORD 以删除文件),那么显然 OpenFileById 失败,因此我无法获得完整路径。

虽然 USN_RECORD 确实包含一个 ParentFileReferenceNumber 成员(我大概可以使用 OpenFileById 打开),它应该允许我获取父目录的名称,但同样的问题存在,即如果父目录已被删除怎么办?

此外,即使父目录没有被删除,我如何向上走到下一个目录(即父目录的父目录)等等,直到我到达卷根?

这是我的示例代码:

示例输出:

0 投票
0 回答
731 浏览

c++ - 一个驱动器作为重解析点

考虑以下我在 Win 10 Fall Creators Update Version 10.0.16299 Build 16299 上试验的独立源代码

这是我用来解析一个驱动器的目标的代码,该驱动器被视为IO_REPARSE_TAG_CLOUD_7GetFileAttributesExW功能处理。

我知道它_REPARSE_DATA_STRUCTURE的信息仅适用于SymbolicLinkReparseBuffer并且MountPointReparseBuffer它没有任何与重解析点相关的字段,例如 One Drive。

我检查了 Windows 驱动程序套件的(用于秋季创建者更新)ntifs.h文件,以查看结构是否已更新以支持 One Drive。然而,情况似乎并非如此。

我还尝试从第一个 if 块SymbolicLinkReparseBuffer中获取 One Drive 目标信息。MountPointReparseBuffer然而,它最终给了我垃圾。

问题:

1) 如何正确确定 REPARSE_POINTS 的目标,例如 One Drive?

2) Windows 10 Fall Creators Update SDK 添加了更多这样的 REPARSE_POINT 标签。如果一个人不能解决它的目标(例如一个驱动器),那么对待它们(即源 REPARSE_POINTS)的一般经验法则是什么?作为文件还是目录?

0 投票
2 回答
1134 浏览

windows - 当我尝试通过 DeviceIoControl 获取物理扇区大小时,我收到拒绝访问

从我的网络服务器应用程序中,我需要检查应用程序所在硬盘的物理扇区大小。为此,我使用DeviceIoControlwithIOCTL_STORAGE_QUERY_PROPERTY来查询StorageAccessAlignmentProperty。问题是当我尝试从网络服务器运行这些命令时,我得到“访问被拒绝”错误。

如何从网络服务器应用程序检索 inetpub 所在硬盘的物理扇区大小?

我从https://msdn.microsoft.com/windows/compatibility/advanced-format-disk-compatibility-update了解到,微软在 Windows 8 中引入了一个新的 API,可以从非特权应用程序调用。FileFsSectorSizeInformationAPI 是具有关联结构的新信息类的形式FILE_FS_SECTOR_SIZE_INFORMATION,但我不知道如何使其与 Delphi 一起使用

这是我不起作用的实际代码(用 Delphi 编写):