1 use crate::string::UTF16Const; 2 use crate::winapi_local::um::winioctl::CTL_CODE; 3 use winapi::shared::basetsd::ULONG_PTR; 4 use winapi::shared::guiddef::GUID; 5 use winapi::shared::minwindef::DWORD; 6 use winapi::shared::ntdef::{ 7 BOOLEAN, CCHAR, CHAR, HANDLE, LARGE_INTEGER, LONG, LONGLONG, NTSTATUS, PBOOLEAN, PHANDLE, 8 PLARGE_INTEGER, POBJECT_ATTRIBUTES, PUCHAR, PULONG, PUNICODE_STRING, PVOID, UCHAR, ULONG, 9 ULONGLONG, USHORT, WCHAR, 10 }; 11 use winapi::um::winioctl::{ 12 FILE_ANY_ACCESS, FILE_DEVICE_MAILSLOT, FILE_DEVICE_NAMED_PIPE, METHOD_BUFFERED, METHOD_NEITHER, 13 }; 14 use winapi::um::winnt::{ 15 ACCESS_MASK, FILE_ID_128, FILE_READ_DATA, FILE_WRITE_DATA, PFILE_SEGMENT_ELEMENT, PSID, SID, 16 }; 17 pub const FILE_SUPERSEDE: ULONG = 0x00000000; 18 pub const FILE_OPEN: ULONG = 0x00000001; 19 pub const FILE_CREATE: ULONG = 0x00000002; 20 pub const FILE_OPEN_IF: ULONG = 0x00000003; 21 pub const FILE_OVERWRITE: ULONG = 0x00000004; 22 pub const FILE_OVERWRITE_IF: ULONG = 0x00000005; 23 pub const FILE_MAXIMUM_DISPOSITION: ULONG = 0x00000005; 24 pub const FILE_DIRECTORY_FILE: ULONG = 0x00000001; 25 pub const FILE_WRITE_THROUGH: ULONG = 0x00000002; 26 pub const FILE_SEQUENTIAL_ONLY: ULONG = 0x00000004; 27 pub const FILE_NO_INTERMEDIATE_BUFFERING: ULONG = 0x00000008; 28 pub const FILE_SYNCHRONOUS_IO_ALERT: ULONG = 0x00000010; 29 pub const FILE_SYNCHRONOUS_IO_NONALERT: ULONG = 0x00000020; 30 pub const FILE_NON_DIRECTORY_FILE: ULONG = 0x00000040; 31 pub const FILE_CREATE_TREE_CONNECTION: ULONG = 0x00000080; 32 pub const FILE_COMPLETE_IF_OPLOCKED: ULONG = 0x00000100; 33 pub const FILE_NO_EA_KNOWLEDGE: ULONG = 0x00000200; 34 pub const FILE_OPEN_FOR_RECOVERY: ULONG = 0x00000400; 35 pub const FILE_RANDOM_ACCESS: ULONG = 0x00000800; 36 pub const FILE_DELETE_ON_CLOSE: ULONG = 0x00001000; 37 pub const FILE_OPEN_BY_FILE_ID: ULONG = 0x00002000; 38 pub const FILE_OPEN_FOR_BACKUP_INTENT: ULONG = 0x00004000; 39 pub const FILE_NO_COMPRESSION: ULONG = 0x00008000; 40 pub const FILE_OPEN_REQUIRING_OPLOCK: ULONG = 0x00010000; 41 pub const FILE_DISALLOW_EXCLUSIVE: ULONG = 0x00020000; 42 pub const FILE_SESSION_AWARE: ULONG = 0x00040000; 43 pub const FILE_RESERVE_OPFILTER: ULONG = 0x00100000; 44 pub const FILE_OPEN_REPARSE_POINT: ULONG = 0x00200000; 45 pub const FILE_OPEN_NO_RECALL: ULONG = 0x00400000; 46 pub const FILE_OPEN_FOR_FREE_SPACE_QUERY: ULONG = 0x00800000; 47 pub const FILE_COPY_STRUCTURED_STORAGE: ULONG = 0x00000041; 48 pub const FILE_STRUCTURED_STORAGE: ULONG = 0x00000441; 49 pub const FILE_SUPERSEDED: ULONG = 0x00000000; 50 pub const FILE_OPENED: ULONG = 0x00000001; 51 pub const FILE_CREATED: ULONG = 0x00000002; 52 pub const FILE_OVERWRITTEN: ULONG = 0x00000003; 53 pub const FILE_EXISTS: ULONG = 0x00000004; 54 pub const FILE_DOES_NOT_EXIST: ULONG = 0x00000005; 55 pub const FILE_WRITE_TO_END_OF_FILE: ULONG = 0xffffffff; 56 pub const FILE_USE_FILE_POINTER_POSITION: ULONG = 0xfffffffe; 57 pub const FILE_BYTE_ALIGNMENT: ULONG = 0x00000000; 58 pub const FILE_WORD_ALIGNMENT: ULONG = 0x00000001; 59 pub const FILE_LONG_ALIGNMENT: ULONG = 0x00000003; 60 pub const FILE_QUAD_ALIGNMENT: ULONG = 0x00000007; 61 pub const FILE_OCTA_ALIGNMENT: ULONG = 0x0000000f; 62 pub const FILE_32_BYTE_ALIGNMENT: ULONG = 0x0000001f; 63 pub const FILE_64_BYTE_ALIGNMENT: ULONG = 0x0000003f; 64 pub const FILE_128_BYTE_ALIGNMENT: ULONG = 0x0000007f; 65 pub const FILE_256_BYTE_ALIGNMENT: ULONG = 0x000000ff; 66 pub const FILE_512_BYTE_ALIGNMENT: ULONG = 0x000001ff; 67 pub const MAXIMUM_FILENAME_LENGTH: u32 = 256; 68 pub const FILE_NEED_EA: ULONG = 0x00000080; 69 pub const FILE_EA_TYPE_BINARY: ULONG = 0xfffe; 70 pub const FILE_EA_TYPE_ASCII: ULONG = 0xfffd; 71 pub const FILE_EA_TYPE_BITMAP: ULONG = 0xfffb; 72 pub const FILE_EA_TYPE_METAFILE: ULONG = 0xfffa; 73 pub const FILE_EA_TYPE_ICON: ULONG = 0xfff9; 74 pub const FILE_EA_TYPE_EA: ULONG = 0xffee; 75 pub const FILE_EA_TYPE_MVMT: ULONG = 0xffdf; 76 pub const FILE_EA_TYPE_MVST: ULONG = 0xffde; 77 pub const FILE_EA_TYPE_ASN1: ULONG = 0xffdd; 78 pub const FILE_EA_TYPE_FAMILY_IDS: ULONG = 0xff01; 79 pub const FILE_REMOVABLE_MEDIA: ULONG = 0x00000001; 80 pub const FILE_READ_ONLY_DEVICE: ULONG = 0x00000002; 81 pub const FILE_FLOPPY_DISKETTE: ULONG = 0x00000004; 82 pub const FILE_WRITE_ONCE_MEDIA: ULONG = 0x00000008; 83 pub const FILE_REMOTE_DEVICE: ULONG = 0x00000010; 84 pub const FILE_DEVICE_IS_MOUNTED: ULONG = 0x00000020; 85 pub const FILE_VIRTUAL_VOLUME: ULONG = 0x00000040; 86 pub const FILE_AUTOGENERATED_DEVICE_NAME: ULONG = 0x00000080; 87 pub const FILE_DEVICE_SECURE_OPEN: ULONG = 0x00000100; 88 pub const FILE_CHARACTERISTIC_PNP_DEVICE: ULONG = 0x00000800; 89 pub const FILE_CHARACTERISTIC_TS_DEVICE: ULONG = 0x00001000; 90 pub const FILE_CHARACTERISTIC_WEBDAV_DEVICE: ULONG = 0x00002000; 91 pub const FILE_CHARACTERISTIC_CSV: ULONG = 0x00010000; 92 pub const FILE_DEVICE_ALLOW_APPCONTAINER_TRAVERSAL: ULONG = 0x00020000; 93 pub const FILE_PORTABLE_DEVICE: ULONG = 0x00040000; 94 pub const FILE_PIPE_BYTE_STREAM_TYPE: ULONG = 0x00000000; 95 pub const FILE_PIPE_MESSAGE_TYPE: ULONG = 0x00000001; 96 pub const FILE_PIPE_ACCEPT_REMOTE_CLIENTS: ULONG = 0x00000000; 97 pub const FILE_PIPE_REJECT_REMOTE_CLIENTS: ULONG = 0x00000002; 98 pub const FILE_PIPE_TYPE_VALID_MASK: ULONG = 0x00000003; 99 pub const FILE_PIPE_QUEUE_OPERATION: ULONG = 0x00000000; 100 pub const FILE_PIPE_COMPLETE_OPERATION: ULONG = 0x00000001; 101 pub const FILE_PIPE_BYTE_STREAM_MODE: ULONG = 0x00000000; 102 pub const FILE_PIPE_MESSAGE_MODE: ULONG = 0x00000001; 103 pub const FILE_PIPE_INBOUND: ULONG = 0x00000000; 104 pub const FILE_PIPE_OUTBOUND: ULONG = 0x00000001; 105 pub const FILE_PIPE_FULL_DUPLEX: ULONG = 0x00000002; 106 pub const FILE_PIPE_DISCONNECTED_STATE: ULONG = 0x00000001; 107 pub const FILE_PIPE_LISTENING_STATE: ULONG = 0x00000002; 108 pub const FILE_PIPE_CONNECTED_STATE: ULONG = 0x00000003; 109 pub const FILE_PIPE_CLOSING_STATE: ULONG = 0x00000004; 110 pub const FILE_PIPE_CLIENT_END: ULONG = 0x00000000; 111 pub const FILE_PIPE_SERVER_END: ULONG = 0x00000001; 112 pub const MAILSLOT_SIZE_AUTO: u32 = 0; 113 UNION!{union IO_STATUS_BLOCK_u { 114 Status: NTSTATUS, 115 Pointer: PVOID, 116 }} 117 STRUCT!{struct IO_STATUS_BLOCK { 118 u: IO_STATUS_BLOCK_u, 119 Information: ULONG_PTR, 120 }} 121 pub type PIO_STATUS_BLOCK = *mut IO_STATUS_BLOCK; 122 FN!{stdcall PIO_APC_ROUTINE( 123 ApcContext: PVOID, 124 IoStatusBlock: PIO_STATUS_BLOCK, 125 Reserved: ULONG, 126 ) -> ()} 127 STRUCT!{struct FILE_IO_COMPLETION_INFORMATION { 128 KeyContext: PVOID, 129 ApcContext: PVOID, 130 IoStatusBlock: IO_STATUS_BLOCK, 131 }} 132 pub type PFILE_IO_COMPLETION_INFORMATION = *mut FILE_IO_COMPLETION_INFORMATION; 133 ENUM!{enum FILE_INFORMATION_CLASS { 134 FileDirectoryInformation = 1, 135 FileFullDirectoryInformation = 2, 136 FileBothDirectoryInformation = 3, 137 FileBasicInformation = 4, 138 FileStandardInformation = 5, 139 FileInternalInformation = 6, 140 FileEaInformation = 7, 141 FileAccessInformation = 8, 142 FileNameInformation = 9, 143 FileRenameInformation = 10, 144 FileLinkInformation = 11, 145 FileNamesInformation = 12, 146 FileDispositionInformation = 13, 147 FilePositionInformation = 14, 148 FileFullEaInformation = 15, 149 FileModeInformation = 16, 150 FileAlignmentInformation = 17, 151 FileAllInformation = 18, 152 FileAllocationInformation = 19, 153 FileEndOfFileInformation = 20, 154 FileAlternateNameInformation = 21, 155 FileStreamInformation = 22, 156 FilePipeInformation = 23, 157 FilePipeLocalInformation = 24, 158 FilePipeRemoteInformation = 25, 159 FileMailslotQueryInformation = 26, 160 FileMailslotSetInformation = 27, 161 FileCompressionInformation = 28, 162 FileObjectIdInformation = 29, 163 FileCompletionInformation = 30, 164 FileMoveClusterInformation = 31, 165 FileQuotaInformation = 32, 166 FileReparsePointInformation = 33, 167 FileNetworkOpenInformation = 34, 168 FileAttributeTagInformation = 35, 169 FileTrackingInformation = 36, 170 FileIdBothDirectoryInformation = 37, 171 FileIdFullDirectoryInformation = 38, 172 FileValidDataLengthInformation = 39, 173 FileShortNameInformation = 40, 174 FileIoCompletionNotificationInformation = 41, 175 FileIoStatusBlockRangeInformation = 42, 176 FileIoPriorityHintInformation = 43, 177 FileSfioReserveInformation = 44, 178 FileSfioVolumeInformation = 45, 179 FileHardLinkInformation = 46, 180 FileProcessIdsUsingFileInformation = 47, 181 FileNormalizedNameInformation = 48, 182 FileNetworkPhysicalNameInformation = 49, 183 FileIdGlobalTxDirectoryInformation = 50, 184 FileIsRemoteDeviceInformation = 51, 185 FileUnusedInformation = 52, 186 FileNumaNodeInformation = 53, 187 FileStandardLinkInformation = 54, 188 FileRemoteProtocolInformation = 55, 189 FileRenameInformationBypassAccessCheck = 56, 190 FileLinkInformationBypassAccessCheck = 57, 191 FileVolumeNameInformation = 58, 192 FileIdInformation = 59, 193 FileIdExtdDirectoryInformation = 60, 194 FileReplaceCompletionInformation = 61, 195 FileHardLinkFullIdInformation = 62, 196 FileIdExtdBothDirectoryInformation = 63, 197 FileDispositionInformationEx = 64, 198 FileRenameInformationEx = 65, 199 FileRenameInformationExBypassAccessCheck = 66, 200 FileDesiredStorageClassInformation = 67, 201 FileStatInformation = 68, 202 FileMemoryPartitionInformation = 69, 203 FileStatLxInformation = 70, 204 FileCaseSensitiveInformation = 71, 205 FileLinkInformationEx = 72, 206 FileLinkInformationExBypassAccessCheck = 73, 207 FileStorageReserveIdInformation = 74, 208 FileCaseSensitiveInformationForceAccessCheck = 75, 209 FileMaximumInformation = 76, 210 }} 211 pub type PFILE_INFORMATION_CLASS = *mut FILE_INFORMATION_CLASS; 212 STRUCT!{struct FILE_BASIC_INFORMATION { 213 CreationTime: LARGE_INTEGER, 214 LastAccessTime: LARGE_INTEGER, 215 LastWriteTime: LARGE_INTEGER, 216 ChangeTime: LARGE_INTEGER, 217 FileAttributes: ULONG, 218 }} 219 pub type PFILE_BASIC_INFORMATION = *mut FILE_BASIC_INFORMATION; 220 STRUCT!{struct FILE_STANDARD_INFORMATION { 221 AllocationSize: LARGE_INTEGER, 222 EndOfFile: LARGE_INTEGER, 223 NumberOfLinks: ULONG, 224 DeletePending: BOOLEAN, 225 Directory: BOOLEAN, 226 }} 227 pub type PFILE_STANDARD_INFORMATION = *mut FILE_STANDARD_INFORMATION; 228 STRUCT!{struct FILE_STANDARD_INFORMATION_EX { 229 AllocationSize: LARGE_INTEGER, 230 EndOfFile: LARGE_INTEGER, 231 NumberOfLinks: ULONG, 232 DeletePending: BOOLEAN, 233 Directory: BOOLEAN, 234 AlternateStream: BOOLEAN, 235 MetadataAttribute: BOOLEAN, 236 }} 237 pub type PFILE_STANDARD_INFORMATION_EX = *mut FILE_STANDARD_INFORMATION_EX; 238 STRUCT!{struct FILE_INTERNAL_INFORMATION { 239 IndexNumber: LARGE_INTEGER, 240 }} 241 pub type PFILE_INTERNAL_INFORMATION = *mut FILE_INTERNAL_INFORMATION; 242 STRUCT!{struct FILE_EA_INFORMATION { 243 EaSize: ULONG, 244 }} 245 pub type PFILE_EA_INFORMATION = *mut FILE_EA_INFORMATION; 246 STRUCT!{struct FILE_ACCESS_INFORMATION { 247 AccessFlags: ACCESS_MASK, 248 }} 249 pub type PFILE_ACCESS_INFORMATION = *mut FILE_ACCESS_INFORMATION; 250 STRUCT!{struct FILE_POSITION_INFORMATION { 251 CurrentByteOffset: LARGE_INTEGER, 252 }} 253 pub type PFILE_POSITION_INFORMATION = *mut FILE_POSITION_INFORMATION; 254 STRUCT!{struct FILE_MODE_INFORMATION { 255 Mode: ULONG, 256 }} 257 pub type PFILE_MODE_INFORMATION = *mut FILE_MODE_INFORMATION; 258 STRUCT!{struct FILE_ALIGNMENT_INFORMATION { 259 AlignmentRequirement: ULONG, 260 }} 261 pub type PFILE_ALIGNMENT_INFORMATION = *mut FILE_ALIGNMENT_INFORMATION; 262 STRUCT!{struct FILE_NAME_INFORMATION { 263 FileNameLength: ULONG, 264 FileName: [WCHAR; 1], 265 }} 266 pub type PFILE_NAME_INFORMATION = *mut FILE_NAME_INFORMATION; 267 STRUCT!{struct FILE_ALL_INFORMATION { 268 BasicInformation: FILE_BASIC_INFORMATION, 269 StandardInformation: FILE_STANDARD_INFORMATION, 270 InternalInformation: FILE_INTERNAL_INFORMATION, 271 EaInformation: FILE_EA_INFORMATION, 272 AccessInformation: FILE_ACCESS_INFORMATION, 273 PositionInformation: FILE_POSITION_INFORMATION, 274 ModeInformation: FILE_MODE_INFORMATION, 275 AlignmentInformation: FILE_ALIGNMENT_INFORMATION, 276 NameInformation: FILE_NAME_INFORMATION, 277 }} 278 pub type PFILE_ALL_INFORMATION = *mut FILE_ALL_INFORMATION; 279 STRUCT!{struct FILE_NETWORK_OPEN_INFORMATION { 280 CreationTime: LARGE_INTEGER, 281 LastAccessTime: LARGE_INTEGER, 282 LastWriteTime: LARGE_INTEGER, 283 ChangeTime: LARGE_INTEGER, 284 AllocationSize: LARGE_INTEGER, 285 EndOfFile: LARGE_INTEGER, 286 FileAttributes: ULONG, 287 }} 288 pub type PFILE_NETWORK_OPEN_INFORMATION = *mut FILE_NETWORK_OPEN_INFORMATION; 289 STRUCT!{struct FILE_ATTRIBUTE_TAG_INFORMATION { 290 FileAttributes: ULONG, 291 ReparseTag: ULONG, 292 }} 293 pub type PFILE_ATTRIBUTE_TAG_INFORMATION = *mut FILE_ATTRIBUTE_TAG_INFORMATION; 294 STRUCT!{struct FILE_ALLOCATION_INFORMATION { 295 AllocationSize: LARGE_INTEGER, 296 }} 297 pub type PFILE_ALLOCATION_INFORMATION = *mut FILE_ALLOCATION_INFORMATION; 298 STRUCT!{struct FILE_COMPRESSION_INFORMATION { 299 CompressedFileSize: LARGE_INTEGER, 300 CompressionFormat: USHORT, 301 CompressionUnitShift: UCHAR, 302 ChunkShift: UCHAR, 303 ClusterShift: UCHAR, 304 Reserved: [UCHAR; 3], 305 }} 306 pub type PFILE_COMPRESSION_INFORMATION = *mut FILE_COMPRESSION_INFORMATION; 307 STRUCT!{struct FILE_DISPOSITION_INFORMATION { 308 DeleteFileA: BOOLEAN, 309 }} 310 pub type PFILE_DISPOSITION_INFORMATION = *mut FILE_DISPOSITION_INFORMATION; 311 STRUCT!{struct FILE_END_OF_FILE_INFORMATION { 312 EndOfFile: LARGE_INTEGER, 313 }} 314 pub type PFILE_END_OF_FILE_INFORMATION = *mut FILE_END_OF_FILE_INFORMATION; 315 STRUCT!{struct FILE_VALID_DATA_LENGTH_INFORMATION { 316 ValidDataLength: LARGE_INTEGER, 317 }} 318 pub type PFILE_VALID_DATA_LENGTH_INFORMATION = *mut FILE_VALID_DATA_LENGTH_INFORMATION; 319 STRUCT!{struct FILE_LINK_INFORMATION { 320 ReplaceIfExists: BOOLEAN, 321 RootDirectory: HANDLE, 322 FileNameLength: ULONG, 323 FileName: [WCHAR; 1], 324 }} 325 pub type PFILE_LINK_INFORMATION = *mut FILE_LINK_INFORMATION; 326 STRUCT!{struct FILE_MOVE_CLUSTER_INFORMATION { 327 ClusterCount: ULONG, 328 RootDirectory: HANDLE, 329 FileNameLength: ULONG, 330 FileName: [WCHAR; 1], 331 }} 332 pub type PFILE_MOVE_CLUSTER_INFORMATION = *mut FILE_MOVE_CLUSTER_INFORMATION; 333 STRUCT!{struct FILE_RENAME_INFORMATION { 334 ReplaceIfExists: BOOLEAN, 335 RootDirectory: HANDLE, 336 FileNameLength: ULONG, 337 FileName: [WCHAR; 1], 338 }} 339 pub type PFILE_RENAME_INFORMATION = *mut FILE_RENAME_INFORMATION; 340 STRUCT!{struct FILE_STREAM_INFORMATION { 341 NextEntryOffset: ULONG, 342 StreamNameLength: ULONG, 343 StreamSize: LARGE_INTEGER, 344 StreamAllocationSize: LARGE_INTEGER, 345 StreamName: [WCHAR; 1], 346 }} 347 pub type PFILE_STREAM_INFORMATION = *mut FILE_STREAM_INFORMATION; 348 STRUCT!{struct FILE_TRACKING_INFORMATION { 349 DestinationFile: HANDLE, 350 ObjectInformationLength: ULONG, 351 ObjectInformation: [CHAR; 1], 352 }} 353 pub type PFILE_TRACKING_INFORMATION = *mut FILE_TRACKING_INFORMATION; 354 STRUCT!{struct FILE_COMPLETION_INFORMATION { 355 Port: HANDLE, 356 Key: PVOID, 357 }} 358 pub type PFILE_COMPLETION_INFORMATION = *mut FILE_COMPLETION_INFORMATION; 359 STRUCT!{struct FILE_PIPE_INFORMATION { 360 ReadMode: ULONG, 361 CompletionMode: ULONG, 362 }} 363 pub type PFILE_PIPE_INFORMATION = *mut FILE_PIPE_INFORMATION; 364 STRUCT!{struct FILE_PIPE_LOCAL_INFORMATION { 365 NamedPipeType: ULONG, 366 NamedPipeConfiguration: ULONG, 367 MaximumInstances: ULONG, 368 CurrentInstances: ULONG, 369 InboundQuota: ULONG, 370 ReadDataAvailable: ULONG, 371 OutboundQuota: ULONG, 372 WriteQuotaAvailable: ULONG, 373 NamedPipeState: ULONG, 374 NamedPipeEnd: ULONG, 375 }} 376 pub type PFILE_PIPE_LOCAL_INFORMATION = *mut FILE_PIPE_LOCAL_INFORMATION; 377 STRUCT!{struct FILE_PIPE_REMOTE_INFORMATION { 378 CollectDataTime: LARGE_INTEGER, 379 MaximumCollectionCount: ULONG, 380 }} 381 pub type PFILE_PIPE_REMOTE_INFORMATION = *mut FILE_PIPE_REMOTE_INFORMATION; 382 STRUCT!{struct FILE_MAILSLOT_QUERY_INFORMATION { 383 MaximumMessageSize: ULONG, 384 MailslotQuota: ULONG, 385 NextMessageSize: ULONG, 386 MessagesAvailable: ULONG, 387 ReadTimeout: LARGE_INTEGER, 388 }} 389 pub type PFILE_MAILSLOT_QUERY_INFORMATION = *mut FILE_MAILSLOT_QUERY_INFORMATION; 390 STRUCT!{struct FILE_MAILSLOT_SET_INFORMATION { 391 ReadTimeout: PLARGE_INTEGER, 392 }} 393 pub type PFILE_MAILSLOT_SET_INFORMATION = *mut FILE_MAILSLOT_SET_INFORMATION; 394 STRUCT!{struct FILE_REPARSE_POINT_INFORMATION { 395 FileReference: LONGLONG, 396 Tag: ULONG, 397 }} 398 pub type PFILE_REPARSE_POINT_INFORMATION = *mut FILE_REPARSE_POINT_INFORMATION; 399 STRUCT!{struct FILE_LINK_ENTRY_INFORMATION { 400 NextEntryOffset: ULONG, 401 ParentFileId: LONGLONG, 402 FileNameLength: ULONG, 403 FileName: [WCHAR; 1], 404 }} 405 pub type PFILE_LINK_ENTRY_INFORMATION = *mut FILE_LINK_ENTRY_INFORMATION; 406 STRUCT!{struct FILE_LINKS_INFORMATION { 407 BytesNeeded: ULONG, 408 EntriesReturned: ULONG, 409 Entry: FILE_LINK_ENTRY_INFORMATION, 410 }} 411 pub type PFILE_LINKS_INFORMATION = *mut FILE_LINKS_INFORMATION; 412 STRUCT!{struct FILE_NETWORK_PHYSICAL_NAME_INFORMATION { 413 FileNameLength: ULONG, 414 FileName: [WCHAR; 1], 415 }} 416 pub type PFILE_NETWORK_PHYSICAL_NAME_INFORMATION = *mut FILE_NETWORK_PHYSICAL_NAME_INFORMATION; 417 STRUCT!{struct FILE_STANDARD_LINK_INFORMATION { 418 NumberOfAccessibleLinks: ULONG, 419 TotalNumberOfLinks: ULONG, 420 DeletePending: BOOLEAN, 421 Directory: BOOLEAN, 422 }} 423 pub type PFILE_STANDARD_LINK_INFORMATION = *mut FILE_STANDARD_LINK_INFORMATION; 424 STRUCT!{struct FILE_SFIO_RESERVE_INFORMATION { 425 RequestsPerPeriod: ULONG, 426 Period: ULONG, 427 RetryFailures: BOOLEAN, 428 Discardable: BOOLEAN, 429 RequestSize: ULONG, 430 NumOutstandingRequests: ULONG, 431 }} 432 pub type PFILE_SFIO_RESERVE_INFORMATION = *mut FILE_SFIO_RESERVE_INFORMATION; 433 STRUCT!{struct FILE_SFIO_VOLUME_INFORMATION { 434 MaximumRequestsPerPeriod: ULONG, 435 MinimumPeriod: ULONG, 436 MinimumTransferSize: ULONG, 437 }} 438 pub type PFILE_SFIO_VOLUME_INFORMATION = *mut FILE_SFIO_VOLUME_INFORMATION; 439 ENUM!{enum IO_PRIORITY_HINT { 440 IoPriorityVeryLow = 0, 441 IoPriorityLow = 1, 442 IoPriorityNormal = 2, 443 IoPriorityHigh = 3, 444 IoPriorityCritical = 4, 445 MaxIoPriorityTypes = 5, 446 }} 447 STRUCT!{struct FILE_IO_PRIORITY_HINT_INFORMATION { 448 PriorityHint: IO_PRIORITY_HINT, 449 }} 450 pub type PFILE_IO_PRIORITY_HINT_INFORMATION = *mut FILE_IO_PRIORITY_HINT_INFORMATION; 451 STRUCT!{struct FILE_IO_PRIORITY_HINT_INFORMATION_EX { 452 PriorityHint: IO_PRIORITY_HINT, 453 BoostOutstanding: BOOLEAN, 454 }} 455 pub type PFILE_IO_PRIORITY_HINT_INFORMATION_EX = *mut FILE_IO_PRIORITY_HINT_INFORMATION_EX; 456 pub const FILE_SKIP_COMPLETION_PORT_ON_SUCCESS: u32 = 0x1; 457 pub const FILE_SKIP_SET_EVENT_ON_HANDLE: u32 = 0x2; 458 pub const FILE_SKIP_SET_USER_EVENT_ON_FAST_IO: u32 = 0x4; 459 STRUCT!{struct FILE_IO_COMPLETION_NOTIFICATION_INFORMATION { 460 Flags: ULONG, 461 }} 462 pub type PFILE_IO_COMPLETION_NOTIFICATION_INFORMATION = 463 *mut FILE_IO_COMPLETION_NOTIFICATION_INFORMATION; 464 STRUCT!{struct FILE_PROCESS_IDS_USING_FILE_INFORMATION { 465 NumberOfProcessIdsInList: ULONG, 466 ProcessIdList: [ULONG_PTR; 1], 467 }} 468 pub type PFILE_PROCESS_IDS_USING_FILE_INFORMATION = *mut FILE_PROCESS_IDS_USING_FILE_INFORMATION; 469 STRUCT!{struct FILE_IS_REMOTE_DEVICE_INFORMATION { 470 IsRemote: BOOLEAN, 471 }} 472 pub type PFILE_IS_REMOTE_DEVICE_INFORMATION = *mut FILE_IS_REMOTE_DEVICE_INFORMATION; 473 STRUCT!{struct FILE_NUMA_NODE_INFORMATION { 474 NodeNumber: USHORT, 475 }} 476 pub type PFILE_NUMA_NODE_INFORMATION = *mut FILE_NUMA_NODE_INFORMATION; 477 STRUCT!{struct FILE_IOSTATUSBLOCK_RANGE_INFORMATION { 478 IoStatusBlockRange: PUCHAR, 479 Length: ULONG, 480 }} 481 pub type PFILE_IOSTATUSBLOCK_RANGE_INFORMATION = *mut FILE_IOSTATUSBLOCK_RANGE_INFORMATION; 482 STRUCT!{struct FILE_REMOTE_PROTOCOL_INFORMATION_GenericReserved { 483 Reserved: [ULONG; 8], 484 }} 485 STRUCT!{struct FILE_REMOTE_PROTOCOL_INFORMATION_ProtocolSpecific_Smb2_Server { 486 Capabilities: ULONG, 487 }} 488 STRUCT!{struct FILE_REMOTE_PROTOCOL_INFORMATION_ProtocolSpecific_Smb2_Share { 489 Capabilities: ULONG, 490 CachingFlags: ULONG, 491 }} 492 STRUCT!{struct FILE_REMOTE_PROTOCOL_INFORMATION_ProtocolSpecific_Smb2 { 493 Server: FILE_REMOTE_PROTOCOL_INFORMATION_ProtocolSpecific_Smb2_Server, 494 Share: FILE_REMOTE_PROTOCOL_INFORMATION_ProtocolSpecific_Smb2_Share, 495 }} 496 UNION!{union FILE_REMOTE_PROTOCOL_INFORMATION_ProtocolSpecific { 497 Smb2: FILE_REMOTE_PROTOCOL_INFORMATION_ProtocolSpecific_Smb2, 498 Reserved: [ULONG; 16], 499 }} 500 STRUCT!{struct FILE_REMOTE_PROTOCOL_INFORMATION { 501 StructureVersion: USHORT, 502 StructureSize: USHORT, 503 Protocol: ULONG, 504 ProtocolMajorVersion: USHORT, 505 ProtocolMinorVersion: USHORT, 506 ProtocolRevision: USHORT, 507 Reserved: USHORT, 508 Flags: ULONG, 509 GenericReserved: FILE_REMOTE_PROTOCOL_INFORMATION_GenericReserved, 510 ProtocolSpecific: FILE_REMOTE_PROTOCOL_INFORMATION_ProtocolSpecific, 511 }} 512 pub type PFILE_REMOTE_PROTOCOL_INFORMATION = *mut FILE_REMOTE_PROTOCOL_INFORMATION; 513 pub const CHECKSUM_ENFORCEMENT_OFF: u32 = 0x00000001; 514 STRUCT!{struct FILE_INTEGRITY_STREAM_INFORMATION { 515 ChecksumAlgorithm: USHORT, 516 ChecksumChunkShift: UCHAR, 517 ClusterShift: UCHAR, 518 Flags: ULONG, 519 }} 520 pub type PFILE_INTEGRITY_STREAM_INFORMATION = *mut FILE_INTEGRITY_STREAM_INFORMATION; 521 STRUCT!{struct FILE_VOLUME_NAME_INFORMATION { 522 DeviceNameLength: ULONG, 523 DeviceName: [WCHAR; 1], 524 }} 525 pub type PFILE_VOLUME_NAME_INFORMATION = *mut FILE_VOLUME_NAME_INFORMATION; 526 STRUCT!{struct FILE_ID_INFORMATION { 527 VolumeSerialNumber: ULONGLONG, 528 FileId: FILE_ID_128, 529 }} 530 pub type PFILE_ID_INFORMATION = *mut FILE_ID_INFORMATION; 531 STRUCT!{struct FILE_ID_EXTD_DIR_INFORMATION { 532 NextEntryOffset: ULONG, 533 FileIndex: ULONG, 534 CreationTime: LARGE_INTEGER, 535 LastAccessTime: LARGE_INTEGER, 536 LastWriteTime: LARGE_INTEGER, 537 ChangeTime: LARGE_INTEGER, 538 EndOfFile: LARGE_INTEGER, 539 AllocationSize: LARGE_INTEGER, 540 FileAttributes: ULONG, 541 FileNameLength: ULONG, 542 EaSize: ULONG, 543 ReparsePointTag: ULONG, 544 FileId: FILE_ID_128, 545 FileName: [WCHAR; 1], 546 }} 547 pub type PFILE_ID_EXTD_DIR_INFORMATION = *mut FILE_ID_EXTD_DIR_INFORMATION; 548 STRUCT!{struct FILE_LINK_ENTRY_FULL_ID_INFORMATION { 549 NextEntryOffset: ULONG, 550 ParentFileId: FILE_ID_128, 551 FileNameLength: ULONG, 552 FileName: [WCHAR; 1], 553 }} 554 pub type PFILE_LINK_ENTRY_FULL_ID_INFORMATION = *mut FILE_LINK_ENTRY_FULL_ID_INFORMATION; 555 STRUCT!{struct FILE_ID_EXTD_BOTH_DIR_INFORMATION { 556 NextEntryOffset: ULONG, 557 FileIndex: ULONG, 558 CreationTime: LARGE_INTEGER, 559 LastAccessTime: LARGE_INTEGER, 560 LastWriteTime: LARGE_INTEGER, 561 ChangeTime: LARGE_INTEGER, 562 EndOfFile: LARGE_INTEGER, 563 AllocationSize: LARGE_INTEGER, 564 FileAttributes: ULONG, 565 FileNameLength: ULONG, 566 EaSize: ULONG, 567 ReparsePointTag: ULONG, 568 FileId: FILE_ID_128, 569 ShortNameLength: CCHAR, 570 ShortName: [WCHAR; 12], 571 FileName: [WCHAR; 1], 572 }} 573 pub type PFILE_ID_EXTD_BOTH_DIR_INFORMATION = *mut FILE_ID_EXTD_BOTH_DIR_INFORMATION; 574 STRUCT!{struct FILE_STAT_INFORMATION { 575 FileId: LARGE_INTEGER, 576 CreationTime: LARGE_INTEGER, 577 LastAccessTime: LARGE_INTEGER, 578 LastWriteTime: LARGE_INTEGER, 579 ChangeTime: LARGE_INTEGER, 580 AllocationSize: LARGE_INTEGER, 581 EndOfFile: LARGE_INTEGER, 582 FileAttributes: ULONG, 583 ReparseTag: ULONG, 584 NumberOfLinks: ULONG, 585 EffectiveAccess: ULONG, 586 }} 587 pub type PFILE_STAT_INFORMATION = *mut FILE_STAT_INFORMATION; 588 STRUCT!{struct FILE_MEMORY_PARTITION_INFORMATION_Flags_s { 589 NoCrossPartitionAccess: UCHAR, 590 Spare: [UCHAR; 3], 591 }} 592 UNION!{union FILE_MEMORY_PARTITION_INFORMATION_Flags { 593 s: FILE_MEMORY_PARTITION_INFORMATION_Flags_s, 594 AllFlags: ULONG, 595 }} 596 STRUCT!{struct FILE_MEMORY_PARTITION_INFORMATION { 597 OwnerPartitionHandle: HANDLE, 598 Flags: FILE_MEMORY_PARTITION_INFORMATION_Flags, 599 }} 600 pub type PFILE_MEMORY_PARTITION_INFORMATION = *mut FILE_MEMORY_PARTITION_INFORMATION; 601 STRUCT!{struct FILE_STAT_LX_INFORMATION { 602 FileId: LARGE_INTEGER, 603 CreationTime: LARGE_INTEGER, 604 LastAccessTime: LARGE_INTEGER, 605 LastWriteTime: LARGE_INTEGER, 606 ChangeTime: LARGE_INTEGER, 607 AllocationSize: LARGE_INTEGER, 608 EndOfFile: LARGE_INTEGER, 609 FileAttributes: ULONG, 610 ReparseTag: ULONG, 611 NumberOfLinks: ULONG, 612 EffectiveAccess: ULONG, 613 LxFlags: ULONG, 614 LxUid: ULONG, 615 LxGid: ULONG, 616 LxMode: ULONG, 617 LxDeviceIdMajor: ULONG, 618 LxDeviceIdMinor: ULONG, 619 }} 620 pub type PFILE_STAT_LX_INFORMATION = *mut FILE_STAT_LX_INFORMATION; 621 STRUCT!{struct FILE_CASE_SENSITIVE_INFORMATION { 622 Flags: ULONG, 623 }} 624 pub type PFILE_CASE_SENSITIVE_INFORMATION = *mut FILE_CASE_SENSITIVE_INFORMATION; 625 STRUCT!{struct FILE_DIRECTORY_INFORMATION { 626 NextEntryOffset: ULONG, 627 FileIndex: ULONG, 628 CreationTime: LARGE_INTEGER, 629 LastAccessTime: LARGE_INTEGER, 630 LastWriteTime: LARGE_INTEGER, 631 ChangeTime: LARGE_INTEGER, 632 EndOfFile: LARGE_INTEGER, 633 AllocationSize: LARGE_INTEGER, 634 FileAttributes: ULONG, 635 FileNameLength: ULONG, 636 FileName: [WCHAR; 1], 637 }} 638 pub type PFILE_DIRECTORY_INFORMATION = *mut FILE_DIRECTORY_INFORMATION; 639 STRUCT!{struct FILE_FULL_DIR_INFORMATION { 640 NextEntryOffset: ULONG, 641 FileIndex: ULONG, 642 CreationTime: LARGE_INTEGER, 643 LastAccessTime: LARGE_INTEGER, 644 LastWriteTime: LARGE_INTEGER, 645 ChangeTime: LARGE_INTEGER, 646 EndOfFile: LARGE_INTEGER, 647 AllocationSize: LARGE_INTEGER, 648 FileAttributes: ULONG, 649 FileNameLength: ULONG, 650 EaSize: ULONG, 651 FileName: [WCHAR; 1], 652 }} 653 pub type PFILE_FULL_DIR_INFORMATION = *mut FILE_FULL_DIR_INFORMATION; 654 STRUCT!{struct FILE_ID_FULL_DIR_INFORMATION { 655 NextEntryOffset: ULONG, 656 FileIndex: ULONG, 657 CreationTime: LARGE_INTEGER, 658 LastAccessTime: LARGE_INTEGER, 659 LastWriteTime: LARGE_INTEGER, 660 ChangeTime: LARGE_INTEGER, 661 EndOfFile: LARGE_INTEGER, 662 AllocationSize: LARGE_INTEGER, 663 FileAttributes: ULONG, 664 FileNameLength: ULONG, 665 EaSize: ULONG, 666 FileId: LARGE_INTEGER, 667 FileName: [WCHAR; 1], 668 }} 669 pub type PFILE_ID_FULL_DIR_INFORMATION = *mut FILE_ID_FULL_DIR_INFORMATION; 670 STRUCT!{struct FILE_BOTH_DIR_INFORMATION { 671 NextEntryOffset: ULONG, 672 FileIndex: ULONG, 673 CreationTime: LARGE_INTEGER, 674 LastAccessTime: LARGE_INTEGER, 675 LastWriteTime: LARGE_INTEGER, 676 ChangeTime: LARGE_INTEGER, 677 EndOfFile: LARGE_INTEGER, 678 AllocationSize: LARGE_INTEGER, 679 FileAttributes: ULONG, 680 FileNameLength: ULONG, 681 EaSize: ULONG, 682 ShortNameLength: CCHAR, 683 ShortName: [WCHAR; 12], 684 FileName: [WCHAR; 1], 685 }} 686 pub type PFILE_BOTH_DIR_INFORMATION = *mut FILE_BOTH_DIR_INFORMATION; 687 STRUCT!{struct FILE_ID_BOTH_DIR_INFORMATION { 688 NextEntryOffset: ULONG, 689 FileIndex: ULONG, 690 CreationTime: LARGE_INTEGER, 691 LastAccessTime: LARGE_INTEGER, 692 LastWriteTime: LARGE_INTEGER, 693 ChangeTime: LARGE_INTEGER, 694 EndOfFile: LARGE_INTEGER, 695 AllocationSize: LARGE_INTEGER, 696 FileAttributes: ULONG, 697 FileNameLength: ULONG, 698 EaSize: ULONG, 699 ShortNameLength: CCHAR, 700 ShortName: [WCHAR; 12], 701 FileId: LARGE_INTEGER, 702 FileName: [WCHAR; 1], 703 }} 704 pub type PFILE_ID_BOTH_DIR_INFORMATION = *mut FILE_ID_BOTH_DIR_INFORMATION; 705 STRUCT!{struct FILE_NAMES_INFORMATION { 706 NextEntryOffset: ULONG, 707 FileIndex: ULONG, 708 FileNameLength: ULONG, 709 FileName: [WCHAR; 1], 710 }} 711 pub type PFILE_NAMES_INFORMATION = *mut FILE_NAMES_INFORMATION; 712 STRUCT!{struct FILE_ID_GLOBAL_TX_DIR_INFORMATION { 713 NextEntryOffset: ULONG, 714 FileIndex: ULONG, 715 CreationTime: LARGE_INTEGER, 716 LastAccessTime: LARGE_INTEGER, 717 LastWriteTime: LARGE_INTEGER, 718 ChangeTime: LARGE_INTEGER, 719 EndOfFile: LARGE_INTEGER, 720 AllocationSize: LARGE_INTEGER, 721 FileAttributes: ULONG, 722 FileNameLength: ULONG, 723 FileId: LARGE_INTEGER, 724 LockingTransactionId: GUID, 725 TxInfoFlags: ULONG, 726 FileName: [WCHAR; 1], 727 }} 728 pub type PFILE_ID_GLOBAL_TX_DIR_INFORMATION = *mut FILE_ID_GLOBAL_TX_DIR_INFORMATION; 729 pub const FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_WRITELOCKED: u32 = 0x00000001; 730 pub const FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_VISIBLE_TO_TX: u32 = 0x00000002; 731 pub const FILE_ID_GLOBAL_TX_DIR_INFO_FLAG_VISIBLE_OUTSIDE_TX: u32 = 0x00000004; 732 STRUCT!{struct FILE_OBJECTID_INFORMATION_u_s { 733 BirthVolumeId: [UCHAR; 16], 734 BirthObjectId: [UCHAR; 16], 735 DomainId: [UCHAR; 16], 736 }} 737 UNION!{union FILE_OBJECTID_INFORMATION_u { 738 s: FILE_OBJECTID_INFORMATION_u_s, 739 ExtendedInfo: [UCHAR; 48], 740 }} 741 STRUCT!{struct FILE_OBJECTID_INFORMATION { 742 FileReference: LONGLONG, 743 ObjectId: [UCHAR; 16], 744 u: FILE_OBJECTID_INFORMATION_u, 745 }} 746 pub type PFILE_OBJECTID_INFORMATION = *mut FILE_OBJECTID_INFORMATION; 747 STRUCT!{struct FILE_FULL_EA_INFORMATION { 748 NextEntryOffset: ULONG, 749 Flags: UCHAR, 750 EaNameLength: UCHAR, 751 EaValueLength: USHORT, 752 EaName: [CHAR; 1], 753 }} 754 pub type PFILE_FULL_EA_INFORMATION = *mut FILE_FULL_EA_INFORMATION; 755 STRUCT!{struct FILE_GET_EA_INFORMATION { 756 NextEntryOffset: ULONG, 757 EaNameLength: UCHAR, 758 EaName: [CHAR; 1], 759 }} 760 pub type PFILE_GET_EA_INFORMATION = *mut FILE_GET_EA_INFORMATION; 761 STRUCT!{struct FILE_GET_QUOTA_INFORMATION { 762 NextEntryOffset: ULONG, 763 SidLength: ULONG, 764 Sid: SID, 765 }} 766 pub type PFILE_GET_QUOTA_INFORMATION = *mut FILE_GET_QUOTA_INFORMATION; 767 STRUCT!{struct FILE_QUOTA_INFORMATION { 768 NextEntryOffset: ULONG, 769 SidLength: ULONG, 770 ChangeTime: LARGE_INTEGER, 771 QuotaUsed: LARGE_INTEGER, 772 QuotaThreshold: LARGE_INTEGER, 773 QuotaLimit: LARGE_INTEGER, 774 Sid: SID, 775 }} 776 pub type PFILE_QUOTA_INFORMATION = *mut FILE_QUOTA_INFORMATION; 777 ENUM!{enum FS_INFORMATION_CLASS { 778 FileFsVolumeInformation = 1, 779 FileFsLabelInformation = 2, 780 FileFsSizeInformation = 3, 781 FileFsDeviceInformation = 4, 782 FileFsAttributeInformation = 5, 783 FileFsControlInformation = 6, 784 FileFsFullSizeInformation = 7, 785 FileFsObjectIdInformation = 8, 786 FileFsDriverPathInformation = 9, 787 FileFsVolumeFlagsInformation = 10, 788 FileFsSectorSizeInformation = 11, 789 FileFsDataCopyInformation = 12, 790 FileFsMetadataSizeInformation = 13, 791 FileFsFullSizeInformationEx = 14, 792 FileFsMaximumInformation = 15, 793 }} 794 pub type PFS_INFORMATION_CLASS = *mut FS_INFORMATION_CLASS; 795 STRUCT!{struct FILE_FS_LABEL_INFORMATION { 796 VolumeLabelLength: ULONG, 797 VolumeLabel: [WCHAR; 1], 798 }} 799 pub type PFILE_FS_LABEL_INFORMATION = *mut FILE_FS_LABEL_INFORMATION; 800 STRUCT!{struct FILE_FS_VOLUME_INFORMATION { 801 VolumeCreationTime: LARGE_INTEGER, 802 VolumeSerialNumber: ULONG, 803 VolumeLabelLength: ULONG, 804 SupportsObjects: BOOLEAN, 805 VolumeLabel: [WCHAR; 1], 806 }} 807 pub type PFILE_FS_VOLUME_INFORMATION = *mut FILE_FS_VOLUME_INFORMATION; 808 STRUCT!{struct FILE_FS_SIZE_INFORMATION { 809 TotalAllocationUnits: LARGE_INTEGER, 810 AvailableAllocationUnits: LARGE_INTEGER, 811 SectorsPerAllocationUnit: ULONG, 812 BytesPerSector: ULONG, 813 }} 814 pub type PFILE_FS_SIZE_INFORMATION = *mut FILE_FS_SIZE_INFORMATION; 815 STRUCT!{struct FILE_FS_CONTROL_INFORMATION { 816 FreeSpaceStartFiltering: LARGE_INTEGER, 817 FreeSpaceThreshold: LARGE_INTEGER, 818 FreeSpaceStopFiltering: LARGE_INTEGER, 819 DefaultQuotaThreshold: LARGE_INTEGER, 820 DefaultQuotaLimit: LARGE_INTEGER, 821 FileSystemControlFlags: ULONG, 822 }} 823 pub type PFILE_FS_CONTROL_INFORMATION = *mut FILE_FS_CONTROL_INFORMATION; 824 STRUCT!{struct FILE_FS_FULL_SIZE_INFORMATION { 825 TotalAllocationUnits: LARGE_INTEGER, 826 CallerAvailableAllocationUnits: LARGE_INTEGER, 827 ActualAvailableAllocationUnits: LARGE_INTEGER, 828 SectorsPerAllocationUnit: ULONG, 829 BytesPerSector: ULONG, 830 }} 831 pub type PFILE_FS_FULL_SIZE_INFORMATION = *mut FILE_FS_FULL_SIZE_INFORMATION; 832 STRUCT!{struct FILE_FS_OBJECTID_INFORMATION { 833 ObjectId: [UCHAR; 16], 834 ExtendedInfo: [UCHAR; 48], 835 }} 836 pub type PFILE_FS_OBJECTID_INFORMATION = *mut FILE_FS_OBJECTID_INFORMATION; 837 STRUCT!{struct FILE_FS_DEVICE_INFORMATION { 838 DeviceType: DWORD, 839 Characteristics: ULONG, 840 }} 841 pub type PFILE_FS_DEVICE_INFORMATION = *mut FILE_FS_DEVICE_INFORMATION; 842 STRUCT!{struct FILE_FS_ATTRIBUTE_INFORMATION { 843 FileSystemAttributes: ULONG, 844 MaximumComponentNameLength: LONG, 845 FileSystemNameLength: ULONG, 846 FileSystemName: [WCHAR; 1], 847 }} 848 pub type PFILE_FS_ATTRIBUTE_INFORMATION = *mut FILE_FS_ATTRIBUTE_INFORMATION; 849 STRUCT!{struct FILE_FS_DRIVER_PATH_INFORMATION { 850 DriverInPath: BOOLEAN, 851 DriverNameLength: ULONG, 852 DriverName: [WCHAR; 1], 853 }} 854 pub type PFILE_FS_DRIVER_PATH_INFORMATION = *mut FILE_FS_DRIVER_PATH_INFORMATION; 855 STRUCT!{struct FILE_FS_VOLUME_FLAGS_INFORMATION { 856 Flags: ULONG, 857 }} 858 pub type PFILE_FS_VOLUME_FLAGS_INFORMATION = *mut FILE_FS_VOLUME_FLAGS_INFORMATION; 859 pub const SSINFO_FLAGS_ALIGNED_DEVICE: u32 = 0x00000001; 860 pub const SSINFO_FLAGS_PARTITION_ALIGNED_ON_DEVICE: u32 = 0x00000002; 861 pub const SSINFO_OFFSET_UNKNOWN: u32 = 0xffffffff; 862 STRUCT!{struct FILE_FS_SECTOR_SIZE_INFORMATION { 863 LogicalBytesPerSector: ULONG, 864 PhysicalBytesPerSectorForAtomicity: ULONG, 865 PhysicalBytesPerSectorForPerformance: ULONG, 866 FileSystemEffectivePhysicalBytesPerSectorForAtomicity: ULONG, 867 Flags: ULONG, 868 ByteOffsetForSectorAlignment: ULONG, 869 ByteOffsetForPartitionAlignment: ULONG, 870 }} 871 pub type PFILE_FS_SECTOR_SIZE_INFORMATION = *mut FILE_FS_SECTOR_SIZE_INFORMATION; 872 STRUCT!{struct FILE_FS_DATA_COPY_INFORMATION { 873 NumberOfCopies: ULONG, 874 }} 875 pub type PFILE_FS_DATA_COPY_INFORMATION = *mut FILE_FS_DATA_COPY_INFORMATION; 876 STRUCT!{struct FILE_FS_METADATA_SIZE_INFORMATION { 877 TotalMetadataAllocationUnits: LARGE_INTEGER, 878 SectorsPerAllocationUnit: ULONG, 879 BytesPerSector: ULONG, 880 }} 881 pub type PFILE_FS_METADATA_SIZE_INFORMATION = *mut FILE_FS_METADATA_SIZE_INFORMATION; 882 STRUCT!{struct FILE_FS_FULL_SIZE_INFORMATION_EX { 883 ActualTotalAllocationUnits: ULONGLONG, 884 ActualAvailableAllocationUnits: ULONGLONG, 885 ActualPoolUnavailableAllocationUnits: ULONGLONG, 886 CallerTotalAllocationUnits: ULONGLONG, 887 CallerAvailableAllocationUnits: ULONGLONG, 888 CallerPoolUnavailableAllocationUnits: ULONGLONG, 889 UsedAllocationUnits: ULONGLONG, 890 TotalReservedAllocationUnits: ULONGLONG, 891 VolumeStorageReserveAllocationUnits: ULONGLONG, 892 AvailableCommittedAllocationUnits: ULONGLONG, 893 PoolAvailableAllocationUnits: ULONGLONG, 894 SectorsPerAllocationUnit: ULONG, 895 BytesPerSector: ULONG, 896 }} 897 pub type PFILE_FS_FULL_SIZE_INFORMATION_EX = *mut FILE_FS_FULL_SIZE_INFORMATION_EX; 898 EXTERN!{extern "system" { 899 fn NtCreateFile( 900 FileHandle: PHANDLE, 901 DesiredAccess: ACCESS_MASK, 902 ObjectAttributes: POBJECT_ATTRIBUTES, 903 IoStatusBlock: PIO_STATUS_BLOCK, 904 AllocationSize: PLARGE_INTEGER, 905 FileAttributes: ULONG, 906 ShareAccess: ULONG, 907 CreateDisposition: ULONG, 908 CreateOptions: ULONG, 909 EaBuffer: PVOID, 910 EaLength: ULONG, 911 ) -> NTSTATUS; 912 fn NtCreateNamedPipeFile( 913 FileHandle: PHANDLE, 914 DesiredAccess: ULONG, 915 ObjectAttributes: POBJECT_ATTRIBUTES, 916 IoStatusBlock: PIO_STATUS_BLOCK, 917 ShareAccess: ULONG, 918 CreateDisposition: ULONG, 919 CreateOptions: ULONG, 920 NamedPipeType: ULONG, 921 ReadMode: ULONG, 922 CompletionMode: ULONG, 923 MaximumInstances: ULONG, 924 InboundQuota: ULONG, 925 OutboundQuota: ULONG, 926 DefaultTimeout: PLARGE_INTEGER, 927 ) -> NTSTATUS; 928 fn NtCreateMailslotFile( 929 FileHandle: PHANDLE, 930 DesiredAccess: ULONG, 931 ObjectAttributes: POBJECT_ATTRIBUTES, 932 IoStatusBlock: PIO_STATUS_BLOCK, 933 CreateOptions: ULONG, 934 MailslotQuota: ULONG, 935 MaximumMessageSize: ULONG, 936 ReadTimeout: PLARGE_INTEGER, 937 ) -> NTSTATUS; 938 fn NtOpenFile( 939 FileHandle: PHANDLE, 940 DesiredAccess: ACCESS_MASK, 941 ObjectAttributes: POBJECT_ATTRIBUTES, 942 IoStatusBlock: PIO_STATUS_BLOCK, 943 ShareAccess: ULONG, 944 OpenOptions: ULONG, 945 ) -> NTSTATUS; 946 fn NtDeleteFile( 947 ObjectAttributes: POBJECT_ATTRIBUTES, 948 ) -> NTSTATUS; 949 fn NtFlushBuffersFile( 950 FileHandle: HANDLE, 951 IoStatusBlock: PIO_STATUS_BLOCK, 952 ) -> NTSTATUS; 953 fn NtFlushBuffersFileEx( 954 FileHandle: HANDLE, 955 Flags: ULONG, 956 Parameters: PVOID, 957 ParametersSize: ULONG, 958 IoStatusBlock: PIO_STATUS_BLOCK, 959 ) -> NTSTATUS; 960 fn NtQueryInformationFile( 961 FileHandle: HANDLE, 962 IoStatusBlock: PIO_STATUS_BLOCK, 963 FileInformation: PVOID, 964 Length: ULONG, 965 FileInformationClass: FILE_INFORMATION_CLASS, 966 ) -> NTSTATUS; 967 fn NtQueryInformationByName( 968 ObjectAttributes: POBJECT_ATTRIBUTES, 969 IoStatusBlock: PIO_STATUS_BLOCK, 970 FileInformation: PVOID, 971 Length: ULONG, 972 FileInformationClass: FILE_INFORMATION_CLASS, 973 ) -> NTSTATUS; 974 fn NtSetInformationFile( 975 FileHandle: HANDLE, 976 IoStatusBlock: PIO_STATUS_BLOCK, 977 FileInformation: PVOID, 978 Length: ULONG, 979 FileInformationClass: FILE_INFORMATION_CLASS, 980 ) -> NTSTATUS; 981 fn NtQueryDirectoryFile( 982 FileHandle: HANDLE, 983 Event: HANDLE, 984 ApcRoutine: PIO_APC_ROUTINE, 985 ApcContext: PVOID, 986 IoStatusBlock: PIO_STATUS_BLOCK, 987 FileInformation: PVOID, 988 Length: ULONG, 989 FileInformationClass: FILE_INFORMATION_CLASS, 990 ReturnSingleEntry: BOOLEAN, 991 FileName: PUNICODE_STRING, 992 RestartScan: BOOLEAN, 993 ) -> NTSTATUS; 994 fn NtQueryEaFile( 995 FileHandle: HANDLE, 996 IoStatusBlock: PIO_STATUS_BLOCK, 997 Buffer: PVOID, 998 Length: ULONG, 999 ReturnSingleEntry: BOOLEAN, 1000 EaList: PVOID, 1001 EaListLength: ULONG, 1002 EaIndex: PULONG, 1003 RestartScan: BOOLEAN, 1004 ) -> NTSTATUS; 1005 fn NtSetEaFile( 1006 FileHandle: HANDLE, 1007 IoStatusBlock: PIO_STATUS_BLOCK, 1008 Buffer: PVOID, 1009 Length: ULONG, 1010 ) -> NTSTATUS; 1011 fn NtQueryQuotaInformationFile( 1012 FileHandle: HANDLE, 1013 IoStatusBlock: PIO_STATUS_BLOCK, 1014 Buffer: PVOID, 1015 Length: ULONG, 1016 ReturnSingleEntry: BOOLEAN, 1017 SidList: PVOID, 1018 SidListLength: ULONG, 1019 StartSid: PSID, 1020 RestartScan: BOOLEAN, 1021 ) -> NTSTATUS; 1022 fn NtSetQuotaInformationFile( 1023 FileHandle: HANDLE, 1024 IoStatusBlock: PIO_STATUS_BLOCK, 1025 Buffer: PVOID, 1026 Length: ULONG, 1027 ) -> NTSTATUS; 1028 fn NtQueryVolumeInformationFile( 1029 FileHandle: HANDLE, 1030 IoStatusBlock: PIO_STATUS_BLOCK, 1031 FsInformation: PVOID, 1032 Length: ULONG, 1033 FsInformationClass: FS_INFORMATION_CLASS, 1034 ) -> NTSTATUS; 1035 fn NtSetVolumeInformationFile( 1036 FileHandle: HANDLE, 1037 IoStatusBlock: PIO_STATUS_BLOCK, 1038 FsInformation: PVOID, 1039 Length: ULONG, 1040 FsInformationClass: FS_INFORMATION_CLASS, 1041 ) -> NTSTATUS; 1042 fn NtCancelIoFile( 1043 FileHandle: HANDLE, 1044 IoStatusBlock: PIO_STATUS_BLOCK, 1045 ) -> NTSTATUS; 1046 fn NtCancelIoFileEx( 1047 FileHandle: HANDLE, 1048 IoRequestToCancel: PIO_STATUS_BLOCK, 1049 IoStatusBlock: PIO_STATUS_BLOCK, 1050 ) -> NTSTATUS; 1051 fn NtCancelSynchronousIoFile( 1052 ThreadHandle: HANDLE, 1053 IoRequestToCancel: PIO_STATUS_BLOCK, 1054 IoStatusBlock: PIO_STATUS_BLOCK, 1055 ) -> NTSTATUS; 1056 fn NtDeviceIoControlFile( 1057 FileHandle: HANDLE, 1058 Event: HANDLE, 1059 ApcRoutine: PIO_APC_ROUTINE, 1060 ApcContext: PVOID, 1061 IoStatusBlock: PIO_STATUS_BLOCK, 1062 IoControlCode: ULONG, 1063 InputBuffer: PVOID, 1064 InputBufferLength: ULONG, 1065 OutputBuffer: PVOID, 1066 OutputBufferLength: ULONG, 1067 ) -> NTSTATUS; 1068 fn NtFsControlFile( 1069 FileHandle: HANDLE, 1070 Event: HANDLE, 1071 ApcRoutine: PIO_APC_ROUTINE, 1072 ApcContext: PVOID, 1073 IoStatusBlock: PIO_STATUS_BLOCK, 1074 FsControlCode: ULONG, 1075 InputBuffer: PVOID, 1076 InputBufferLength: ULONG, 1077 OutputBuffer: PVOID, 1078 OutputBufferLength: ULONG, 1079 ) -> NTSTATUS; 1080 fn NtReadFile( 1081 FileHandle: HANDLE, 1082 Event: HANDLE, 1083 ApcRoutine: PIO_APC_ROUTINE, 1084 ApcContext: PVOID, 1085 IoStatusBlock: PIO_STATUS_BLOCK, 1086 Buffer: PVOID, 1087 Length: ULONG, 1088 ByteOffset: PLARGE_INTEGER, 1089 Key: PULONG, 1090 ) -> NTSTATUS; 1091 fn NtWriteFile( 1092 FileHandle: HANDLE, 1093 Event: HANDLE, 1094 ApcRoutine: PIO_APC_ROUTINE, 1095 ApcContext: PVOID, 1096 IoStatusBlock: PIO_STATUS_BLOCK, 1097 Buffer: PVOID, 1098 Length: ULONG, 1099 ByteOffset: PLARGE_INTEGER, 1100 Key: PULONG, 1101 ) -> NTSTATUS; 1102 fn NtReadFileScatter( 1103 FileHandle: HANDLE, 1104 Event: HANDLE, 1105 ApcRoutine: PIO_APC_ROUTINE, 1106 ApcContext: PVOID, 1107 IoStatusBlock: PIO_STATUS_BLOCK, 1108 SegmentArray: PFILE_SEGMENT_ELEMENT, 1109 Length: ULONG, 1110 ByteOffset: PLARGE_INTEGER, 1111 Key: PULONG, 1112 ) -> NTSTATUS; 1113 fn NtWriteFileGather( 1114 FileHandle: HANDLE, 1115 Event: HANDLE, 1116 ApcRoutine: PIO_APC_ROUTINE, 1117 ApcContext: PVOID, 1118 IoStatusBlock: PIO_STATUS_BLOCK, 1119 SegmentArray: PFILE_SEGMENT_ELEMENT, 1120 Length: ULONG, 1121 ByteOffset: PLARGE_INTEGER, 1122 Key: PULONG, 1123 ) -> NTSTATUS; 1124 fn NtLockFile( 1125 FileHandle: HANDLE, 1126 Event: HANDLE, 1127 ApcRoutine: PIO_APC_ROUTINE, 1128 ApcContext: PVOID, 1129 IoStatusBlock: PIO_STATUS_BLOCK, 1130 ByteOffset: PLARGE_INTEGER, 1131 Length: PLARGE_INTEGER, 1132 Key: ULONG, 1133 FailImmediately: BOOLEAN, 1134 ExclusiveLock: BOOLEAN, 1135 ) -> NTSTATUS; 1136 fn NtUnlockFile( 1137 FileHandle: HANDLE, 1138 IoStatusBlock: PIO_STATUS_BLOCK, 1139 ByteOffset: PLARGE_INTEGER, 1140 Length: PLARGE_INTEGER, 1141 Key: ULONG, 1142 ) -> NTSTATUS; 1143 fn NtQueryAttributesFile( 1144 ObjectAttributes: POBJECT_ATTRIBUTES, 1145 FileInformation: PFILE_BASIC_INFORMATION, 1146 ) -> NTSTATUS; 1147 fn NtQueryFullAttributesFile( 1148 ObjectAttributes: POBJECT_ATTRIBUTES, 1149 FileInformation: PFILE_NETWORK_OPEN_INFORMATION, 1150 ) -> NTSTATUS; 1151 fn NtNotifyChangeDirectoryFile( 1152 FileHandle: HANDLE, 1153 Event: HANDLE, 1154 ApcRoutine: PIO_APC_ROUTINE, 1155 ApcContext: PVOID, 1156 IoStatusBlock: PIO_STATUS_BLOCK, 1157 Buffer: PVOID, 1158 Length: ULONG, 1159 CompletionFilter: ULONG, 1160 WatchTree: BOOLEAN, 1161 ) -> NTSTATUS; 1162 fn NtLoadDriver( 1163 DriverServiceName: PUNICODE_STRING, 1164 ) -> NTSTATUS; 1165 fn NtUnloadDriver( 1166 DriverServiceName: PUNICODE_STRING, 1167 ) -> NTSTATUS; 1168 }} 1169 pub const IO_COMPLETION_QUERY_STATE: u32 = 0x0001; 1170 ENUM!{enum IO_COMPLETION_INFORMATION_CLASS { 1171 IoCompletionBasicInformation = 0, 1172 }} 1173 STRUCT!{struct IO_COMPLETION_BASIC_INFORMATION { 1174 Depth: LONG, 1175 }} 1176 pub type PIO_COMPLETION_BASIC_INFORMATION = *mut IO_COMPLETION_BASIC_INFORMATION; 1177 EXTERN!{extern "system" { 1178 fn NtCreateIoCompletion( 1179 IoCompletionHandle: PHANDLE, 1180 DesiredAccess: ACCESS_MASK, 1181 ObjectAttributes: POBJECT_ATTRIBUTES, 1182 Count: ULONG, 1183 ) -> NTSTATUS; 1184 fn NtOpenIoCompletion( 1185 IoCompletionHandle: PHANDLE, 1186 DesiredAccess: ACCESS_MASK, 1187 ObjectAttributes: POBJECT_ATTRIBUTES, 1188 ) -> NTSTATUS; 1189 fn NtQueryIoCompletion( 1190 IoCompletionHandle: HANDLE, 1191 IoCompletionInformationClass: IO_COMPLETION_INFORMATION_CLASS, 1192 IoCompletionInformation: PVOID, 1193 IoCompletionInformationLength: ULONG, 1194 ReturnLength: PULONG, 1195 ) -> NTSTATUS; 1196 fn NtSetIoCompletion( 1197 IoCompletionHandle: HANDLE, 1198 KeyContext: PVOID, 1199 ApcContext: PVOID, 1200 IoStatus: NTSTATUS, 1201 IoStatusInformation: ULONG_PTR, 1202 ) -> NTSTATUS; 1203 fn NtSetIoCompletionEx( 1204 IoCompletionHandle: HANDLE, 1205 IoCompletionPacketHandle: HANDLE, 1206 KeyContext: PVOID, 1207 ApcContext: PVOID, 1208 IoStatus: NTSTATUS, 1209 IoStatusInformation: ULONG_PTR, 1210 ) -> NTSTATUS; 1211 fn NtRemoveIoCompletion( 1212 IoCompletionHandle: HANDLE, 1213 KeyContext: *mut PVOID, 1214 ApcContext: *mut PVOID, 1215 IoStatusBlock: PIO_STATUS_BLOCK, 1216 Timeout: PLARGE_INTEGER, 1217 ) -> NTSTATUS; 1218 fn NtRemoveIoCompletionEx( 1219 IoCompletionHandle: HANDLE, 1220 IoCompletionInformation: PFILE_IO_COMPLETION_INFORMATION, 1221 Count: ULONG, 1222 NumEntriesRemoved: PULONG, 1223 Timeout: PLARGE_INTEGER, 1224 Alertable: BOOLEAN, 1225 ) -> NTSTATUS; 1226 fn NtCreateWaitCompletionPacket( 1227 WaitCompletionPacketHandle: PHANDLE, 1228 DesiredAccess: ACCESS_MASK, 1229 ObjectAttributes: POBJECT_ATTRIBUTES, 1230 ) -> NTSTATUS; 1231 fn NtAssociateWaitCompletionPacket( 1232 WaitCompletionPacketHandle: HANDLE, 1233 IoCompletionHandle: HANDLE, 1234 TargetObjectHandle: HANDLE, 1235 KeyContext: PVOID, 1236 ApcContext: PVOID, 1237 IoStatus: NTSTATUS, 1238 IoStatusInformation: ULONG_PTR, 1239 AlreadySignaled: PBOOLEAN, 1240 ) -> NTSTATUS; 1241 fn NtCancelWaitCompletionPacket( 1242 WaitCompletionPacketHandle: HANDLE, 1243 RemoveSignaledPacket: BOOLEAN, 1244 ) -> NTSTATUS; 1245 }} 1246 ENUM!{enum IO_SESSION_EVENT { 1247 IoSessionEventIgnore = 0, 1248 IoSessionEventCreated = 1, 1249 IoSessionEventTerminated = 2, 1250 IoSessionEventConnected = 3, 1251 IoSessionEventDisconnected = 4, 1252 IoSessionEventLogon = 5, 1253 IoSessionEventLogoff = 6, 1254 IoSessionEventMax = 7, 1255 }} 1256 ENUM!{enum IO_SESSION_STATE { 1257 IoSessionStateCreated = 0, 1258 IoSessionStateInitialized = 1, 1259 IoSessionStateConnected = 2, 1260 IoSessionStateDisconnected = 3, 1261 IoSessionStateDisconnectedLoggedOn = 4, 1262 IoSessionStateLoggedOn = 5, 1263 IoSessionStateLoggedOff = 6, 1264 IoSessionStateTerminated = 7, 1265 IoSessionStateMax = 8, 1266 }} 1267 EXTERN!{extern "system" { 1268 fn NtNotifyChangeSession( 1269 SessionHandle: HANDLE, 1270 ChangeSequenceNumber: ULONG, 1271 ChangeTimeStamp: PLARGE_INTEGER, 1272 Event: IO_SESSION_EVENT, 1273 NewState: IO_SESSION_STATE, 1274 PreviousState: IO_SESSION_STATE, 1275 Payload: PVOID, 1276 PayloadSize: ULONG, 1277 ) -> NTSTATUS; 1278 }} 1279 ENUM!{enum INTERFACE_TYPE { 1280 InterfaceTypeUndefined = -1i32 as u32, 1281 Internal = 0, 1282 Isa = 1, 1283 Eisa = 2, 1284 MicroChannel = 3, 1285 TurboChannel = 4, 1286 PCIBus = 5, 1287 VMEBus = 6, 1288 NuBus = 7, 1289 PCMCIABus = 8, 1290 CBus = 9, 1291 MPIBus = 10, 1292 MPSABus = 11, 1293 ProcessorInternal = 12, 1294 InternalPowerBus = 13, 1295 PNPISABus = 14, 1296 PNPBus = 15, 1297 Vmcs = 16, 1298 MaximumInterfaceType = 17, 1299 }} 1300 pub type PINTERFACE_TYPE = *mut INTERFACE_TYPE; 1301 ENUM!{enum DMA_WIDTH { 1302 Width8Bits = 0, 1303 Width16Bits = 1, 1304 Width32Bits = 2, 1305 MaximumDmaWidth = 3, 1306 }} 1307 pub type PDMA_WIDTH = *mut DMA_WIDTH; 1308 ENUM!{enum DMA_SPEED { 1309 Compatible = 0, 1310 TypeA = 1, 1311 TypeB = 2, 1312 TypeC = 3, 1313 TypeF = 4, 1314 MaximumDmaSpeed = 5, 1315 }} 1316 pub type PDMA_SPEED = *mut DMA_SPEED; 1317 ENUM!{enum BUS_DATA_TYPE { 1318 ConfigurationSpaceUndefined = -1i32 as u32, 1319 Cmos = 0, 1320 EisaConfiguration = 1, 1321 Pos = 2, 1322 CbusConfiguration = 3, 1323 PCIConfiguration = 4, 1324 VMEConfiguration = 5, 1325 NuBusConfiguration = 6, 1326 PCMCIAConfiguration = 7, 1327 MPIConfiguration = 8, 1328 MPSAConfiguration = 9, 1329 PNPISAConfiguration = 10, 1330 SgiInternalConfiguration = 11, 1331 MaximumBusDataType = 12, 1332 }} 1333 pub type PBUS_DATA_TYPE = *mut BUS_DATA_TYPE; 1334 pub const SYMLINK_FLAG_RELATIVE: u32 = 1; 1335 STRUCT!{struct REPARSE_DATA_BUFFER_u_SymbolicLinkReparseBuffer { 1336 SubstituteNameOffset: USHORT, 1337 SubstituteNameLength: USHORT, 1338 PrintNameOffset: USHORT, 1339 PrintNameLength: USHORT, 1340 Flags: ULONG, 1341 PathBuffer: [WCHAR; 1], 1342 }} 1343 STRUCT!{struct REPARSE_DATA_BUFFER_u_MountPointReparseBuffer { 1344 SubstituteNameOffset: USHORT, 1345 SubstituteNameLength: USHORT, 1346 PrintNameOffset: USHORT, 1347 PrintNameLength: USHORT, 1348 PathBuffer: [WCHAR; 1], 1349 }} 1350 STRUCT!{struct REPARSE_DATA_BUFFER_u_GenericReparseBuffer { 1351 DataBuffer: [UCHAR; 1], 1352 }} 1353 UNION!{union REPARSE_DATA_BUFFER_u { 1354 SymbolicLinkReparseBuffer: REPARSE_DATA_BUFFER_u_SymbolicLinkReparseBuffer, 1355 MountPointReparseBuffer: REPARSE_DATA_BUFFER_u_MountPointReparseBuffer, 1356 GenericReparseBuffer: REPARSE_DATA_BUFFER_u_GenericReparseBuffer, 1357 }} 1358 STRUCT!{struct REPARSE_DATA_BUFFER { 1359 ReparseTag: ULONG, 1360 ReparseDataLength: USHORT, 1361 Reserved: USHORT, 1362 u: REPARSE_DATA_BUFFER_u, 1363 }} 1364 pub type PREPARSE_DATA_BUFFER = *mut REPARSE_DATA_BUFFER; 1365 /// "\Device\NamedPipe\" 1366 pub const DEVICE_NAMED_PIPE: UTF16Const = UTF16Const(&[ 1367 0x005C, 0x0044, 0x0065, 0x0076, 0x0069, 0x0063, 0x0065, 0x005C, 0x004E, 0x0061, 0x006D, 0x0065, 1368 0x0064, 0x0050, 0x0069, 0x0070, 0x0065, 0x005C, 0u16, 1369 ]); 1370 pub const FSCTL_PIPE_ASSIGN_EVENT: u32 = 1371 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS); 1372 pub const FSTL_PIPE_DISCONNECT: u32 = 1373 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS); 1374 pub const FSTL_PIPE_LISTEN: u32 = 1375 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS); 1376 pub const FSTL_PIPE_PEEK: u32 = 1377 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA); 1378 pub const FSTL_PIPE_QUERY_EVENT: u32 = 1379 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS); 1380 pub const FSTL_PIPE_TRANSCEIVE: u32 = 1381 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA); 1382 pub const FSTL_PIPE_WAIT: u32 = 1383 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS); 1384 pub const FSTL_PIPE_IMPERSONATE: u32 = 1385 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS); 1386 pub const FSTL_PIPE_SET_CLIENT_PROCESS: u32 = 1387 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS); 1388 pub const FSTL_PIPE_QUERY_CLIENT_PROCESS: u32 = 1389 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS); 1390 pub const FSTL_PIPE_GET_PIPE_ATTRIBUTE: u32 = 1391 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 10, METHOD_BUFFERED, FILE_ANY_ACCESS); 1392 pub const FSTL_PIPE_SET_PIPE_ATTRIBUTE: u32 = 1393 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 11, METHOD_BUFFERED, FILE_ANY_ACCESS); 1394 pub const FSTL_PIPE_GET_CONNECTION_ATTRIBUTE: u32 = 1395 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 12, METHOD_BUFFERED, FILE_ANY_ACCESS); 1396 pub const FSTL_PIPE_SET_CONNECTION_ATTRIBUTE: u32 = 1397 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 13, METHOD_BUFFERED, FILE_ANY_ACCESS); 1398 pub const FSTL_PIPE_GET_HANDLE_ATTRIBUTE: u32 = 1399 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 14, METHOD_BUFFERED, FILE_ANY_ACCESS); 1400 pub const FSTL_PIPE_SET_HANDLE_ATTRIBUTE: u32 = 1401 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 15, METHOD_BUFFERED, FILE_ANY_ACCESS); 1402 pub const FSTL_PIPE_FLUSH: u32 = 1403 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 16, METHOD_BUFFERED, FILE_WRITE_DATA); 1404 pub const FSTL_PIPE_INTERNAL_READ: u32 = 1405 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA); 1406 pub const FSTL_PIPE_INTERNAL_WRITE: u32 = 1407 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA); 1408 pub const FSTL_PIPE_INTERNAL_TRANSCEIVE: u32 = 1409 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA); 1410 pub const FSTL_PIPE_INTERNAL_READ_OVFLOW: u32 = 1411 CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA); 1412 pub const FILE_PIPE_READ_DATA: u32 = 0x00000000; 1413 pub const FILE_PIPE_WRITE_SPACE: u32 = 0x00000001; 1414 STRUCT!{struct FILE_PIPE_ASSIGN_EVENT_BUFFER { 1415 EventHandle: HANDLE, 1416 KeyValue: ULONG, 1417 }} 1418 pub type PFILE_PIPE_ASSIGN_EVENT_BUFFER = *mut FILE_PIPE_ASSIGN_EVENT_BUFFER; 1419 STRUCT!{struct FILE_PIPE_PEEK_BUFFER { 1420 NamedPipeState: ULONG, 1421 ReadDataAvailable: ULONG, 1422 NumberOfMessages: ULONG, 1423 MessageLength: ULONG, 1424 Data: [CHAR; 1], 1425 }} 1426 pub type PFILE_PIPE_PEEK_BUFFER = *mut FILE_PIPE_PEEK_BUFFER; 1427 STRUCT!{struct FILE_PIPE_EVENT_BUFFER { 1428 NamedPipeState: ULONG, 1429 EntryType: ULONG, 1430 ByteCount: ULONG, 1431 KeyValue: ULONG, 1432 NumberRequests: ULONG, 1433 }} 1434 pub type PFILE_PIPE_EVENT_BUFFER = *mut FILE_PIPE_EVENT_BUFFER; 1435 STRUCT!{struct FILE_PIPE_WAIT_FOR_BUFFER { 1436 Timeout: LARGE_INTEGER, 1437 NameLength: ULONG, 1438 TimeoutSpecified: BOOLEAN, 1439 Name: [WCHAR; 1], 1440 }} 1441 pub type PFILE_PIPE_WAIT_FOR_BUFFER = *mut FILE_PIPE_WAIT_FOR_BUFFER; 1442 STRUCT!{struct FILE_PIPE_CLIENT_PROCESS_BUFFER { 1443 ClientSession: PVOID, 1444 ClientProcess: PVOID, 1445 }} 1446 pub type PFILE_PIPE_CLIENT_PROCESS_BUFFER = *mut FILE_PIPE_CLIENT_PROCESS_BUFFER; 1447 pub const FILE_PIPE_COMPUTER_NAME_LENGTH: usize = 15; 1448 STRUCT!{struct FILE_PIPE_CLIENT_PROCESS_BUFFER_EX { 1449 ClientSession: PVOID, 1450 ClientProcess: PVOID, 1451 ClientComputerNameLength: USHORT, 1452 ClientComputerBuffer: [WCHAR; FILE_PIPE_COMPUTER_NAME_LENGTH + 1], 1453 }} 1454 pub type PFILE_PIPE_CLIENT_PROCESS_BUFFER_EX = *mut FILE_PIPE_CLIENT_PROCESS_BUFFER_EX; 1455 pub const MAILSLOT_CLASS_FIRSTCLASS: u32 = 1; 1456 pub const MAILSLOT_CLASS_SECONDCLASS: u32 = 2; 1457 pub const FSCTL_MAILSLOT_PEEK: u32 = 1458 CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA); 1459 STRUCT!{struct FILE_MAILSLOT_PEEK_BUFFER { 1460 ReadDataAvailable: ULONG, 1461 NumberOfMessages: ULONG, 1462 MessageLength: ULONG, 1463 }} 1464 pub type PFILE_MAILSLOT_PEEK_BUFFER = *mut FILE_MAILSLOT_PEEK_BUFFER; 1465