FileSystemInformation.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. /* Copyright (C) 2017 Tal Aloni <tal.aloni.il@gmail.com>. All rights reserved.
  2. *
  3. * You can redistribute this program and/or modify it under the terms of
  4. * the GNU Lesser Public License as published by the Free Software Foundation,
  5. * either version 3 of the License, or (at your option) any later version.
  6. */
  7. using System;
  8. using System.Collections.Generic;
  9. using Utilities;
  10. namespace SMBLibrary
  11. {
  12. public abstract class FileSystemInformation
  13. {
  14. public abstract void WriteBytes(byte[] buffer, int offset);
  15. public byte[] GetBytes()
  16. {
  17. byte[] buffer = new byte[this.Length];
  18. WriteBytes(buffer, 0);
  19. return buffer;
  20. }
  21. public abstract FileSystemInformationClass FileSystemInformationClass
  22. {
  23. get;
  24. }
  25. public abstract int Length
  26. {
  27. get;
  28. }
  29. public static FileSystemInformation GetFileSystemInformation(byte[] buffer, int offset, FileSystemInformationClass informationClass)
  30. {
  31. switch (informationClass)
  32. {
  33. case FileSystemInformationClass.FileFsVolumeInformation:
  34. return new FileFsVolumeInformation(buffer, offset);
  35. case FileSystemInformationClass.FileFsSizeInformation:
  36. return new FileFsSizeInformation(buffer, offset);
  37. case FileSystemInformationClass.FileFsDeviceInformation:
  38. return new FileFsDeviceInformation(buffer, offset);
  39. case FileSystemInformationClass.FileFsAttributeInformation:
  40. return new FileFsAttributeInformation(buffer, offset);
  41. case FileSystemInformationClass.FileFsControlInformation:
  42. return new FileFsControlInformation(buffer, offset);
  43. case FileSystemInformationClass.FileFsFullSizeInformation:
  44. return new FileFsFullSizeInformation(buffer, offset);
  45. case FileSystemInformationClass.FileFsObjectIdInformation:
  46. return new FileFsObjectIdInformation(buffer, offset);
  47. case FileSystemInformationClass.FileFsSectorSizeInformation:
  48. return new FileFsSectorSizeInformation(buffer, offset);
  49. default:
  50. throw new UnsupportedInformationLevelException();
  51. }
  52. }
  53. }
  54. }