gpt4 book ai didi

delphi - 如何使用CreateFile访问物理磁盘?

转载 作者:行者123 更新时间:2023-12-03 15:24:16 25 4
gpt4 key购买 nike

我在Lazarus编程论坛上问过how to open a physical disk 。我想允许用户在单击“选择磁盘”按钮时从系统中选择物理磁盘。 Stack Overflow 上有一些类似但不完全相同的示例(例如 Delphi - Using DeviceIoControl passing IOCTL_DISK_GET_LENGTH_INFO to get flash media physical size (Not Partition) )。

有很多使用 CreateFile 的 C 和 C++ 示例( in the documentation 尤其是 an example of calling DeviceIoControl ),但我找不到 Free Pascal 或 Delphi 的任何示例,而且我还不够好弄清楚如何去做。

任何人都可以向我指出解释它的链接的方向,或者更好的是用 Delphi 或 Free Pascal 编写的实际示例吗?谁能帮我了解如何使用它?

最佳答案

您的 C 示例包含以下代码:

/* LPWSTR wszPath */

hDevice = CreateFileW(wszPath, // drive to open
0, // no access to the drive
FILE_SHARE_READ | // share mode
FILE_SHARE_WRITE,
NULL, // default security attributes
OPEN_EXISTING, // disposition
0, // file attributes
NULL); // do not copy file attributes

将该函数调用转换为 Delphi 只需更改语法即可:

// wszPath: PWideChar

hDevice := CreateFileW(wszPath,
0,
FILE_SHARE_READ or
FILE_SHARE_WRITE,
nil,
OPEN_EXISTING,
0,
0);

即,使用 := 进行赋值,使用 or 组合位标志,使用 nil 进行空指针,使用 0 用于空文件句柄。

该函数的调用方式如下:

#define wszDrive L"\\\\.\\PhysicalDrive0"

DISK_GEOMETRY pdg = { 0 }; // disk drive geometry structure

bResult = GetDriveGeometry (wszDrive, &pdg);

同样,只需将语法更改为 Delphi:

const wszDrive = '\\.\PhysicalDrive0';

var pdg: DISK_GEOMETRY;

ZeroMemory(@pdg, SizeOf(pdg));
bResult := GetDriveGeometry(wszDrive, @pdg);

Delphi 非类型化字符串常量会自动成为它们在上下文中需要的任何类型,因此我们不需要像 C 使用的任何 L 前缀。反斜杠在 Delphi 中并不特殊,因此不需要转义它们。 Delphi 不允许在声明中初始化局部变量,因此我们使用 ZeroMemory 将所有内容设置为零。使用 @ 而不是 & 来获取指向变量的指针。

关于delphi - 如何使用CreateFile访问物理磁盘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8506767/

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