如何在Windows上使用C读取原始数据并将其写入USB驱动器

用户名

因此,我制定了自己的加密方案,然后想到了一个USB驱动器,可以将原始数据(根本没有文件系统)用作加密方案中的“密钥”。

我需要一种直接在USB中读取和写入数据的方法,但我尝试使用libusb,但无法弄清楚(对我来说太低了)。

我还看到,有一种方法可以使用CreateFileWindows上的函数打开USB驱动器的句柄,但我无法弄清所需的参数,并且ERROR_INVALID_PARAMETER在尝试阅读时遇到了问题。

我知道操作系统会认为驱动器/它的文件系统已损坏(因为它没有一个),但这没关系,我只需要一种存储原始数据的方法即可。

任何帮助表示赞赏,谢谢!

vlad_tepesch

您的方法存在的问题是,Windows总是询问是否应格式化驱动器。并且很可能在某一天或另一天以错误的方式回答问题;)

但是,如果您知道正确的名称,则可以打开Windows内部使用的卷。您可以获得WinObj可以显示所有名称的Sysinternals 对于驱动器,Windows还创建符号链接,例如\\.\C:通过驱动器号访问它们。确保反斜杠在代码中(通常为"\\\\.\\C:"正确转义,并且冒号后没有尾随斜杠。

但我想为您指出CreateFile特别是“备注”部分的文档https://docs.microsoft.com/zh-cn/windows/desktop/api/FileAPI/nf-fileapi-createfilea#remarks):

也许您错过了以下几点之一:

这样的成功呼叫必须满足以下要求:

  • 呼叫者必须具有管理权限。有关更多信息,请参见以特殊特权运行。
  • dwCreationDisposition参数必须具有OPEN_EXISTING标志。
  • 打开卷或软盘时,dwShareMode参数必须具有FILE_SHARE_WRITE标志。

正如Eryksun指出的那样:对于本身报告为可移动的驱动器,不需要管理特权。

打开带有字母“ D”的USB驱动器的示例;

HANDLE h = CreateFile("\\\\.\\D:", (GENERIC_READ | GENERIC_WRITE), FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL);

if (h != INVALID_HANDLE_VALUE) {
  unsigned char buffer[512];
  DWORD readBytes = 0;
  ReadFile(h, buffer, sizeof(buffer), &readBytes, NULL);
  /* .. */
  CloseHandle(h);
}

另请注意,根据https://stackoverflow.com/a/31712818/2331592中引用,读/写的数据块必须按扇区对齐。
为了安全起见,请先确定扇区大小(例如GetDiskFreeSpace

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Windows上使用“错误的文件描述符”将原始数据写入物理磁盘(闪存驱动器)失败-Python

如何在C#中读取USB闪存驱动器的超高速或高速

如何将原始数据写入USB设备

如何在 Android Things 上安装 USB 驱动器?

如何在USB驱动器上安装GRUB

如何在USB闪存驱动器上安装grub?

在Windows 8.1上使用恢复USB驱动器

Ubuntu Server设置:如何在一个驱动器上安装Ubuntu并将其他驱动器用于文件存储?

dd在USB闪存驱动器上写入会导致大量读取

可以在Windows下读取写入USB驱动器的ISO映像吗?

读取/写入 USB 闪存驱动器的奇怪性能差异

在USB驱动器上使用Ubuntu Live后,如何返回Windows?

如何在Ubuntu中使用dd或dd_rescue从USB驱动器备份数据

如何使用Colaboratory(google)从Google驱动器读取数据

如何使用USB驱动器/笔式驱动器?

尽管“快速删除”,Windows仍延迟在小型USB驱动器上写入FAT表

如何在SSD驱动器上丢失数据?

无法在USB驱动器上写入和删除文件

在USB驱动器上,文件被成功写入后会消失

如何在OSX和Windows的外部FAT驱动器上使用相同的存储库?

如何在Windows PC上使用DVR硬盘驱动器

如何在2个驱动器上使用Windows + BitLocker和Ubuntu加密双重引导?

如何在NDK中使用Asset Manager API读取原始数据?

是否可以使用任何操作系统iso并将其安装到Windows上的硬盘驱动器上?

如何在XP上扩展C驱动器的大小

如何在没有USB2.0或DVD驱动器的笔记本电脑上安装Windows 7?

如何在Windows 8.1中扩展C驱动器

如何读取USB硬盘驱动器(NTFS,1TB)上的MFT?

如何格式化未分配的USB驱动器并将其设置为Fat32?