Получение серийного номера тома NTFS - C#
Формулировка задачи:
Приветствую!
Есть необходимость читать серийный номер тома NTFS.
В классе DriveInfo такого свойства или метода я не нашел.
Стал городить велосипед через WinAPI и GetVolumeInformation, получился вот такой огород:
Результат:
Перевожу в hex получаю: 4С54-026A
Значение в PM: 644C-5433-4C54-026A
Т.е. верно, но получена только половина значения, вопрос как все таки получить всю?!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Runtime.InteropServices;
namespace WinAPI_GetVolumeInformation
{
class Program
{
[DllImport("kernel32.dll")]
public static extern int GetVolumeInformation(string strPathName,
StringBuilder strVolumeNameBuffer,
int lngVolumeNameSize,
out int lngVolumeSerialNumber,
out int lngMaximumComponentLength,
out int lngFileSystemFlags,
StringBuilder strFileSystemNameBuffer,
int lngFileSystemNameSize);
static void Main()
{
const int MAX_SIZE = 256;
//метка диска
StringBuilder volname = new StringBuilder(MAX_SIZE);
//серийный номер диска
int sn;
int maxcomplen;//максимальное кол-во компонент
int sysflags;//системные флаги
StringBuilder sysname = new StringBuilder(MAX_SIZE);//файловая система
GetVolumeInformation(@"D:\", volname, MAX_SIZE, out sn, out maxcomplen, out sysflags, sysname, MAX_SIZE);
Console.WriteLine(volname.ToString());
Console.WriteLine(sn.ToString());
Console.WriteLine(sysname.ToString());
Console.Read();
}
}
}Win7 1280574058 NTFS
Решение задачи: «Получение серийного номера тома NTFS»
textual
Листинг программы
Раздел NTFS в таблице разделов идентифицируется номером 7. Первый сектор раздела - загрузочный.