gpt4 book ai didi

c - 如何在 Windows 上使用 C 将原始数据读写到 USB 驱动器

转载 作者:可可西里 更新时间:2023-11-01 11:23:07 36 4
gpt4 key购买 nike

所以我制定了自己的加密方案,并想出了一个想法,我可以拥有一个带有原始数据(根本没有文件系统)的 USB 驱动器,我可以将其用作我的加密方案中的“ key ”。

我需要一种直接将数据读取和写入 USB 的方法,我试过使用 libusb但我想不通(对我来说太低级了)。

我还看到有一种方法可以在 Windows 上使用 CreateFile 函数打开 USB 驱动器的句柄,但我无法弄清楚所需的参数,我得到了 ERROR_INVALID_PARAMETER 尝试读取时。

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

感谢任何帮助,谢谢!

最佳答案

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

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

但我想向您指出 CreateFile 的文档,尤其是备注部分 ( https://learn.microsoft.com/en-us/windows/desktop/api/FileAPI/nf-fileapi-createfilea#remarks ):

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

The following requirements must be met for such a call to succeed:

  • The caller must have administrative privileges. For more information, see Running with Special Privileges.
  • The dwCreationDisposition parameter must have the OPEN_EXISTING flag.
  • When opening a volume or floppy disk, the dwShareMode parameter must have the FILE_SHARE_WRITE flag.

正如 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 中的引用读/写数据 block 必须扇区对齐。
所以为了安全起见,首先确定扇区大小(例如使用 GetDiskFreeSpace)

关于c - 如何在 Windows 上使用 C 将原始数据读写到 USB 驱动器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56544306/

36 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com