问题标签 [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# - 带有 FSCTL_SET_ZERO_DATA 的 DeviceIoControl 返回 ERROR_INVALID_PARAMETER
我正在尝试在 C# 中使用控制代码 DeviceIoControl
。FSCTL_SET_ZERO_DATA
我创建了文件C:\tmp\test.txt
并在其中放置了文本“aaaa”。
我运行代码并收到错误号:87
根据MSDN:“参数不正确。”
我认为问题是因为我发送的输入缓冲区(参数号 3 in DeviceIoControl
)没有任何数据。
DeviceIoControl
回报false
。_
如何插入有效参数,DeviceIoControl
使其FSCTL_SET_ZERO_DATA
返回true
?
python - 使用 DeviceIoControl 时出现错误 87(FSCTL_GET_RETRIEVAL_POINTERS)
我正在尝试获取磁盘上文件的物理位置。这是当前代码:
当我尝试运行代码时,出现此错误:
此错误是“无效参数”。我用错了什么参数?
c++ - 带 DWORD 的 DeviceIoControl
我的操作系统是Win7 64位。我试图通过 DeviceIoControl 将变量的值,而不是它的地址(进程 ID,DWORD)传递给我的驱动程序。试了好几次,都是蓝屏或者998的错误码。
在用户模式方面,我确保 hDevice 有效,CTL_CODE 如下所示:
然后我这样做:
在内核模式(DriverEntry)上:
和我的 IOCTL 函数:
如果有人能告诉我要改变什么,请告诉我:)
c++ - DeviceIoControl 内核到用户模式与 HANDLE c++
我在 Windows 7 x64 上有一个驱动程序,工作正常,但我不知道如何将句柄从驱动程序推送到我的用户模式应用程序。
这是我的内核模式代码:
现在是用户模式部分:
hTest 总是不同的,但永远不会正确。DeviceIoControl 成功,hDevice 有效。
有人能告诉我我错过了什么吗?:)
c++ - DeviceIoControl GetLastError 87 (ERROR_INVALID_PARAMETER)
此代码在 Windows 7 上启动时非常好:
但是在 Windows 10 上运行它时出现错误 87 ( ERROR_INVALID_PARAMETER )。可能是什么原因?
winapi - Windows Storage Management API - VDS(虚拟磁盘服务)卸载磁盘等效方法
由于 VDS 已被弃用并且 Windows 存储管理 API 正在取代它 - 是否有任何 WMI、IOCTL、DeviceIoControl 或 Windows 存储管理 API 方法等效于 VDS 方法“UninstallDisks”?
我找不到任何其他方法来做 VDS 方法“UninstallDisks”所做的事情。
任何帮助,将不胜感激。
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 上运行它,我会遇到同样的问题。
编辑:
代码本身:
winapi - 如何从 NTFS 更改日志中获取已删除文件的完整路径?
我正在阅读 NTFS 更改日志以监视驱动器上的任何文件更改,但返回的 USN_RECORD 仅包括关联文件的文件名,而不包括完整路径。
为了获得完整路径,我使用带有 OpenFileById API 的 FileReferenceNumber(也在 USN_RECORD 中)来获取关联文件的句柄,然后使用 GetFinalPathNameByHandleA 来获取完整路径。
只要该文件仍然存在,这很好用,但是如果文件已被删除(例如,如果我正在处理 USN_RECORD 以删除文件),那么显然 OpenFileById 失败,因此我无法获得完整路径。
虽然 USN_RECORD 确实包含一个 ParentFileReferenceNumber 成员(我大概可以使用 OpenFileById 打开),它应该允许我获取父目录的名称,但同样的问题存在,即如果父目录已被删除怎么办?
此外,即使父目录没有被删除,我如何向上走到下一个目录(即父目录的父目录)等等,直到我到达卷根?
这是我的示例代码:
示例输出:
c++ - 一个驱动器作为重解析点
考虑以下我在 Win 10 Fall Creators Update Version 10.0.16299 Build 16299 上试验的独立源代码
这是我用来解析一个驱动器的目标的代码,该驱动器被视为IO_REPARSE_TAG_CLOUD_7
按GetFileAttributesExW
功能处理。
我知道它_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)的一般经验法则是什么?作为文件还是目录?
windows - 当我尝试通过 DeviceIoControl 获取物理扇区大小时,我收到拒绝访问
从我的网络服务器应用程序中,我需要检查应用程序所在硬盘的物理扇区大小。为此,我使用DeviceIoControl
withIOCTL_STORAGE_QUERY_PROPERTY
来查询StorageAccessAlignmentProperty
。问题是当我尝试从网络服务器运行这些命令时,我得到“访问被拒绝”错误。
如何从网络服务器应用程序检索 inetpub 所在硬盘的物理扇区大小?
我从https://msdn.microsoft.com/windows/compatibility/advanced-format-disk-compatibility-update了解到,微软在 Windows 8 中引入了一个新的 API,可以从非特权应用程序调用。FileFsSectorSizeInformation
API 是具有关联结构的新信息类的形式FILE_FS_SECTOR_SIZE_INFORMATION
,但我不知道如何使其与 Delphi 一起使用
这是我不起作用的实际代码(用 Delphi 编写):