正在从驱动器号获取NTFS卷GUID
Getting NTFS volume GUID from drive letter
我以为我能做到,但显然没有。我发现,使用mountvol.exe命令,我的C:\驱动器的装入点是:
\?Volume{f993747a-5d7a-4de1-a97a-c20c1af1ba02}
这个卷ID与这个代码给我的输出相矛盾:
#include "stdafx.h"
#include <stdio.h>
#include <tchar.h>
#include <ole2.h>
int _tmain(int argc, _TCHAR* argv[])
{
HANDLE h = CreateFile(L"C:", 0,
FILE_SHARE_READ, NULL,
OPEN_EXISTING, FILE_FLAG_BACKUP_SEMANTICS, NULL);
FILE_OBJECTID_BUFFER buf;
DWORD cbOut;
DeviceIoControl(h, FSCTL_CREATE_OR_GET_OBJECT_ID, NULL, 0, &buf, sizeof(buf), &cbOut, NULL);
GUID guid;
CopyMemory(&guid, &buf.ObjectId, sizeof(GUID));
WCHAR szGuid[39];
StringFromGUID2(guid, szGuid, 39);
_tprintf(_T("GUID is %wsn"), szGuid);
CloseHandle(h);
getchar();
}
这与我在网上找到的一些代码类似。它正在打印"GUID为{5FC6F114-D10D-11E4-878-E8B1FC697FA2}",这似乎不正确。
有什么想法吗?
在您的例子中,FSCTL_CREATE_OR_GET_OBJECT_ID
返回C:安装点的根目录的对象ID,而不是您想要的。
获取卷GUID路径的正确方法是通过GetVolumeNameForVolumeMountPoint()函数。
MSDN中打印驱动器c-z的卷GUID路径的示例代码:
#include <windows.h>
#include <stdio.h>
#include <tchar.h>
#define BUFSIZE MAX_PATH
void main(void)
{
BOOL bFlag;
TCHAR Buf[BUFSIZE]; // temporary buffer for volume name
TCHAR Drive[] = TEXT("c:\"); // template drive specifier
TCHAR I; // generic loop counter
// Walk through legal drive letters, skipping floppies.
for (I = TEXT('c'); I < TEXT('z'); I++ )
{
// Stamp the drive for the appropriate letter.
Drive[0] = I;
bFlag = GetVolumeNameForVolumeMountPoint(
Drive, // input volume mount point or directory
Buf, // output volume name buffer
BUFSIZE ); // size of volume name buffer
if (bFlag)
{
_tprintf (TEXT("The ID of drive "%s" is "%s"n"), Drive, Buf);
}
}
}
相关文章:
- 以非特权用户身份查询 NTFS 特殊文件的元数据?
- 从 GUID 获取 USB 卷路径
- ActiveDirectory/C++: 如何将 Guid 转换为用户名?
- 更改用于部署的凭据提供程序 GUID 的过程
- 如何在 std::p air 中使用 System::Guid 和自定义枚举?
- 将字符串强制转换为GUID并不能得到正确的结果
- 如何获得GUID编码器,如果我在IMFTransform上有一个指针?
- GUID variable for JPEG,BMP,PNG
- 如何在 C++ 中从 GUID 生成 SHA-1 字节数组
- 如何将Windows GUID转换为boost::uuid?
- C++ - 将文本追加到仅具有 NTFS"追加数据"权限的文件
- 如何从NTFS中的$ MFT文件访问文件的每个块的文件指针
- 在 C++ 中填写 GUID 时出错
- C++ 通过 RegGetValue 读取机器 GUID
- 如何在 C++ 中将文件从 ext4 文件系统重命名为 ntfs 文件系统
- 枚举所有分区并测试它们是否为 NTFS
- 如何在目录上迭代并识别或省略NTFS连接(符号链接ish)
- 从多个进程和同一进程中注册同一ETW TraceLogging提供程序GUID
- 这是生成GUID的可靠方式
- 正在从驱动器号获取NTFS卷GUID