iotypes.inc 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186
  1. {%MainUnit ndk.pas}
  2. {
  3. Native Development Kit for Native NT
  4. This file is part of the Free Pascal run time library.
  5. This unit contains types used for IO functions.
  6. Copyright (c) 2010 by Sven Barth
  7. See the file COPYING.FPC, included in this distribution,
  8. for details about the copyright.
  9. This program is distributed in the hope that it will be useful,
  10. but WITHOUT ANY WARRANTY; without even the implied warranty of
  11. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
  12. **********************************************************************}
  13. const
  14. //
  15. // NtCreateFile OpenType Flags
  16. //
  17. FILE_SUPERSEDE = $00000000;
  18. FILE_OPEN = $00000001;
  19. FILE_CREATE = $00000002;
  20. FILE_OPEN_IF = $00000003;
  21. FILE_OVERWRITE = $00000004;
  22. FILE_OVERWRITE_IF = $00000005;
  23. FILE_MAXIMUM_DISPOSITION = $00000005;
  24. //
  25. // NtCreateFile Flags
  26. //
  27. FILE_DIRECTORY_FILE = $00000001;
  28. FILE_WRITE_THROUGH = $00000002;
  29. FILE_SEQUENTIAL_ONLY = $00000004;
  30. FILE_NO_INTERMEDIATE_BUFFERING = $00000008;
  31. FILE_SYNCHRONOUS_IO_ALERT = $00000010;
  32. FILE_SYNCHRONOUS_IO_NONALERT = $00000020;
  33. FILE_NON_DIRECTORY_FILE = $00000040;
  34. FILE_CREATE_TREE_CONNECTION = $00000080;
  35. FILE_COMPLETE_IF_OPLOCKED = $00000100;
  36. FILE_NO_EA_KNOWLEDGE = $00000200;
  37. FILE_OPEN_REMOTE_INSTANCE = $00000400;
  38. FILE_RANDOM_ACCESS = $00000800;
  39. FILE_DELETE_ON_CLOSE = $00001000;
  40. FILE_OPEN_BY_FILE_ID = $00002000;
  41. FILE_OPEN_FOR_BACKUP_INTENT = $00004000;
  42. FILE_NO_COMPRESSION = $00008000;
  43. FILE_RESERVE_OPFILTER = $00100000;
  44. FILE_OPEN_REPARSE_POINT = $00200000;
  45. FILE_OPEN_NO_RECALL = $00400000;
  46. FILE_OPEN_FOR_FREE_SPACE_QUERY = $00800000;
  47. type
  48. //
  49. // File Information Classes for NtQueryInformationFile
  50. //
  51. _FILE_INFORMATION_CLASS = (
  52. FileDirectoryInformation = 1,
  53. FileFullDirectoryInformation,
  54. FileBothDirectoryInformation,
  55. FileBasicInformation,
  56. FileStandardInformation,
  57. FileInternalInformation,
  58. FileEaInformation,
  59. FileAccessInformation,
  60. FileNameInformation,
  61. FileRenameInformation,
  62. FileLinkInformation,
  63. FileNamesInformation,
  64. FileDispositionInformation,
  65. FilePositionInformation,
  66. FileFullEaInformation,
  67. FileModeInformation,
  68. FileAlignmentInformation,
  69. FileAllInformation,
  70. FileAllocationInformation,
  71. FileEndOfFileInformation,
  72. FileAlternateNameInformation,
  73. FileStreamInformation,
  74. FilePipeInformation,
  75. FilePipeLocalInformation,
  76. FilePipeRemoteInformation,
  77. FileMailslotQueryInformation,
  78. FileMailslotSetInformation,
  79. FileCompressionInformation,
  80. FileObjectIdInformation,
  81. FileCompletionInformation,
  82. FileMoveClusterInformation,
  83. FileQuotaInformation,
  84. FileReparsePointInformation,
  85. FileNetworkOpenInformation,
  86. FileAttributeTagInformation,
  87. FileTrackingInformation,
  88. FileIdBothDirectoryInformation,
  89. FileIdFullDirectoryInformation,
  90. FileValidDataLengthInformation,
  91. FileShortNameInformation,
  92. FileMaximumInformation
  93. );
  94. FILE_INFORMATION_CLASS = _FILE_INFORMATION_CLASS;
  95. PFILE_INFORMATION_CLASS = ^FILE_INFORMATION_CLASS;
  96. //
  97. // I/O Status Block
  98. //
  99. _IO_STATUS_BLOCK = packed record
  100. union1: packed record
  101. case Boolean of
  102. True: (Status: NTSTATUS);
  103. False: (Pointer: PVOID);
  104. end;
  105. Information: ULONG_PTR;
  106. end;
  107. IO_STATUS_BLOCK = _IO_STATUS_BLOCK;
  108. PIO_STATUS_BLOCK = ^IO_STATUS_BLOCK;
  109. //
  110. // File Information structures for NtQueryInformationFile
  111. //
  112. _FILE_BASIC_INFORMATION = packed record
  113. CreationTime: LARGE_INTEGER;
  114. LastAccessTime: LARGE_INTEGER;
  115. LastWriteTime: LARGE_INTEGER;
  116. ChangeTime: LARGE_INTEGER;
  117. FileAttributes: ULONG;
  118. end;
  119. FILE_BASIC_INFORMATION = _FILE_BASIC_INFORMATION;
  120. PFILE_BASIC_INFORMATION = FILE_BASIC_INFORMATION;
  121. _FILE_STANDARD_INFORMATION = packed record
  122. AllocationSize: LARGE_INTEGER;
  123. EndOfFile: LARGE_INTEGER;
  124. NumberOfLinks: ULONG;
  125. DeletePending: NT_BOOLEAN;
  126. Directory: NT_BOOLEAN;
  127. end;
  128. FILE_STANDARD_INFORMATION = _FILE_STANDARD_INFORMATION;
  129. PFILE_STANDARD_INFORMATION = ^FILE_STANDARD_INFORMATION;
  130. _FILE_NETWORK_OPEN_INFORMATION = packed record
  131. CreationTime: LARGE_INTEGER;
  132. LastAccessTime: LARGE_INTEGER;
  133. LastWriteTime: LARGE_INTEGER;
  134. ChangeTime: LARGE_INTEGER;
  135. AllocationSize: LARGE_INTEGER;
  136. EndOfFile: LARGE_INTEGER;
  137. FileAttributes: ULONG;
  138. end;
  139. FILE_NETWORK_OPEN_INFORMATION = _FILE_NETWORK_OPEN_INFORMATION;
  140. PFILE_NETWORK_OPEN_INFORMATION = ^FILE_NETWORK_OPEN_INFORMATION;
  141. _FILE_POSITION_INFORMATION = packed record
  142. CurrentByteOffset: LARGE_INTEGER;
  143. end;
  144. FILE_POSITION_INFORMATION = _FILE_POSITION_INFORMATION;
  145. PFILE_POSITION_INFORMATION = ^FILE_POSITION_INFORMATION;
  146. _FILE_DISPOSITION_INFORMATION = packed record
  147. DeleteFile: NT_BOOLEAN;
  148. end;
  149. FILE_DISPOSITION_INFORMATION = _FILE_DISPOSITION_INFORMATION;
  150. PFILE_DISPOSITION_INFORMATION = ^FILE_DISPOSITION_INFORMATION;
  151. _FILE_RENAME_INFORMATION = packed record
  152. ReplaceIfExists: NT_BOOLEAN;
  153. RootDirectory: HANDLE;
  154. FileNameLength: ULONG;
  155. FileName: array[0..0] of WCHAR;
  156. end;
  157. FILE_RENAME_INFORMATION = _FILE_RENAME_INFORMATION;
  158. PFILE_RENAME_INFORMATION = ^FILE_RENAME_INFORMATION;
  159. _FILE_ALLOCATION_INFORMATION = packed record
  160. AllocationSize: LARGE_INTEGER;
  161. end;
  162. FILE_ALLOCATION_INFORMATION = _FILE_ALLOCATION_INFORMATION;
  163. PFILE_ALLOCATION_INFORMATION = ^FILE_ALLOCATION_INFORMATION;
  164. _FILE_END_OF_FILE_INFORMATION = packed record
  165. EndOfFile: LARGE_INTEGER;
  166. end;
  167. FILE_END_OF_FILE_INFORMATION = _FILE_END_OF_FILE_INFORMATION;
  168. PFILE_END_OF_FILE_INFORMATION = ^FILE_END_OF_FILE_INFORMATION;