FltGetVolumeGuidName 函数 (fltkernel.h)
FltGetVolumeGuidName 以卷全局唯一标识符(GUID)格式获取给定卷的卷名称。
语法
NTSTATUS FLTAPI FltGetVolumeGuidName(
[in] PFLT_VOLUME Volume,
[in/out, optional] PUNICODE_STRING VolumeGuidName,
[out, optional] PULONG BufferSizeNeeded
);
参数
[in] Volume
卷的不透明指针。 必须是本地文件系统卷。 此参数是必需的,不能 NULL。
[in/out, optional] VolumeGuidName
指向调用方分配的 UNICODE_STRING 结构的指针,该结构在返回STATUS_SUCCESS时接收卷的 GUID 名称。 请注意,VolumeGuidName->Buffer 的池也是调用方分配的。
如果 VolumeGuidNameNULL 且 BufferSizeNeeded 未 NULL,FltGetVolumeGuidName 将请求的卷 GUID 所需的缓冲区大小存储在 BufferSizeNeeded 参数中,并返回STATUS_BUFFER_TOO_SMALL。 请参阅“备注”。
[out, optional] BufferSizeNeeded
指向调用方分配的变量的指针,该变量接收请求的卷 GUID 名称的大小(以字节为单位)。 此参数是可选的,可以 NULL;但是,如果 VolumeGuidNameNULL,则它必须是非NULL,以便 FltGetVolumeGuidName 可以存储请求的卷 GUID 所需的缓冲区大小。
返回值
FltGetVolumeGuidName 返回STATUS_SUCCESS或适当的 NTSTATUS 值,例如以下值之一:
返回代码 | 描述 |
---|---|
STATUS_BUFFER_TOO_SMALL | VolumeGuidName 指向的缓冲区 NULL 或太小,无法容纳卷 GUID。 如果调用方为 BufferSizeNeeded提供非NULL 值,FltGetVolumeGuidName 将所需的缓冲区大小存储在 BufferSizeNeeded中。 这被视为错误代码,因为未检索卷 GUID 名称。 |
STATUS_INSUFFICIENT_RESOURCES | FltGetVolumeGuidName 遇到池分配失败。 这是一个错误代码。 |
STATUS_INVALID_DEVICE_REQUEST | Volume 参数是网络卷的句柄。 这是一个错误代码。 |
STATUS_FLT_VOLUME_NOT_FOUND | 找不到匹配的卷。 这是一个错误代码。 |
言论
返回的卷 GUID 名称采用以下格式表示:
\??\Volume{GUID}
其中,GUID 是标识卷的全局唯一标识符。 此格式与装载管理器使用的格式相同,存储类驱动程序中支持装载管理器请求。
如果 BufferSizeNeeded 未知,请调用 FltGetVolumeGuidName 两次:
- 在第一次调用中,将 volumeGuidName 设置为 NULL,并将 bufferSizeNeeded 设置为非NULL。 FltGetVolumeGuidName 将存储 BufferSizeNeeded 中卷名称 GUID 所需的字节数,并返回STATUS_BUFFER_TOO_SMALL。
- 在第二次调用中,VolumeGuidName 设置为指向 BufferSizeNeeded 值在首次调用中返回的结构。
FltGetVolumeGuidName 无法安全地从预装载或装载后回调调用。 无法安全地调用它,因为即使调用了装载后回调,I/O 管理器也尚未完成装载处理,这在某些情况下会导致装载管理器出现死锁。
在 Windows Vista 及更高版本中,微型筛选器驱动程序可以从其 InstanceSetupCallback 例程(PFLT_INSTANCE_SETUP_CALLBACK)安全地调用 FltGetVolumeGuidName,因为在完成所有装载处理后,将在新卷的第一个 I/O 操作上调用回调。
在早于 Windows Vista 的 Windows 操作系统上,无法安全地从 InstanceSetupCallback 例程调用 FltGetVolumeGuidName,因为装载管理器在持有锁时可能会发出文件 I/O 操作,这可能会导致死锁。
请务必注意,卷 GUID 与卷对象 ID 不同。 卷 GUID(或 唯一卷名称)是独立于文件系统的值;它由装载管理器分配给基础存储卷。 卷对象 ID 由文件系统分配给文件系统卷。
若要获取卷的卷对象 ID,请调用 ZwQueryVolumeInformationFile,为 FsInformationClass 参数指定 FileFsObjectIdInformation。
FltGetVolumeGuidName 大致等效于 Win32 GetVolumeNameForVolumeMountPoint 函数。 (Microsoft Windows SDK 中记录了 GetVolumeNameForVolumeMountPoint。
要求
要求 | 价值 |
---|---|
目标平台 | 普遍 |
标头 | fltkernel.h (包括 Fltkernel.h) |
库 | FltMgr.lib |
DLL | Fltmgr.sys |
IRQL | PASSIVE_LEVEL |