草庐IT

DeviceIoControl

全部标签

c++ - 使用 IOCTL_CHANGER_GET_PRODUCT_DATA 调用 DeviceIoControl 时出现 ERROR_ACCESS_DENIED

我的任务是获取安装为磁盘的设备的VendorId和ProductId。代码看起来像这样:intmain(){HANDLEhDevice;charcDisk='c';//GetmetadataabouttheC:\disk//Buildthelogicaldrivepathandgetthedrivedevicehandlestd::wstringlogicalDrive=L"\\\\.\\";wchar_tdrive[3];drive[0]=cDisk;drive[1]=L':';drive[2]=L'\0';logicalDrive.append(drive);hDevice=Cre

c++ - KMDF 的多线程 DeviceIOControl

在回答我的问题之前,我将回顾一下我目前正在使用的东西,以便您对我已经做过/尝试过的事情有一个很好的了解。我有一个多线程用户模式​​Windows桌面应用程序,它向KMDF驱动程序发出DeviceIOControl调用(纯软件,无硬件)。有5个单独的线程,它们都不断地对驱动程序进行相同的自定义IOCTL调用。此请求包括:PsLookupProcessByProcessId以获取要从中读取内存的进程。MmCopyVirtualMemory将请求的内存复制到提供的缓冲区中。ObDereferenceObject减少引用计数。驱动程序目前正在连续执行此操作,而我的用户模式应用程序中的主要瓶颈是

c++ - 获取文件的完整路径给定其 "Reference Number"

我想使用Windows的更改日志来跟踪一些文件更改。我设法使用示例代码访问上述日志并从中读取记录。我现在面临的问题是记录只包含相关的文件名,而不是它的绝对路径。我尝试将FSCTL_GET_NTFS_FILE_RECORD与DeviceIoControl一起使用来检查我是否可以通过这种方式获得绝对路径,但是调用DeviceIoControl总是返回相同的文件记录,缓冲区中有“FILE0”,我给它的引用号没有它的HighPart(例如,我给出了0x001400000015adec的引用编号,当函数返回时,输出的引用编号为0x000000000015adec。这是我的代码(我在Windows

c++ - DeviceIoControl 返回意外的物理扇区大小

我使用DeviceIoControl返回物理磁盘扇区的大小。它总是返回512个字节,直到最近它开始返回4096个字节。检查生成的STORAGE_ACCESS_ALIGNMENT_DESCRIPTOR我发现逻辑和物理字节大小已经调换了位置-磁盘扇区的逻辑字节大小不应该总是大于或等于物理扇区大小吗?#include#include#include#pragmacomment(lib,"Kernel32.lib")intmain(){HANDLEhDevice;charcDisk='c';//GetmetadataabouttheC:\disk//Buildthelogicaldrivepa

windows - 如何在 Windows 中使用 DeviceIoControl() 读取单个扇区/集群?

当Windows准备休眠时,我的笔记本电脑掉了下来,结果硬盘驱动器发生了磁头碰撞。(教我下次买一个带有自由落体传感器的硬盘驱动器和/或笔记本电脑。)无论如何,运行SpinRite试图恢复数据导致磁盘上的所有备用扇区都用完了所有到目前为止的可恢复扇区。SpinRite现在仍在运行,但由于不再有可用的备用扇区,我认为除了告诉我所有坏扇区在哪里之外,这将是徒劳的。无论如何,我打算编写一个应用程序来尝试从硬盘驱动器中抢救数据。从我过去对碎片整理的尝试中,我知道我可以使用FSCTL_GET_RETRIEVAL_POINTERS来计算任何给定文件的逻辑簇号。我如何着手尝试读取该实际集群的扇区?我在

windows - 如何在 C/C++ 中以编程方式在外部 USB HD 上启用 "Better Performance"

如何在C/C++中以编程方式在外部USBHD上启用“更好的性能”。具体来说,我指的是MicrosoftWindows控制面板中的设备属性面板。这启用了一种操作系统级别的写入缓存。 最佳答案 您需要发送IOCTL_DISK_SET_CACHE_INFORMATIONControlCodeusingDeviceIoControl.我建议您使用Dskcache.exetool配置“电源保护”写缓存选项。在W2KSP3中,除了“写入缓存”选项之外,MS还引入了“电源保护”写入缓存选项。基本上,要让FS驱动程序发出Flush/Write-Th

c++ - 文件系统信息——如何查询?

有没有办法通过某种类型的WindowsAPI访问文件系统信息?如果不是,用户模式开发人员可以使用哪些其他方法? 最佳答案 不是很干净,但你可以使用DeviceIoControl()将卷作为文件打开,将生成的句柄与控制代码一起传递给DeviceIoControl()。检查MSDN的控制代码,有类似“读取日志记录”的东西。 关于c++-文件系统信息——如何查询?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.c

c# - Pinvoke DeviceIoControl 参数

我正在使用DeviceIoControl开发C#项目.我咨询过相关Pinvoke.netpage我的签名:[DllImport("Kernel32.dll",SetLastError=false,CharSet=CharSet.Auto)]publicstaticexternboolDeviceIoControl(SafeFileHandlehDevice,EIOControlCodeIoControlCode,[MarshalAs(UnmanagedType.AsAny)][In]objectInBuffer,uintnInBufferSize,[MarshalAs(Unmanage

c++ - 使用 DeviceIoControl 函数读取 MBR 时出现问题

我在调用DeviceIoControl函数读取可移动设备的MBR时出错。错误代码为5。这意味着访问被拒绝!我使用的是windowsxpsp2。#include"stdafx.h"#include#include#includeBOOLGetMBR(PARTITION_INFORMATION*pdg){HANDLEhDevice;//handletothedrivetobeexaminedBOOLbResult;//resultsflagDWORDjunk;//discardresultshDevice=CreateFile(TEXT("\\\\.\\G:"),//drivetoopen

c++ - 如何获取全局 Windows I/O 统计信息?

有一个WinAPI函数GetProcessIoCounters它提供给定进程的所有I/O操作的详细信息:自进程启动以来读/写操作的数量和读/写的字节数。任务管理器很可能使用此功能来显示这些数字:是否有一种相对简单的方法来获取相同或相似的统计数据,但对于自启动以来的整个系统?请注意,这与枚举所有当前进程并汇总GetProcessIoCounters的结果不同,因为存在启动、运行一段时间和结束的进程。当我调用GetProcessIoCounters时,这样的进程不再存在,但我想知道系统的整体I/O。我打算每隔一小时左右收集一次这些统计数据,并将它们记录到数据库中以供将来分析和帮助调试。我正
12