FSRM API in C# gebruiken

In sommige situaties is het interessanter om quota’s te plaatsen op mappen ipv die te koppelen aan personeen. Het klassieke quota systeem ingebouwd in Windows 2003 is hiervoor niet geschikt. In Windows 2003 SP2 en Windows 2008 komt daarvoor echter een oplossing nl. de File System Resource Manager of kortweg FSRM waarin quota’s op mappen kunnen geplaatst worden.

Hoewel er geen .NET Wrapper is voor de FSRM API kan deze toch heel makkelijk gebruikt worden in C#.  Het volstaat de de juiste DLL (c:windowssystem32srm.dll) te referencen omd aan de slag te kunnen.

Enkele code voorbeelden.  Quota plaatsen op een map waar nog geen quota op staat kan als volgt.

 1: public static bool AddDiskQuota(string Folder, double quota)
 2: {
 3:     FsrmQuotaManager quotao = new FsrmQuotaManager();
 4:     IFsrmQuota quotadef = quotao.CreateQuota(Folder);
 5:     quotadef.QuotaLimit = quota * (1024 * 1024);
 6:     quotadef.Commit();
 7:     return true;
 8: }

Nagaan hoeveel quota op een bepaalde map werd toegekend kan met volgende code

 1: public static double GetDiskQuota(string Folder)
 2: {
 3:         FsrmQuotaManager quota = new FsrmQuotaManager();
 4:         if (quota.GetQuota(Folder) != null)
 5:             return (Convert.ToDouble(quota.GetQuota(Folder).QuotaLimit));
 6:         else
 7:             return -1;
 8: }

Ook handig is de mogelijkheid om na te gaan hoeveel schijfruimte er al gebruikt wordt binnen de map

 1: public static double GetUsedQuota(string folder)
 2: {
 3:         FsrmQuotaManager quota = new FsrmQuotaManager();
 4:         if (quota.GetQuota(folder) != null)
 5:             return (Convert.ToDouble(quota.GetQuota(folder).QuotaUsed));
 6:         else
 7:             return -1;
 8: }

Er kan max. één quota entrie op een map geplaatst worden, daarom is het goed vb. de GetUsedQuota functie te gebruiken om na te gaan of er al een Quota entry op de map staat.   Als dat het geval is kan je de entry aanpassen ipv een nieuwe aan te maken.

 1: public static bool ChangeDiskQuota(string Folder, double quota)
 2: {
 3:         if (GetDiskQuota(Folder) != Convert.ToDouble(-1))
 4:         {
 5:             FsrmQuotaManager quotao = new FsrmQuotaManager();
 6:             IFsrmQuota test = quotao.GetQuota(Folder);
 7:             test.QuotaLimit = quota * (1024 * 1024);
 8:             test.Commit();
 9:             return true;
 10:         }
 11:         else
 12:             return false;
 13: }

Happy coding ! En je weet het … als er vragen of opmerkingen zijn, dan hoor ik graag van u!