AccessMask.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. /* Copyright (C) 2014 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 System.Text;
  10. using Utilities;
  11. namespace SMBLibrary
  12. {
  13. /// <summary>
  14. /// [MS-SMB] 2.2.1.4.1 - File_Pipe_Printer_Access_Mask
  15. /// </summary>
  16. [Flags]
  17. public enum FileAccessMask : uint
  18. {
  19. FILE_READ_DATA = 0x00000001,
  20. FILE_WRITE_DATA = 0x00000002,
  21. FILE_APPEND_DATA = 0x00000004,
  22. FILE_READ_EA = 0x00000008,
  23. FILE_WRITE_EA = 0x00000010,
  24. FILE_EXECUTE = 0x00000020,
  25. FILE_READ_ATTRIBUTES = 0x00000080,
  26. FILE_WRITE_ATTRIBUTES = 0x00000100,
  27. DELETE = 0x00010000,
  28. READ_CONTROL = 0x00020000,
  29. WRITE_DAC = 0x00040000,
  30. WRITE_OWNER = 0x00080000,
  31. SYNCHRONIZE = 0x00100000,
  32. ACCESS_SYSTEM_SECURITY = 0x01000000,
  33. MAXIMUM_ALLOWED = 0x02000000,
  34. GENERIC_ALL = 0x20000000,
  35. GENERIC_EXECUTE = 0x20000000,
  36. GENERIC_WRITE = 0x40000000,
  37. GENERIC_READ = 0x80000000,
  38. }
  39. /// <summary>
  40. /// [MS-SMB] 2.2.1.4.2 - Directory_Access_Mask
  41. /// </summary>
  42. [Flags]
  43. public enum DirectoryAccessMask : uint
  44. {
  45. FILE_LIST_DIRECTORY = 0x00000001,
  46. FILE_ADD_FILE = 0x00000002,
  47. FILE_ADD_SUBDIRECTORY = 0x00000004,
  48. FILE_READ_EA = 0x00000008,
  49. FILE_WRITE_EA = 0x00000010,
  50. FILE_TRAVERSE = 0x00000020,
  51. FILE_DELETE_CHILD = 0x00000040,
  52. FILE_READ_ATTRIBUTES = 0x00000080,
  53. FILE_WRITE_ATTRIBUTES = 0x00000100,
  54. DELETE = 0x00010000,
  55. READ_CONTROL = 0x00020000,
  56. WRITE_DAC = 0x00040000,
  57. WRITE_OWNER = 0x00080000,
  58. SYNCHRONIZE = 0x00100000,
  59. ACCESS_SYSTEM_SECURITY = 0x01000000,
  60. MAXIMUM_ALLOWED = 0x02000000,
  61. GENERIC_ALL = 0x20000000,
  62. GENERIC_EXECUTE = 0x20000000,
  63. GENERIC_WRITE = 0x40000000,
  64. GENERIC_READ = 0x80000000,
  65. }
  66. /// <summary>
  67. /// [MS-DTYP] 2.4.3 - ACCESS_MASK
  68. /// </summary>
  69. public struct AccessMask // uint
  70. {
  71. public FileAccessMask File;
  72. public FileAccessMask Directory;
  73. public AccessMask(byte[] buffer, ref int offset) : this(buffer, offset)
  74. {
  75. offset += 4;
  76. }
  77. public AccessMask(byte[] buffer, int offset)
  78. {
  79. uint value = LittleEndianConverter.ToUInt32(buffer, offset);
  80. File = (FileAccessMask)value;
  81. Directory = (FileAccessMask)value;
  82. }
  83. public void WriteBytes(byte[] buffer, int offset)
  84. {
  85. uint value = (uint)(this.File | this.Directory);
  86. LittleEndianWriter.WriteUInt32(buffer, offset, value);
  87. }
  88. public void WriteBytes(byte[] buffer, ref int offset)
  89. {
  90. WriteBytes(buffer, offset);
  91. offset += 4;
  92. }
  93. }
  94. }