QueryInformationHelper.cs 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128
  1. /* Copyright (C) 2014-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 SMBLibrary.SMB1;
  10. using Utilities;
  11. namespace SMBLibrary.SMB1
  12. {
  13. public class QueryInformationHelper
  14. {
  15. /// <exception cref="SMBLibrary.UnsupportedInformationLevelException"></exception>
  16. public static FileInformationClass ToFileInformationClass(QueryInformationLevel informationLevel)
  17. {
  18. switch (informationLevel)
  19. {
  20. case QueryInformationLevel.SMB_QUERY_FILE_BASIC_INFO:
  21. return FileInformationClass.FileBasicInformation;
  22. case QueryInformationLevel.SMB_QUERY_FILE_STANDARD_INFO:
  23. return FileInformationClass.FileStandardInformation;
  24. case QueryInformationLevel.SMB_QUERY_FILE_EA_INFO:
  25. return FileInformationClass.FileEaInformation;
  26. case QueryInformationLevel.SMB_QUERY_FILE_NAME_INFO:
  27. return FileInformationClass.FileNameInformation;
  28. case QueryInformationLevel.SMB_QUERY_FILE_ALL_INFO:
  29. return FileInformationClass.FileAllInformation;
  30. case QueryInformationLevel.SMB_QUERY_FILE_ALT_NAME_INFO:
  31. return FileInformationClass.FileAlternateNameInformation;
  32. case QueryInformationLevel.SMB_QUERY_FILE_STREAM_INFO:
  33. return FileInformationClass.FileStreamInformation;
  34. case QueryInformationLevel.SMB_QUERY_FILE_COMPRESSION_INFO:
  35. return FileInformationClass.FileCompressionInformation;
  36. default:
  37. throw new UnsupportedInformationLevelException();
  38. }
  39. }
  40. public static QueryInformation FromFileInformation(FileInformation fileInformation)
  41. {
  42. if (fileInformation is FileBasicInformation)
  43. {
  44. FileBasicInformation fileBasicInfo = (FileBasicInformation)fileInformation;
  45. QueryFileBasicInfo result = new QueryFileBasicInfo();
  46. result.CreationTime = fileBasicInfo.CreationTime;
  47. result.LastAccessTime = fileBasicInfo.LastAccessTime;
  48. result.LastWriteTime = fileBasicInfo.LastWriteTime;
  49. result.LastChangeTime = fileBasicInfo.LastWriteTime;
  50. result.ExtFileAttributes = (ExtendedFileAttributes)fileBasicInfo.FileAttributes;
  51. return result;
  52. }
  53. else if (fileInformation is FileStandardInformation)
  54. {
  55. FileStandardInformation fileStandardInfo = (FileStandardInformation)fileInformation;
  56. QueryFileStandardInfo result = new QueryFileStandardInfo();
  57. result.AllocationSize = fileStandardInfo.AllocationSize;
  58. result.EndOfFile = fileStandardInfo.EndOfFile;
  59. result.DeletePending = fileStandardInfo.DeletePending;
  60. result.Directory = fileStandardInfo.Directory;
  61. return result;
  62. }
  63. else if (fileInformation is FileEaInformation)
  64. {
  65. FileEaInformation fileEAInfo = (FileEaInformation)fileInformation;
  66. QueryFileExtendedAttributeInfo result = new QueryFileExtendedAttributeInfo();
  67. result.EASize = fileEAInfo.EaSize;
  68. return result;
  69. }
  70. else if (fileInformation is FileNameInformation)
  71. {
  72. FileNameInformation fileNameInfo = (FileNameInformation)fileInformation;
  73. QueryFileNameInfo result = new QueryFileNameInfo();
  74. result.FileName = fileNameInfo.FileName;
  75. return result;
  76. }
  77. else if (fileInformation is FileAllInformation)
  78. {
  79. FileAllInformation fileAllInfo = (FileAllInformation)fileInformation;
  80. QueryFileAllInfo result = new QueryFileAllInfo();
  81. result.CreationDateTime = fileAllInfo.BasicInformation.CreationTime;
  82. result.LastAccessDateTime = fileAllInfo.BasicInformation.LastAccessTime;
  83. result.LastWriteDateTime = fileAllInfo.BasicInformation.LastWriteTime;
  84. result.LastChangeTime = fileAllInfo.BasicInformation.LastWriteTime;
  85. result.ExtFileAttributes = (ExtendedFileAttributes)fileAllInfo.BasicInformation.FileAttributes;
  86. result.AllocationSize = fileAllInfo.StandardInformation.AllocationSize;
  87. result.EndOfFile = fileAllInfo.StandardInformation.EndOfFile;
  88. result.DeletePending = fileAllInfo.StandardInformation.DeletePending;
  89. result.Directory = fileAllInfo.StandardInformation.Directory;
  90. result.EASize = fileAllInfo.EaInformation.EaSize;
  91. result.FileName = fileAllInfo.NameInformation.FileName;
  92. return result;
  93. }
  94. else if (fileInformation is FileAlternateNameInformation)
  95. {
  96. FileAlternateNameInformation fileAltNameInfo = (FileAlternateNameInformation)fileInformation;
  97. QueryFileAltNameInfo result = new QueryFileAltNameInfo();
  98. result.FileName = fileAltNameInfo.FileName;
  99. return result;
  100. }
  101. else if (fileInformation is FileStreamInformation)
  102. {
  103. FileStreamInformation fileStreamInfo = (FileStreamInformation)fileInformation;
  104. QueryFileStreamInfo result = new QueryFileStreamInfo();
  105. result.Entries.AddRange(fileStreamInfo.Entries);
  106. return result;
  107. }
  108. else if (fileInformation is FileCompressionInformation)
  109. {
  110. FileCompressionInformation fileCompressionInfo = (FileCompressionInformation)fileInformation;
  111. QueryFileCompressionInfo result = new QueryFileCompressionInfo();
  112. result.CompressedFileSize = fileCompressionInfo.CompressedFileSize;
  113. result.CompressionFormat = fileCompressionInfo.CompressionFormat;
  114. result.CompressionUnitShift = fileCompressionInfo.CompressionUnitShift;
  115. result.ChunkShift = fileCompressionInfo.ChunkShift;
  116. result.ClusterShift = fileCompressionInfo.ClusterShift;
  117. result.Reserved = fileCompressionInfo.Reserved;
  118. return result;
  119. }
  120. else
  121. {
  122. throw new NotImplementedException();
  123. }
  124. }
  125. }
  126. }