iotypes.inc 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235
  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 = record
  100. union1: 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 = 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 = 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 = 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 = 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 = 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 = 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_BOTH_DIR_INFORMATION = record
  160. NextEntryOffset: ULONG;
  161. FileIndex: ULONG;
  162. CreationTime: LARGE_INTEGER;
  163. LastAccessTime: LARGE_INTEGER;
  164. LastWriteTime: LARGE_INTEGER;
  165. ChangeTime: LARGE_INTEGER;
  166. EndOfFile: LARGE_INTEGER;
  167. AllocationSize: LARGE_INTEGER;
  168. FileAttributes: ULONG;
  169. FileNameLength: ULONG;
  170. EaSize: ULONG;
  171. ShortNameLength: CCHAR;
  172. ShortName: array[0..11] of WCHAR;
  173. FileName: array[0..0] of WCHAR;
  174. end;
  175. FILE_BOTH_DIR_INFORMATION = _FILE_BOTH_DIR_INFORMATION;
  176. PFILE_BOTH_DIR_INFORMATION = ^FILE_BOTH_DIR_INFORMATION;
  177. _FILE_NAME_INFORMATION = record
  178. FileNameLength: ULONG;
  179. FileName: array[0..0] of WCHAR;
  180. end;
  181. FILE_NAME_INFORMATION = _FILE_NAME_INFORMATION;
  182. PFILE_NAME_INFORMATION = ^FILE_NAME_INFORMATION;
  183. _FILE_ALLOCATION_INFORMATION = record
  184. AllocationSize: LARGE_INTEGER;
  185. end;
  186. FILE_ALLOCATION_INFORMATION = _FILE_ALLOCATION_INFORMATION;
  187. PFILE_ALLOCATION_INFORMATION = ^FILE_ALLOCATION_INFORMATION;
  188. _FILE_END_OF_FILE_INFORMATION = record
  189. EndOfFile: LARGE_INTEGER;
  190. end;
  191. FILE_END_OF_FILE_INFORMATION = _FILE_END_OF_FILE_INFORMATION;
  192. PFILE_END_OF_FILE_INFORMATION = ^FILE_END_OF_FILE_INFORMATION;
  193. _FILE_DIRECTORY_INFORMATION = record
  194. NextEntryOffset: ULONG;
  195. FileIndex: ULONG;
  196. CreationTime: LARGE_INTEGER;
  197. LastAccessTime: LARGE_INTEGER;
  198. LastWriteTime: LARGE_INTEGER;
  199. ChangeTime: LARGE_INTEGER;
  200. EndOfFile: LARGE_INTEGER;
  201. AllocationSize: LARGE_INTEGER;
  202. FileAttributes: ULONG;
  203. FileNameLength: ULONG;
  204. FileName: array[0..0] of WCHAR;
  205. end;
  206. FILE_DIRECTORY_INFORMATION = _FILE_DIRECTORY_INFORMATION;
  207. PFILE_DIRECTORY_INFORMATION = ^FILE_DIRECTORY_INFORMATION;
  208. //
  209. // APC Callback for NtCreateFile
  210. //
  211. PIO_APC_ROUTINE = procedure(
  212. ApcContext: PVOID;
  213. IoStatusBlock: PIO_STATUS_BLOCK;
  214. Reserved: ULONG); stdcall;