Доброго времени суток. Я использую WinApi.GetVolumeInformation:

## Код:
```
PROCEDURE Start*;
CONST
   nVolumeNameSize = 256;
   nFileSystemNameSize = 256;
TYPE
   Str = ARRAY 100 OF SHORTCHAR;
VAR
   b: WinApi.BOOL;
   volumeNameBuffer, lpFileSystemNameBuffer: WinApi.PtrSTR;
   str: Str;
   lpVolumeSerialNumber, lpMaximumComponentLength, i, contentLock, contentSize, size: INTEGER;
   lpFileSystemFlags: SET;
BEGIN   
   b := WinApi.GetVolumeInformation ("F:\", volumeNameBuffer, SIZE (SHORTCHAR) * nVolumeNameSize, lpVolumeSerialNumber, lpMaximumComponentLength, lpFileSystemFlags, lpFileSystemNameBuffer, nFileSystemNameSize);
   IF b # 0 THEN   
      IF volumeNameBuffer # NIL THEN
         StdLog.String ("Имя буфера: ");
         FOR i := 0 TO nVolumeNameSize - 1 DO
            StdLog.Char (volumeNameBuffer[i]);
         END;
         StdLog.Ln;
      END;
      IF lpFileSystemNameBuffer # NIL THEN
         StdLog.String ("Имя файловой системы: ");
         FOR i := 0 TO nFileSystemNameSize - 1 DO
            StdLog.Char (volumeNameBuffer[i]);
         END;
         StdLog.Ln;
      END;
      StdLog.Ln;
      
      StdLog.String ("Серийный номер:"); StdLog.Int (lpVolumeSerialNumber); StdLog.Ln;
      StdLog.String ("Максимальная длина файла:"); StdLog.Int (lpMaximumComponentLength); StdLog.Ln;
      StdLog.String ("Опции файловой системы: "); StdLog.Set (lpFileSystemFlags); StdLog.Ln;
   ELSE
      StdLog.String ("Ошибка"); StdLog.Ln
   END
END Start;

END Knysh_keeperDiskSerialNumber.
```


Но переменные volumeNameBuffer и lpFileSystemNameBuffer имеют значение NIL. Хорошо, пробую так:

## Код:
```
p, p2: WinApi.PtrVoid;
BEGIN
   p := WinApi.HeapAlloc (WinApi.GetProcessHeap(), {}, SIZE (SHORTCHAR) * nVolumeNameSize);
   SYSTEM.PUT (SYSTEM.ADR (volumeNameBuffer), p);
   p2 := WinApi.HeapAlloc (WinApi.GetProcessHeap(), {}, SIZE (SHORTCHAR) * nFileSystemNameSize);
   SYSTEM.PUT (SYSTEM.ADR (lpFileSystemNameBuffer), p2);[/b]
   
   b := WinApi.GetVolumeInformation ("F:\", volumeNameBuffer, SIZE (SHORTCHAR) * nVolumeNameSize, lpVolumeSerialNumber, lpMaximumComponentLength, lpFileSystemFlags, lpFileSystemNameBuffer, nFileSystemNameSize);
```


Теперь эти переменные выдают какой-то мусор. Что я делаю не так? Может в новых версиях BB есть какой-то более корректный способ работы с дисками, например посредством модуля Files?