Clustergröße eines Laufwerks herausfinden

using System.Runtime.InteropServices;

// per PInvoke aus der kernel32.dll die Funktion GetDiskFreeSpace() importieren
[DllImport("kernel32.dll", SetLastError = true, CharSet = CharSet.Auto)]
static extern bool GetDiskFreeSpace(
    string sRootPathName,
    ref uint uiSectorsPerCluster,
    ref uint uiBytesPerSector,
    ref uint uiNumberOfFreeClusters,
    ref uint uiTotalNumberOfClusters);

// Hilfsfunktion zum Ermitteln der Clustergröße
// theoretisch kann damit auch die Anzahl der freien Bytes
// eines LW berechnet werden (uiNumberOfFreeClusters * uiSectorsPerCluster * uiBytesPerSector)
// Problem ist hier, dass dies nur für Volumengrößen bis 2GB funktioniert
// alternativ sollte dazu dann System.IO.DriveInfo verwendet werden :)
public uint ClusterSizeInBytes(string sRootPath)
{
    uint uiRetVal = 0;

    uint uiSectorsPerCluster = 0;
    uint uiBytesPerSector = 0;
    uint uiNumberOfFreeClusters = 0;
    uint uiTotalNumberOfClusters = 0;

    if (GetDiskFreeSpace(sRootPath, ref uiSectorsPerCluster, ref uiBytesPerSector, ref uiNumberOfFreeClusters, ref uiTotalNumberOfClusters))
    {
        uiRetVal = uiSectorsPerCluster * uiBytesPerSector;
    }

    return uiRetVal;
}