summaryrefslogtreecommitdiffstats
path: root/public/sdk/inc/ntioapi.h
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--public/sdk/inc/ntioapi.h2002
1 files changed, 2002 insertions, 0 deletions
diff --git a/public/sdk/inc/ntioapi.h b/public/sdk/inc/ntioapi.h
new file mode 100644
index 000000000..056ca2521
--- /dev/null
+++ b/public/sdk/inc/ntioapi.h
@@ -0,0 +1,2002 @@
+/*++ BUILD Version: 0006 // Increment this if a change has global effects
+
+Copyright (c) 1989-1993 Microsoft Corporation
+
+Module Name:
+
+ ntioapi.h
+
+Abstract:
+
+ This module contains the user APIs for the NT I/O system.
+
+Author:
+
+ Darryl E. Havens (darrylh) 12-Apr-1989
+
+
+Revision History:
+
+
+--*/
+
+#ifndef _NTIOAPI_
+#define _NTIOAPI_
+
+//
+// This file contains io definitions that must be portable across operating
+// systems (i.e. DOS)
+//
+
+#include <devioctl.h>
+
+// begin_ntddk begin_nthal
+
+// begin_winnt
+
+//
+// Define access rights to files and directories
+//
+
+//
+// The FILE_READ_DATA and FILE_WRITE_DATA constants are also defined in
+// devioctl.h as FILE_READ_ACCESS and FILE_WRITE_ACCESS. The values for these
+// constants *MUST* always be in sync.
+// The values are redefined in devioctl.h because they must be available to
+// both DOS and NT.
+//
+
+#define FILE_READ_DATA ( 0x0001 ) // file & pipe
+#define FILE_LIST_DIRECTORY ( 0x0001 ) // directory
+
+#define FILE_WRITE_DATA ( 0x0002 ) // file & pipe
+#define FILE_ADD_FILE ( 0x0002 ) // directory
+
+#define FILE_APPEND_DATA ( 0x0004 ) // file
+#define FILE_ADD_SUBDIRECTORY ( 0x0004 ) // directory
+#define FILE_CREATE_PIPE_INSTANCE ( 0x0004 ) // named pipe
+
+#define FILE_READ_EA ( 0x0008 ) // file & directory
+
+#define FILE_WRITE_EA ( 0x0010 ) // file & directory
+
+#define FILE_EXECUTE ( 0x0020 ) // file
+#define FILE_TRAVERSE ( 0x0020 ) // directory
+
+#define FILE_DELETE_CHILD ( 0x0040 ) // directory
+
+#define FILE_READ_ATTRIBUTES ( 0x0080 ) // all
+
+#define FILE_WRITE_ATTRIBUTES ( 0x0100 ) // all
+
+#define FILE_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED | SYNCHRONIZE | 0x1FF)
+
+#define FILE_GENERIC_READ (STANDARD_RIGHTS_READ |\
+ FILE_READ_DATA |\
+ FILE_READ_ATTRIBUTES |\
+ FILE_READ_EA |\
+ SYNCHRONIZE)
+
+
+#define FILE_GENERIC_WRITE (STANDARD_RIGHTS_WRITE |\
+ FILE_WRITE_DATA |\
+ FILE_WRITE_ATTRIBUTES |\
+ FILE_WRITE_EA |\
+ FILE_APPEND_DATA |\
+ SYNCHRONIZE)
+
+
+#define FILE_GENERIC_EXECUTE (STANDARD_RIGHTS_EXECUTE |\
+ FILE_READ_ATTRIBUTES |\
+ FILE_EXECUTE |\
+ SYNCHRONIZE)
+
+// end_winnt
+
+
+//
+// Define share access rights to files and directories
+//
+
+#define FILE_SHARE_READ 0x00000001 // winnt
+#define FILE_SHARE_WRITE 0x00000002 // winnt
+#define FILE_SHARE_DELETE 0x00000004 // winnt
+#define FILE_SHARE_VALID_FLAGS 0x00000007
+
+//
+// Define the file attributes values
+//
+// Note: 0x00000008 is reserved for use for the old DOS VOLID (volume ID)
+// and is therefore not considered valid in NT.
+//
+// Note: 0x00000010 is reserved for use for the old DOS SUBDIRECTORY flag
+// and is therefore not considered valid in NT. This flag has
+// been disassociated with file attributes since the other flags are
+// protected with READ_ and WRITE_ATTRIBUTES access to the file.
+//
+// Note: Note also that the order of these flags is set to allow both the
+// FAT and the Pinball File Systems to directly set the attributes
+// flags in attributes words without having to pick each flag out
+// individually. The order of these flags should not be changed!
+//
+
+#define FILE_ATTRIBUTE_READONLY 0x00000001 // winnt
+#define FILE_ATTRIBUTE_HIDDEN 0x00000002 // winnt
+#define FILE_ATTRIBUTE_SYSTEM 0x00000004 // winnt
+#define FILE_ATTRIBUTE_DIRECTORY 0x00000010 // winnt
+#define FILE_ATTRIBUTE_ARCHIVE 0x00000020 // winnt
+#define FILE_ATTRIBUTE_NORMAL 0x00000080 // winnt
+#define FILE_ATTRIBUTE_TEMPORARY 0x00000100 // winnt
+#define FILE_ATTRIBUTE_RESERVED0 0x00000200
+#define FILE_ATTRIBUTE_RESERVED1 0x00000400
+#define FILE_ATTRIBUTE_COMPRESSED 0x00000800 // winnt
+#define FILE_ATTRIBUTE_OFFLINE 0x00001000 // winnt
+#define FILE_ATTRIBUTE_PROPERTY_SET 0x00002000
+#define FILE_ATTRIBUTE_VALID_FLAGS 0x00003fb7
+#define FILE_ATTRIBUTE_VALID_SET_FLAGS 0x00003fa7
+
+//
+// Define the create disposition values
+//
+
+#define FILE_SUPERSEDE 0x00000000
+#define FILE_OPEN 0x00000001
+#define FILE_CREATE 0x00000002
+#define FILE_OPEN_IF 0x00000003
+#define FILE_OVERWRITE 0x00000004
+#define FILE_OVERWRITE_IF 0x00000005
+#define FILE_MAXIMUM_DISPOSITION 0x00000005
+
+// end_ntddk end_nthal
+
+//
+// Storage types to be created
+//
+
+typedef enum _FILE_STORAGE_TYPE {
+ StorageTypeDefault = 1,
+ StorageTypeDirectory = 2,
+ StorageTypeFile = 3,
+ StorageTypeJunctionPoint = 5,
+ StorageTypeCatalog = 6,
+ StorageTypeStructuredStorage= 7,
+ StorageTypeEmbedding = 8,
+ StorageTypeStream = 9
+} FILE_STORAGE_TYPE;
+
+// begin_ntddk begin_nthal
+
+//
+// Define the create/open option flags
+//
+
+#define FILE_DIRECTORY_FILE 0x00000001
+#define FILE_WRITE_THROUGH 0x00000002
+#define FILE_SEQUENTIAL_ONLY 0x00000004
+#define FILE_NO_INTERMEDIATE_BUFFERING 0x00000008
+
+#define FILE_SYNCHRONOUS_IO_ALERT 0x00000010
+#define FILE_SYNCHRONOUS_IO_NONALERT 0x00000020
+#define FILE_NON_DIRECTORY_FILE 0x00000040
+#define FILE_CREATE_TREE_CONNECTION 0x00000080
+
+#define FILE_COMPLETE_IF_OPLOCKED 0x00000100
+#define FILE_NO_EA_KNOWLEDGE 0x00000200
+//UNUSED 0x00000400
+#define FILE_RANDOM_ACCESS 0x00000800
+
+#define FILE_DELETE_ON_CLOSE 0x00001000
+#define FILE_OPEN_BY_FILE_ID 0x00002000
+#define FILE_OPEN_FOR_BACKUP_INTENT 0x00004000
+#define FILE_NO_COMPRESSION 0x00008000
+
+// end_ntddk end_nthal
+#define FILE_STORAGE_TYPE_SPECIFIED 0x00000041 // FILE_DIRECTORY_FILE | FILE_NON_DIRECTORY_FILE
+#define FILE_STORAGE_TYPE_DEFAULT (StorageTypeDefault << FILE_STORAGE_TYPE_SHIFT)
+#define FILE_STORAGE_TYPE_DIRECTORY (StorageTypeDirectory << FILE_STORAGE_TYPE_SHIFT)
+#define FILE_STORAGE_TYPE_FILE (StorageTypeFile << FILE_STORAGE_TYPE_SHIFT)
+#define FILE_STORAGE_TYPE_DOCFILE (StorageTypeDocfile << FILE_STORAGE_TYPE_SHIFT)
+#define FILE_STORAGE_TYPE_JUNCTION_POINT (StorageTypeJunctionPoint << FILE_STORAGE_TYPE_SHIFT)
+#define FILE_STORAGE_TYPE_CATALOG (StorageTypeCatalog << FILE_STORAGE_TYPE_SHIFT)
+#define FILE_STORAGE_TYPE_STRUCTURED_STORAGE (StorageTypeStructuredStorage << FILE_STORAGE_TYPE_SHIFT)
+#define FILE_STORAGE_TYPE_EMBEDDING (StorageTypeEmbedding << FILE_STORAGE_TYPE_SHIFT)
+#define FILE_STORAGE_TYPE_STREAM (StorageTypeStream << FILE_STORAGE_TYPE_SHIFT)
+#define FILE_MINIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_DEFAULT
+#define FILE_MAXIMUM_STORAGE_TYPE FILE_STORAGE_TYPE_STREAM
+#define FILE_STORAGE_TYPE_MASK 0x000f0000
+#define FILE_STORAGE_TYPE_SHIFT 16
+
+// begin_ntddk begin_nthal
+
+#define FILE_RESERVE_OPFILTER 0x00100000
+#define FILE_TRANSACTED_MODE 0x00200000
+#define FILE_OPEN_OFFLINE_FILE 0x00400000
+
+#define FILE_VALID_OPTION_FLAGS 0x007fffff
+#define FILE_VALID_PIPE_OPTION_FLAGS 0x00000032
+#define FILE_VALID_MAILSLOT_OPTION_FLAGS 0x00000032
+#define FILE_VALID_SET_FLAGS 0x00000036
+
+//
+// Define the I/O status information return values for NtCreateFile/NtOpenFile
+//
+
+#define FILE_SUPERSEDED 0x00000000
+#define FILE_OPENED 0x00000001
+#define FILE_CREATED 0x00000002
+#define FILE_OVERWRITTEN 0x00000003
+#define FILE_EXISTS 0x00000004
+#define FILE_DOES_NOT_EXIST 0x00000005
+
+// end_ntddk end_nthal
+
+//
+// Define the I/O status information return values for requests for oplocks
+// via NtFsControlFile
+//
+
+#define FILE_OPLOCK_BROKEN_TO_LEVEL_2 0x00000007
+#define FILE_OPLOCK_BROKEN_TO_NONE 0x00000008
+
+//
+// Define the I/O status information return values for NtCreateFile/NtOpenFile
+// when the sharing access fails but a batch oplock break is in progress
+//
+
+#define FILE_OPBATCH_BREAK_UNDERWAY 0x00000009
+
+//
+// Define the filter flags for NtNotifyChangeDirectoryFile
+//
+
+#define FILE_NOTIFY_CHANGE_FILE_NAME 0x00000001 // winnt
+#define FILE_NOTIFY_CHANGE_DIR_NAME 0x00000002 // winnt
+#define FILE_NOTIFY_CHANGE_NAME 0x00000003
+#define FILE_NOTIFY_CHANGE_ATTRIBUTES 0x00000004 // winnt
+#define FILE_NOTIFY_CHANGE_SIZE 0x00000008 // winnt
+#define FILE_NOTIFY_CHANGE_LAST_WRITE 0x00000010 // winnt
+#define FILE_NOTIFY_CHANGE_LAST_ACCESS 0x00000020 // winnt
+#define FILE_NOTIFY_CHANGE_CREATION 0x00000040 // winnt
+#define FILE_NOTIFY_CHANGE_EA 0x00000080
+#define FILE_NOTIFY_CHANGE_SECURITY 0x00000100 // winnt
+#define FILE_NOTIFY_CHANGE_STREAM_NAME 0x00000200
+#define FILE_NOTIFY_CHANGE_STREAM_SIZE 0x00000400
+#define FILE_NOTIFY_CHANGE_STREAM_WRITE 0x00000800
+#define FILE_NOTIFY_VALID_MASK 0x00000fff
+
+//
+// Define the file action type codes for NtNotifyChangeDirectoryFile
+//
+
+#define FILE_ACTION_ADDED 0x00000001 // winnt
+#define FILE_ACTION_REMOVED 0x00000002 // winnt
+#define FILE_ACTION_MODIFIED 0x00000003 // winnt
+#define FILE_ACTION_RENAMED_OLD_NAME 0x00000004 // winnt
+#define FILE_ACTION_RENAMED_NEW_NAME 0x00000005 // winnt
+#define FILE_ACTION_ADDED_STREAM 0x00000006
+#define FILE_ACTION_REMOVED_STREAM 0x00000007
+#define FILE_ACTION_MODIFIED_STREAM 0x00000008
+
+//
+// Define the NamedPipeType flags for NtCreateNamedPipeFile
+//
+
+#define FILE_PIPE_BYTE_STREAM_TYPE 0x00000000
+#define FILE_PIPE_MESSAGE_TYPE 0x00000001
+
+//
+// Define the ReadMode flags for NtCreateNamedPipeFile
+//
+
+#define FILE_PIPE_BYTE_STREAM_MODE 0x00000000
+#define FILE_PIPE_MESSAGE_MODE 0x00000001
+
+//
+// Define the CompletionMode flags for NtCreateNamedPipeFile
+//
+
+#define FILE_PIPE_QUEUE_OPERATION 0x00000000
+#define FILE_PIPE_COMPLETE_OPERATION 0x00000001
+
+//
+// Define the NamedPipeConfiguration flags for NtQueryInformation
+//
+
+#define FILE_PIPE_INBOUND 0x00000000
+#define FILE_PIPE_OUTBOUND 0x00000001
+#define FILE_PIPE_FULL_DUPLEX 0x00000002
+
+//
+// Define the NamedPipeState flags for NtQueryInformation
+//
+
+#define FILE_PIPE_DISCONNECTED_STATE 0x00000001
+#define FILE_PIPE_LISTENING_STATE 0x00000002
+#define FILE_PIPE_CONNECTED_STATE 0x00000003
+#define FILE_PIPE_CLOSING_STATE 0x00000004
+
+//
+// Define the NamedPipeEnd flags for NtQueryInformation
+//
+
+#define FILE_PIPE_CLIENT_END 0x00000000
+#define FILE_PIPE_SERVER_END 0x00000001
+
+//
+// Special values for mailslot information.
+//
+
+//
+// Special value for NextMessageSize to indicate that there is no next
+// message.
+//
+
+#define MAILSLOT_NO_MESSAGE ((ULONG)-1) // winnt
+
+//
+// Special value for mailslot size creation to indicate that MSFS should
+// choose the size of the mailslot buffer.
+//
+
+#define MAILSLOT_SIZE_AUTO 0
+
+//
+// Special value for read timeout to indicate that mailslot reads should
+// never timeout.
+//
+
+#define MAILSLOT_WAIT_FOREVER ((ULONG)-1) // winnt
+
+// begin_ntddk begin_nthal
+//
+// Define special ByteOffset parameters for read and write operations
+//
+
+#define FILE_WRITE_TO_END_OF_FILE 0xffffffff
+#define FILE_USE_FILE_POINTER_POSITION 0xfffffffe
+
+//
+// Define alignment requirement values
+//
+
+#define FILE_BYTE_ALIGNMENT 0x00000000
+#define FILE_WORD_ALIGNMENT 0x00000001
+#define FILE_LONG_ALIGNMENT 0x00000003
+#define FILE_QUAD_ALIGNMENT 0x00000007
+#define FILE_OCTA_ALIGNMENT 0x0000000f
+#define FILE_32_BYTE_ALIGNMENT 0x0000001f
+#define FILE_64_BYTE_ALIGNMENT 0x0000003f
+#define FILE_128_BYTE_ALIGNMENT 0x0000007f
+#define FILE_256_BYTE_ALIGNMENT 0x000000ff
+#define FILE_512_BYTE_ALIGNMENT 0x000001ff
+
+//
+// Define the maximum length of a filename string
+//
+
+#define MAXIMUM_FILENAME_LENGTH 256
+
+// end_ntddk end_nthal
+
+//
+// Define the file system attributes flags
+//
+
+#define FILE_CASE_SENSITIVE_SEARCH 0x00000001 // winnt
+#define FILE_CASE_PRESERVED_NAMES 0x00000002 // winnt
+#define FILE_UNICODE_ON_DISK 0x00000004 // winnt
+#define FILE_PERSISTENT_ACLS 0x00000008 // winnt
+#define FILE_FILE_COMPRESSION 0x00000010 // winnt
+#define FILE_VOLUME_IS_COMPRESSED 0x00008000 // winnt
+
+//
+// Define the flags for NtSet(Query)EaFile service structure entries
+//
+
+#define FILE_NEED_EA 0x00000080
+
+//
+// Define EA type values
+//
+
+#define FILE_EA_TYPE_BINARY 0xfffe
+#define FILE_EA_TYPE_ASCII 0xfffd
+#define FILE_EA_TYPE_BITMAP 0xfffb
+#define FILE_EA_TYPE_METAFILE 0xfffa
+#define FILE_EA_TYPE_ICON 0xfff9
+#define FILE_EA_TYPE_EA 0xffee
+#define FILE_EA_TYPE_MVMT 0xffdf
+#define FILE_EA_TYPE_MVST 0xffde
+#define FILE_EA_TYPE_ASN1 0xffdd
+#define FILE_EA_TYPE_FAMILY_IDS 0xff01
+
+// begin_ntddk begin_nthal
+//
+// Define the various device characteristics flags
+//
+
+#define FILE_REMOVABLE_MEDIA 0x00000001
+#define FILE_READ_ONLY_DEVICE 0x00000002
+#define FILE_FLOPPY_DISKETTE 0x00000004
+#define FILE_WRITE_ONCE_MEDIA 0x00000008
+#define FILE_REMOTE_DEVICE 0x00000010
+#define FILE_DEVICE_IS_MOUNTED 0x00000020
+#define FILE_VIRTUAL_VOLUME 0x00000040
+
+// end_ntddk end_nthal
+
+// begin_ntddk begin_nthal
+//
+// Define the base asynchronous I/O argument types
+//
+
+typedef struct _IO_STATUS_BLOCK {
+ NTSTATUS Status;
+ ULONG Information;
+} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
+
+//
+// Define an Asynchronous Procedure Call from I/O viewpoint
+//
+
+typedef
+VOID
+(*PIO_APC_ROUTINE) (
+ IN PVOID ApcContext,
+ IN PIO_STATUS_BLOCK IoStatusBlock,
+ IN ULONG Reserved
+ );
+
+// end_ntddk end_nthal
+
+// begin_winnt
+
+//
+// Define the file notification information structure
+//
+
+typedef struct _FILE_NOTIFY_INFORMATION {
+ ULONG NextEntryOffset;
+ ULONG Action;
+ ULONG FileNameLength;
+ WCHAR FileName[1];
+} FILE_NOTIFY_INFORMATION, *PFILE_NOTIFY_INFORMATION;
+
+// end_winnt
+
+// begin_ntddk begin_nthal
+//
+// Define the file information class values
+//
+// WARNING: The order of the following values are assumed by the I/O system.
+// Any changes made here should be reflected there as well.
+//
+
+typedef enum _FILE_INFORMATION_CLASS {
+ FileDirectoryInformation = 1,
+ FileFullDirectoryInformation,
+ FileBothDirectoryInformation,
+ FileBasicInformation,
+ FileStandardInformation,
+ FileInternalInformation,
+ FileEaInformation,
+ FileAccessInformation,
+ FileNameInformation,
+ FileRenameInformation,
+ FileLinkInformation,
+ FileNamesInformation,
+ FileDispositionInformation,
+ FilePositionInformation,
+ FileFullEaInformation,
+ FileModeInformation,
+ FileAlignmentInformation,
+ FileAllInformation,
+ FileAllocationInformation,
+ FileEndOfFileInformation,
+ FileAlternateNameInformation,
+ FileStreamInformation,
+ FilePipeInformation,
+ FilePipeLocalInformation,
+ FilePipeRemoteInformation,
+ FileMailslotQueryInformation,
+ FileMailslotSetInformation,
+ FileCompressionInformation,
+ FileCopyOnWriteInformation,
+ FileCompletionInformation,
+ FileMoveClusterInformation,
+ FileOleClassIdInformation,
+ FileOleStateBitsInformation,
+ FileNetworkOpenInformation,
+ FileObjectIdInformation,
+ FileOleAllInformation,
+ FileOleDirectoryInformation,
+ FileContentIndexInformation,
+ FileInheritContentIndexInformation,
+ FileOleInformation,
+ FileMaximumInformation
+} FILE_INFORMATION_CLASS, *PFILE_INFORMATION_CLASS;
+
+//
+// Define the various structures which are returned on query operations
+//
+
+// end_ntddk end_nthal
+
+//
+// NtQueryDirectoryFile return types:
+//
+// FILE_DIRECTORY_INFORMATION
+// FILE_FULL_DIR_INFORMATION
+// FILE_BOTH_DIR_INFORMATION
+// FILE_NAMES_INFORMATION
+// FILE_OLE_DIR_INFORMATION
+//
+// NtQueryOleDirectoryFile return types:
+//
+// FILE_DIRECTORY_INFORMATION
+// FILE_OLE_DIR_INFORMATION
+//
+
+typedef struct _FILE_DIRECTORY_INFORMATION {
+ ULONG NextEntryOffset;
+ ULONG FileIndex;
+ LARGE_INTEGER CreationTime;
+ LARGE_INTEGER LastAccessTime;
+ LARGE_INTEGER LastWriteTime;
+ LARGE_INTEGER ChangeTime;
+ LARGE_INTEGER EndOfFile;
+ LARGE_INTEGER AllocationSize;
+ ULONG FileAttributes;
+ ULONG FileNameLength;
+ WCHAR FileName[1];
+} FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
+
+typedef struct _FILE_FULL_DIR_INFORMATION {
+ ULONG NextEntryOffset;
+ ULONG FileIndex;
+ LARGE_INTEGER CreationTime;
+ LARGE_INTEGER LastAccessTime;
+ LARGE_INTEGER LastWriteTime;
+ LARGE_INTEGER ChangeTime;
+ LARGE_INTEGER EndOfFile;
+ LARGE_INTEGER AllocationSize;
+ ULONG FileAttributes;
+ ULONG FileNameLength;
+ ULONG EaSize;
+ WCHAR FileName[1];
+} FILE_FULL_DIR_INFORMATION, *PFILE_FULL_DIR_INFORMATION;
+
+typedef struct _FILE_BOTH_DIR_INFORMATION {
+ ULONG NextEntryOffset;
+ ULONG FileIndex;
+ LARGE_INTEGER CreationTime;
+ LARGE_INTEGER LastAccessTime;
+ LARGE_INTEGER LastWriteTime;
+ LARGE_INTEGER ChangeTime;
+ LARGE_INTEGER EndOfFile;
+ LARGE_INTEGER AllocationSize;
+ ULONG FileAttributes;
+ ULONG FileNameLength;
+ ULONG EaSize;
+ CCHAR ShortNameLength;
+ WCHAR ShortName[12];
+ WCHAR FileName[1];
+} FILE_BOTH_DIR_INFORMATION, *PFILE_BOTH_DIR_INFORMATION;
+
+typedef struct _FILE_NAMES_INFORMATION {
+ ULONG NextEntryOffset;
+ ULONG FileIndex;
+ ULONG FileNameLength;
+ WCHAR FileName[1];
+} FILE_NAMES_INFORMATION, *PFILE_NAMES_INFORMATION;
+
+typedef struct _FILE_OLE_DIR_INFORMATION {
+ ULONG NextEntryOffset;
+ ULONG FileIndex;
+ LARGE_INTEGER CreationTime;
+ LARGE_INTEGER LastAccessTime;
+ LARGE_INTEGER LastWriteTime;
+ LARGE_INTEGER ChangeTime;
+ LARGE_INTEGER EndOfFile;
+ LARGE_INTEGER AllocationSize;
+ ULONG FileAttributes;
+ ULONG FileNameLength;
+ FILE_STORAGE_TYPE StorageType;
+ GUID OleClassId;
+ ULONG OleStateBits;
+ BOOLEAN ContentIndexDisable;
+ BOOLEAN InheritContentIndexDisable;
+ WCHAR FileName[1];
+} FILE_OLE_DIR_INFORMATION, *PFILE_OLE_DIR_INFORMATION;
+
+//
+// The following constants provide addition meta characters to fully
+// support the more obscure aspects of DOS wild card processing.
+//
+
+#define ANSI_DOS_STAR ('<')
+#define ANSI_DOS_QM ('>')
+#define ANSI_DOS_DOT ('"')
+
+#define DOS_STAR (L'<')
+#define DOS_QM (L'>')
+#define DOS_DOT (L'"')
+
+//
+// NtQuery(Set)InformationFile return types:
+//
+// FILE_BASIC_INFORMATION
+// FILE_STANDARD_INFORMATION
+// FILE_INTERNAL_INFORMATION
+// FILE_EA_INFORMATION
+// FILE_ACCESS_INFORMATION
+// FILE_POSITION_INFORMATION
+// FILE_MODE_INFORMATION
+// FILE_ALIGNMENT_INFORMATION
+// FILE_NAME_INFORMATION
+// FILE_ALL_INFORMATION
+//
+// FILE_NETWORK_OPEN_INFORMATION
+//
+// FILE_ALLOCATION_INFORMATION
+// FILE_COMPRESSION_INFORMATION
+// FILE_COPY_ON_WRITE_INFORMATION
+// FILE_DISPOSITION_INFORMATION
+// FILE_END_OF_FILE_INFORMATION
+// FILE_LINK_INFORMATION
+// FILE_MOVE_CLUSTER_INFORMATION
+// FILE_RENAME_INFORMATION
+// FILE_STREAM_INFORMATION
+// FILE_COMPLETION_INFORMATION
+//
+// FILE_OLE_CLASSID_INFORMATION
+// FILE_OLE_STATE_BITS_INFORMATION
+// FILE_OBJECTID_INFORMATION
+// FILE_OLE_INFORMATION
+// FILE_OLE_ALL_INFORMATION
+//
+// FILE_PIPE_INFORMATION
+// FILE_PIPE_LOCAL_INFORMATION
+// FILE_PIPE_REMOTE_INFORMATION
+//
+// FILE_MAILSLOT_QUERY_INFORMATION
+// FILE_MAILSLOT_SET_INFORMATION
+//
+
+typedef struct _FILE_BASIC_INFORMATION { // ntddk nthal
+ LARGE_INTEGER CreationTime; // ntddk nthal
+ LARGE_INTEGER LastAccessTime; // ntddk nthal
+ LARGE_INTEGER LastWriteTime; // ntddk nthal
+ LARGE_INTEGER ChangeTime; // ntddk nthal
+ ULONG FileAttributes; // ntddk nthal
+} FILE_BASIC_INFORMATION, *PFILE_BASIC_INFORMATION; // ntddk nthal
+ // ntddk nthal
+typedef struct _FILE_STANDARD_INFORMATION { // ntddk nthal
+ LARGE_INTEGER AllocationSize; // ntddk nthal
+ LARGE_INTEGER EndOfFile; // ntddk nthal
+ ULONG NumberOfLinks; // ntddk nthal
+ BOOLEAN DeletePending; // ntddk nthal
+ BOOLEAN Directory; // ntddk nthal
+} FILE_STANDARD_INFORMATION, *PFILE_STANDARD_INFORMATION; // ntddk nthal
+ // ntddk nthal
+typedef struct _FILE_INTERNAL_INFORMATION {
+ LARGE_INTEGER IndexNumber;
+} FILE_INTERNAL_INFORMATION, *PFILE_INTERNAL_INFORMATION;
+
+typedef struct _FILE_EA_INFORMATION {
+ ULONG EaSize;
+} FILE_EA_INFORMATION, *PFILE_EA_INFORMATION;
+
+typedef struct _FILE_ACCESS_INFORMATION {
+ ACCESS_MASK AccessFlags;
+} FILE_ACCESS_INFORMATION, *PFILE_ACCESS_INFORMATION;
+
+typedef struct _FILE_POSITION_INFORMATION { // ntddk nthal
+ LARGE_INTEGER CurrentByteOffset; // ntddk nthal
+} FILE_POSITION_INFORMATION, *PFILE_POSITION_INFORMATION; // ntddk nthal
+ // ntddk nthal
+typedef struct _FILE_MODE_INFORMATION {
+ ULONG Mode;
+} FILE_MODE_INFORMATION, *PFILE_MODE_INFORMATION;
+
+typedef struct _FILE_ALIGNMENT_INFORMATION { // ntddk nthal
+ ULONG AlignmentRequirement; // ntddk nthal
+} FILE_ALIGNMENT_INFORMATION, *PFILE_ALIGNMENT_INFORMATION; // ntddk nthal
+ // ntddk nthal
+typedef struct _FILE_NAME_INFORMATION {
+ ULONG FileNameLength;
+ WCHAR FileName[1];
+} FILE_NAME_INFORMATION, *PFILE_NAME_INFORMATION;
+
+typedef struct _FILE_ALL_INFORMATION {
+ FILE_BASIC_INFORMATION BasicInformation;
+ FILE_STANDARD_INFORMATION StandardInformation;
+ FILE_INTERNAL_INFORMATION InternalInformation;
+ FILE_EA_INFORMATION EaInformation;
+ FILE_ACCESS_INFORMATION AccessInformation;
+ FILE_POSITION_INFORMATION PositionInformation;
+ FILE_MODE_INFORMATION ModeInformation;
+ FILE_ALIGNMENT_INFORMATION AlignmentInformation;
+ FILE_NAME_INFORMATION NameInformation;
+} FILE_ALL_INFORMATION, *PFILE_ALL_INFORMATION;
+
+typedef struct _FILE_NETWORK_OPEN_INFORMATION { // ntddk nthal
+ LARGE_INTEGER CreationTime; // ntddk nthal
+ LARGE_INTEGER LastAccessTime; // ntddk nthal
+ LARGE_INTEGER LastWriteTime; // ntddk nthal
+ LARGE_INTEGER ChangeTime; // ntddk nthal
+ LARGE_INTEGER AllocationSize; // ntddk nthal
+ LARGE_INTEGER EndOfFile; // ntddk nthal
+ ULONG FileAttributes; // ntddk nthal
+} FILE_NETWORK_OPEN_INFORMATION, *PFILE_NETWORK_OPEN_INFORMATION; // ntddk nthal
+ // ntddk nthal
+typedef struct _FILE_ALLOCATION_INFORMATION {
+ LARGE_INTEGER AllocationSize;
+} FILE_ALLOCATION_INFORMATION, *PFILE_ALLOCATION_INFORMATION;
+
+typedef struct _FILE_COMPRESSION_INFORMATION {
+ LARGE_INTEGER CompressedFileSize;
+ USHORT CompressionFormat;
+ UCHAR CompressionUnitShift;
+ UCHAR ChunkShift;
+ UCHAR ClusterShift;
+ UCHAR Reserved[3];
+} FILE_COMPRESSION_INFORMATION, *PFILE_COMPRESSION_INFORMATION;
+
+typedef struct _FILE_COPY_ON_WRITE_INFORMATION {
+ BOOLEAN ReplaceIfExists;
+ HANDLE RootDirectory;
+ ULONG FileNameLength;
+ WCHAR FileName[1];
+} FILE_COPY_ON_WRITE_INFORMATION, *PFILE_COPY_ON_WRITE_INFORMATION;
+
+typedef struct _FILE_DISPOSITION_INFORMATION { // ntddk nthal
+ BOOLEAN DeleteFile; // ntddk nthal
+} FILE_DISPOSITION_INFORMATION, *PFILE_DISPOSITION_INFORMATION; // ntddk nthal
+ // ntddk nthal
+typedef struct _FILE_END_OF_FILE_INFORMATION { // ntddk nthal
+ LARGE_INTEGER EndOfFile; // ntddk nthal
+} FILE_END_OF_FILE_INFORMATION, *PFILE_END_OF_FILE_INFORMATION; // ntddk nthal
+ // ntddk nthal
+typedef struct _FILE_LINK_INFORMATION {
+ BOOLEAN ReplaceIfExists;
+ HANDLE RootDirectory;
+ ULONG FileNameLength;
+ WCHAR FileName[1];
+} FILE_LINK_INFORMATION, *PFILE_LINK_INFORMATION;
+
+typedef struct _FILE_MOVE_CLUSTER_INFORMATION {
+ ULONG ClusterCount;
+ HANDLE RootDirectory;
+ ULONG FileNameLength;
+ WCHAR FileName[1];
+} FILE_MOVE_CLUSTER_INFORMATION, *PFILE_MOVE_CLUSTER_INFORMATION;
+
+typedef struct _FILE_RENAME_INFORMATION {
+ BOOLEAN ReplaceIfExists;
+ HANDLE RootDirectory;
+ ULONG FileNameLength;
+ WCHAR FileName[1];
+} FILE_RENAME_INFORMATION, *PFILE_RENAME_INFORMATION;
+
+typedef struct _FILE_STREAM_INFORMATION {
+ ULONG NextEntryOffset;
+ ULONG StreamNameLength;
+ LARGE_INTEGER StreamSize;
+ LARGE_INTEGER StreamAllocationSize;
+ WCHAR StreamName[1];
+} FILE_STREAM_INFORMATION, *PFILE_STREAM_INFORMATION;
+
+typedef struct _FILE_COMPLETION_INFORMATION {
+ HANDLE Port;
+ ULONG Key;
+} FILE_COMPLETION_INFORMATION, *PFILE_COMPLETION_INFORMATION;
+
+typedef struct _FILE_OLE_CLASSID_INFORMATION {
+ GUID ClassId;
+} FILE_OLE_CLASSID_INFORMATION, *PFILE_OLE_CLASSID_INFORMATION;
+
+typedef struct _FILE_OLE_STATE_BITS_INFORMATION {
+ ULONG StateBits;
+ ULONG StateBitsMask;
+} FILE_OLE_STATE_BITS_INFORMATION, *PFILE_OLE_STATE_BITS_INFORMATION;
+
+typedef struct _FILE_OBJECTID_INFORMATION {
+ OBJECTID ObjectId;
+} FILE_OBJECTID_INFORMATION, *PFILE_OBJECTID_INFORMATION;
+
+typedef struct _FILE_OLE_INFORMATION {
+ LARGE_INTEGER SecurityChangeTime;
+ FILE_OLE_CLASSID_INFORMATION OleClassIdInformation;
+ FILE_OBJECTID_INFORMATION ObjectIdInformation;
+ FILE_STORAGE_TYPE StorageType;
+ ULONG OleStateBits;
+ BOOLEAN ContentIndexDisable;
+ BOOLEAN InheritContentIndexDisable;
+} FILE_OLE_INFORMATION, *PFILE_OLE_INFORMATION;
+
+typedef struct _FILE_OLE_ALL_INFORMATION {
+ FILE_BASIC_INFORMATION BasicInformation;
+ FILE_STANDARD_INFORMATION StandardInformation;
+ FILE_INTERNAL_INFORMATION InternalInformation;
+ FILE_EA_INFORMATION EaInformation;
+ FILE_ACCESS_INFORMATION AccessInformation;
+ FILE_POSITION_INFORMATION PositionInformation;
+ FILE_MODE_INFORMATION ModeInformation;
+ FILE_ALIGNMENT_INFORMATION AlignmentInformation;
+ USN LastChangeUsn;
+ USN ReplicationUsn;
+ LARGE_INTEGER SecurityChangeTime;
+ FILE_OLE_CLASSID_INFORMATION OleClassIdInformation;
+ FILE_OBJECTID_INFORMATION ObjectIdInformation;
+ FILE_STORAGE_TYPE StorageType;
+ ULONG OleStateBits;
+ ULONG OleId;
+ ULONG NumberOfStreamReferences;
+ ULONG StreamIndex;
+ ULONG SecurityId;
+ BOOLEAN ContentIndexDisable;
+ BOOLEAN InheritContentIndexDisable;
+ FILE_NAME_INFORMATION NameInformation;
+} FILE_OLE_ALL_INFORMATION, *PFILE_OLE_ALL_INFORMATION;
+
+typedef struct _FILE_PIPE_INFORMATION {
+ ULONG ReadMode;
+ ULONG CompletionMode;
+} FILE_PIPE_INFORMATION, *PFILE_PIPE_INFORMATION;
+
+typedef struct _FILE_PIPE_LOCAL_INFORMATION {
+ ULONG NamedPipeType;
+ ULONG NamedPipeConfiguration;
+ ULONG MaximumInstances;
+ ULONG CurrentInstances;
+ ULONG InboundQuota;
+ ULONG ReadDataAvailable;
+ ULONG OutboundQuota;
+ ULONG WriteQuotaAvailable;
+ ULONG NamedPipeState;
+ ULONG NamedPipeEnd;
+} FILE_PIPE_LOCAL_INFORMATION, *PFILE_PIPE_LOCAL_INFORMATION;
+
+typedef struct _FILE_PIPE_REMOTE_INFORMATION {
+ LARGE_INTEGER CollectDataTime;
+ ULONG MaximumCollectionCount;
+} FILE_PIPE_REMOTE_INFORMATION, *PFILE_PIPE_REMOTE_INFORMATION;
+
+typedef struct _FILE_MAILSLOT_QUERY_INFORMATION {
+ ULONG MaximumMessageSize;
+ ULONG MailslotQuota;
+ ULONG NextMessageSize;
+ ULONG MessagesAvailable;
+ LARGE_INTEGER ReadTimeout;
+} FILE_MAILSLOT_QUERY_INFORMATION, *PFILE_MAILSLOT_QUERY_INFORMATION;
+
+typedef struct _FILE_MAILSLOT_SET_INFORMATION {
+ PLARGE_INTEGER ReadTimeout;
+} FILE_MAILSLOT_SET_INFORMATION, *PFILE_MAILSLOT_SET_INFORMATION;
+
+
+//
+// NtQuery(Set)EaFile
+//
+// The offset for the start of EaValue is EaName[EaNameLength + 1]
+//
+
+// begin_ntddk
+
+typedef struct _FILE_FULL_EA_INFORMATION {
+ ULONG NextEntryOffset;
+ UCHAR Flags;
+ UCHAR EaNameLength;
+ USHORT EaValueLength;
+ CHAR EaName[1];
+} FILE_FULL_EA_INFORMATION, *PFILE_FULL_EA_INFORMATION;
+
+// end_ntddk
+
+typedef struct _FILE_GET_EA_INFORMATION {
+ ULONG NextEntryOffset;
+ UCHAR EaNameLength;
+ CHAR EaName[1];
+} FILE_GET_EA_INFORMATION, *PFILE_GET_EA_INFORMATION;
+
+//
+// NtQuery(Set)QuotaInformationFile
+//
+
+typedef struct _FILE_GET_QUOTA_INFORMATION {
+ ULONG NextEntryOffset;
+ ULONG SidLength;
+ SID Sid;
+} FILE_GET_QUOTA_INFORMATION, *PFILE_GET_QUOTA_INFORMATION;
+
+typedef struct _FILE_QUOTA_INFORMATION {
+ ULONG NextEntryOffset;
+ ULONG SidLength;
+ LARGE_INTEGER ChangeTime;
+ LARGE_INTEGER QuotaUsed;
+ LARGE_INTEGER QuotaThreshold;
+ LARGE_INTEGER QuotaLimit;
+ SID Sid;
+} FILE_QUOTA_INFORMATION, *PFILE_QUOTA_INFORMATION;
+
+// begin_ntddk begin_nthal
+//
+// Define the file system information class values
+//
+// WARNING: The order of the following values are assumed by the I/O system.
+// Any changes made here should be reflected there as well.
+
+typedef enum _FSINFOCLASS {
+ FileFsVolumeInformation = 1,
+ FileFsLabelInformation,
+ FileFsSizeInformation,
+ FileFsDeviceInformation,
+ FileFsAttributeInformation,
+ FileFsControlInformation,
+ FileFsQuotaQueryInformation, // temporary
+ FileFsQuotaSetInformation, // temporary
+ FileFsMaximumInformation
+} FS_INFORMATION_CLASS, *PFS_INFORMATION_CLASS;
+
+// end_ntddk end_nthal
+//
+// NtQuery[Set]VolumeInformationFile types:
+//
+// FILE_FS_LABEL_INFORMATION
+// FILE_FS_VOLUME_INFORMATION
+// FILE_FS_SIZE_INFORMATION
+// FILE_FS_DEVICE_INFORMATION
+// FILE_FS_ATTRIBUTE_INFORMATION
+// FILE_FS_CONTROL_INFORMATION
+//
+
+typedef struct _FILE_FS_LABEL_INFORMATION {
+ ULONG VolumeLabelLength;
+ WCHAR VolumeLabel[1];
+} FILE_FS_LABEL_INFORMATION, *PFILE_FS_LABEL_INFORMATION;
+
+typedef struct _FILE_FS_VOLUME_INFORMATION {
+ LARGE_INTEGER VolumeCreationTime;
+ ULONG VolumeSerialNumber;
+ ULONG VolumeLabelLength;
+ BOOLEAN SupportsObjects;
+ WCHAR VolumeLabel[1];
+} FILE_FS_VOLUME_INFORMATION, *PFILE_FS_VOLUME_INFORMATION;
+
+typedef struct _FILE_FS_SIZE_INFORMATION {
+ LARGE_INTEGER TotalAllocationUnits;
+ LARGE_INTEGER AvailableAllocationUnits;
+ ULONG SectorsPerAllocationUnit;
+ ULONG BytesPerSector;
+} FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
+
+typedef struct _FILE_FS_DEVICE_INFORMATION { // ntddk nthal
+ DEVICE_TYPE DeviceType; // ntddk nthal
+ ULONG Characteristics; // ntddk nthal
+} FILE_FS_DEVICE_INFORMATION, *PFILE_FS_DEVICE_INFORMATION; // ntddk nthal
+ // ntddk nthal
+typedef struct _FILE_FS_ATTRIBUTE_INFORMATION {
+ ULONG FileSystemAttributes;
+ LONG MaximumComponentNameLength;
+ ULONG FileSystemNameLength;
+ WCHAR FileSystemName[1];
+} FILE_FS_ATTRIBUTE_INFORMATION, *PFILE_FS_ATTRIBUTE_INFORMATION;
+
+//
+// File system control flags
+//
+
+#define FILE_VC_QUOTA_NONE 0x00000000
+#define FILE_VC_QUOTA_TRACK 0x00000001
+#define FILE_VC_QUOTA_ENFORCE 0x00000002
+#define FILE_VC_QUOTA_MASK 0x00000003
+
+#define FILE_VC_QUOTAS_LOG_VIOLATIONS 0x00000004
+#define FILE_VC_CONTENT_INDEX_DISABLED 0x00000008
+
+#define FILE_VC_LOG_QUOTA_THRESHOLD 0x00000010
+#define FILE_VC_LOG_QUOTA_LIMIT 0x00000020
+#define FILE_VC_LOG_VOLUME_THRESHOLD 0x00000040
+#define FILE_VC_LOG_VOLUME_LIMIT 0x00000080
+
+#define FILE_VC_QUOTAS_INCOMPLETE 0x00000100
+#define FILE_VC_QUOTAS_REBUILDING 0x00000200
+
+#define FILE_VC_VALID_MASK 0x000003ff
+
+typedef struct _FILE_FS_CONTROL_INFORMATION {
+ LARGE_INTEGER FreeSpaceStartFiltering;
+ LARGE_INTEGER FreeSpaceThreshold;
+ LARGE_INTEGER FreeSpaceStopFiltering;
+ LARGE_INTEGER DefaultQuotaThreshold;
+ LARGE_INTEGER DefaultQuotaLimit;
+ ULONG FileSystemControlFlags;
+} FILE_FS_CONTROL_INFORMATION, *PFILE_FS_CONTROL_INFORMATION;
+
+// begin_winnt begin_ntddk begin_nthal
+
+//
+// Define segement buffer structure for scatter/gather read/write.
+//
+
+typedef union _FILE_SEGMENT_ELEMENT {
+ PVOID Buffer;
+ ULONGLONG Alignment;
+}FILE_SEGMENT_ELEMENT, *PFILE_SEGMENT_ELEMENT;
+
+// end_winnt end_ntddk end_nthal
+
+//
+// I/O system user APIs
+//
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtCancelIoFile(
+ IN HANDLE FileHandle,
+ OUT PIO_STATUS_BLOCK IoStatusBlock
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtCreateFile(
+ OUT PHANDLE FileHandle,
+ IN ACCESS_MASK DesiredAccess,
+ IN POBJECT_ATTRIBUTES ObjectAttributes,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ IN PLARGE_INTEGER AllocationSize OPTIONAL,
+ IN ULONG FileAttributes,
+ IN ULONG ShareAccess,
+ IN ULONG CreateDisposition,
+ IN ULONG CreateOptions,
+ IN PVOID EaBuffer OPTIONAL,
+ IN ULONG EaLength
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtCreateNamedPipeFile(
+ OUT PHANDLE FileHandle,
+ IN ULONG DesiredAccess,
+ IN POBJECT_ATTRIBUTES ObjectAttributes,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ IN ULONG ShareAccess,
+ IN ULONG CreateDisposition,
+ IN ULONG CreateOptions,
+ IN ULONG NamedPipeType,
+ IN ULONG ReadMode,
+ IN ULONG CompletionMode,
+ IN ULONG MaximumInstances,
+ IN ULONG InboundQuota,
+ IN ULONG OutboundQuota,
+ IN PLARGE_INTEGER DefaultTimeout OPTIONAL
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtCreateMailslotFile(
+ OUT PHANDLE FileHandle,
+ IN ULONG DesiredAccess,
+ IN POBJECT_ATTRIBUTES ObjectAttributes,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ ULONG CreateOptions,
+ IN ULONG MailslotQuota,
+ IN ULONG MaximumMessageSize,
+ IN PLARGE_INTEGER ReadTimeout
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtDeleteFile(
+ IN POBJECT_ATTRIBUTES ObjectAttributes
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtDeviceIoControlFile(
+ IN HANDLE FileHandle,
+ IN HANDLE Event OPTIONAL,
+ IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
+ IN PVOID ApcContext OPTIONAL,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ IN ULONG IoControlCode,
+ IN PVOID InputBuffer OPTIONAL,
+ IN ULONG InputBufferLength,
+ OUT PVOID OutputBuffer OPTIONAL,
+ IN ULONG OutputBufferLength
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtFlushBuffersFile(
+ IN HANDLE FileHandle,
+ OUT PIO_STATUS_BLOCK IoStatusBlock
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtFsControlFile(
+ IN HANDLE FileHandle,
+ IN HANDLE Event OPTIONAL,
+ IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
+ IN PVOID ApcContext OPTIONAL,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ IN ULONG FsControlCode,
+ IN PVOID InputBuffer OPTIONAL,
+ IN ULONG InputBufferLength,
+ OUT PVOID OutputBuffer OPTIONAL,
+ IN ULONG OutputBufferLength
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtLockFile(
+ IN HANDLE FileHandle,
+ IN HANDLE Event OPTIONAL,
+ IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
+ IN PVOID ApcContext OPTIONAL,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ IN PLARGE_INTEGER ByteOffset,
+ IN PLARGE_INTEGER Length,
+ IN ULONG Key,
+ IN BOOLEAN FailImmediately,
+ IN BOOLEAN ExclusiveLock
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtNotifyChangeDirectoryFile(
+ IN HANDLE FileHandle,
+ IN HANDLE Event OPTIONAL,
+ IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
+ IN PVOID ApcContext OPTIONAL,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ OUT PVOID Buffer,
+ IN ULONG Length,
+ IN ULONG CompletionFilter,
+ IN BOOLEAN WatchTree
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtOpenFile(
+ OUT PHANDLE FileHandle,
+ IN ACCESS_MASK DesiredAccess,
+ IN POBJECT_ATTRIBUTES ObjectAttributes,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ IN ULONG ShareAccess,
+ IN ULONG OpenOptions
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtQueryAttributesFile(
+ IN POBJECT_ATTRIBUTES ObjectAttributes,
+ OUT PFILE_BASIC_INFORMATION FileInformation
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtQueryDirectoryFile(
+ IN HANDLE FileHandle,
+ IN HANDLE Event OPTIONAL,
+ IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
+ IN PVOID ApcContext OPTIONAL,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ OUT PVOID FileInformation,
+ IN ULONG Length,
+ IN FILE_INFORMATION_CLASS FileInformationClass,
+ IN BOOLEAN ReturnSingleEntry,
+ IN PUNICODE_STRING FileName OPTIONAL,
+ IN BOOLEAN RestartScan
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtQueryFullAttributesFile(
+ IN POBJECT_ATTRIBUTES ObjectAttributes,
+ OUT PFILE_NETWORK_OPEN_INFORMATION FileInformation
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtQueryOleDirectoryFile(
+ IN HANDLE FileHandle,
+ IN HANDLE Event OPTIONAL,
+ IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
+ IN PVOID ApcContext OPTIONAL,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ OUT PVOID FileInformation,
+ IN ULONG Length,
+ IN FILE_INFORMATION_CLASS FileInformationClass,
+ IN BOOLEAN ReturnSingleEntry,
+ IN PUNICODE_STRING FileName OPTIONAL,
+ IN BOOLEAN RestartScan
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtQueryEaFile(
+ IN HANDLE FileHandle,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ OUT PVOID Buffer,
+ IN ULONG Length,
+ IN BOOLEAN ReturnSingleEntry,
+ IN PVOID EaList OPTIONAL,
+ IN ULONG EaListLength,
+ IN PULONG EaIndex OPTIONAL,
+ IN BOOLEAN RestartScan
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtQueryInformationFile(
+ IN HANDLE FileHandle,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ OUT PVOID FileInformation,
+ IN ULONG Length,
+ IN FILE_INFORMATION_CLASS FileInformationClass
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtQueryQuotaInformationFile(
+ IN HANDLE FileHandle,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ OUT PVOID Buffer,
+ IN ULONG Length,
+ IN BOOLEAN ReturnSingleEntry,
+ IN PVOID SidList OPTIONAL,
+ IN ULONG SidListLength,
+ IN PSID StartSid OPTIONAL,
+ IN BOOLEAN RestartScan
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtQueryVolumeInformationFile(
+ IN HANDLE FileHandle,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ OUT PVOID FsInformation,
+ IN ULONG Length,
+ IN FS_INFORMATION_CLASS FsInformationClass
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtReadFile(
+ IN HANDLE FileHandle,
+ IN HANDLE Event OPTIONAL,
+ IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
+ IN PVOID ApcContext OPTIONAL,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ OUT PVOID Buffer,
+ IN ULONG Length,
+ IN PLARGE_INTEGER ByteOffset OPTIONAL,
+ IN PULONG Key OPTIONAL
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtReadFileScatter(
+ IN HANDLE FileHandle,
+ IN HANDLE Event OPTIONAL,
+ IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
+ IN PVOID ApcContext OPTIONAL,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ IN PFILE_SEGMENT_ELEMENT SegmentArray,
+ IN ULONG Length,
+ IN PLARGE_INTEGER ByteOffset OPTIONAL,
+ IN PULONG Key OPTIONAL
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtSetEaFile(
+ IN HANDLE FileHandle,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ IN PVOID Buffer,
+ IN ULONG Length
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtSetInformationFile(
+ IN HANDLE FileHandle,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ IN PVOID FileInformation,
+ IN ULONG Length,
+ IN FILE_INFORMATION_CLASS FileInformationClass
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtSetQuotaInformationFile(
+ IN HANDLE FileHandle,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ IN PVOID Buffer,
+ IN ULONG Length
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtSetVolumeInformationFile(
+ IN HANDLE FileHandle,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ IN PVOID FsInformation,
+ IN ULONG Length,
+ IN FS_INFORMATION_CLASS FsInformationClass
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtUnlockFile(
+ IN HANDLE FileHandle,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ IN PLARGE_INTEGER ByteOffset,
+ IN PLARGE_INTEGER Length,
+ IN ULONG Key
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtWriteFile(
+ IN HANDLE FileHandle,
+ IN HANDLE Event OPTIONAL,
+ IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
+ IN PVOID ApcContext OPTIONAL,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ IN PVOID Buffer,
+ IN ULONG Length,
+ IN PLARGE_INTEGER ByteOffset OPTIONAL,
+ IN PULONG Key OPTIONAL
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtWriteFileGather(
+ IN HANDLE FileHandle,
+ IN HANDLE Event OPTIONAL,
+ IN PIO_APC_ROUTINE ApcRoutine OPTIONAL,
+ IN PVOID ApcContext OPTIONAL,
+ OUT PIO_STATUS_BLOCK IoStatusBlock,
+ IN PFILE_SEGMENT_ELEMENT SegmentArray,
+ IN ULONG Length,
+ IN PLARGE_INTEGER ByteOffset OPTIONAL,
+ IN PULONG Key OPTIONAL
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtLoadDriver(
+ IN PUNICODE_STRING DriverServiceName
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtUnloadDriver(
+ IN PUNICODE_STRING DriverServiceName
+ );
+
+//
+// Macro definition for defining IOCTL and FSCTL function control codes. Note
+// that function codes 0-2047 are reserved for Microsoft Corporation, and
+// 2048-4095 are reserved for customers.
+//
+// These macros are defined in devioctl.h which contains the portable IO
+// definitions (for use by both DOS and NT)
+//
+
+//
+// The IoGetFunctionCodeFromCtlCode( ControlCode ) Macro is defined in io.h
+// This macro is used to extract the function code from an IOCTL (or FSCTL).
+// The macro can only be used in kernel mode code.
+//
+
+//
+// General File System control codes - Note that these values are valid
+// regardless of the actual file system type
+//
+
+//
+// IMPORTANT: These values have been arranged in order of increasing
+// control codes. Do NOT breaks this!! Add all new codes
+// at end of list regardless of functionality type.
+//
+// Note: FSCTL_QUERY_RETRIEVAL_POINTER and FSCTL_MARK_AS_SYSTEM_HIVE only
+// work from Kernel mode on local paging files or the system hives.
+//
+
+#define FSCTL_REQUEST_OPLOCK_LEVEL_1 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_REQUEST_OPLOCK_LEVEL_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_REQUEST_BATCH_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_OPLOCK_BREAK_ACKNOWLEDGE CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 3, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_OPBATCH_ACK_CLOSE_PENDING CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_OPLOCK_BREAK_NOTIFY CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 5, METHOD_BUFFERED, FILE_ANY_ACCESS)
+// begin_winioctl
+#define FSCTL_LOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_UNLOCK_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_DISMOUNT_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
+// end_winioctl
+#define FSCTL_SHUTDOWN_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_IS_VOLUME_MOUNTED CTL_CODE(FILE_DEVICE_FILE_SYSTEM,10, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_IS_PATHNAME_VALID CTL_CODE(FILE_DEVICE_FILE_SYSTEM,11, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_MARK_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM,12, METHOD_BUFFERED, FILE_ANY_ACCESS)
+// begin_winioctl
+#define FSCTL_MOUNT_DBLS_VOLUME CTL_CODE(FILE_DEVICE_FILE_SYSTEM,13, METHOD_BUFFERED, FILE_ANY_ACCESS)
+// end_winioctl
+#define FSCTL_QUERY_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM,14, METHOD_NEITHER, FILE_ANY_ACCESS)
+// begin_winioctl
+#define FSCTL_GET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,15, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_SET_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,16, METHOD_BUFFERED, FILE_READ_DATA | FILE_WRITE_DATA)
+#define FSCTL_READ_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,17, METHOD_NEITHER, FILE_READ_DATA)
+#define FSCTL_WRITE_COMPRESSION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,18, METHOD_NEITHER, FILE_WRITE_DATA)
+// end_winioctl
+#define FSCTL_MARK_AS_SYSTEM_HIVE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,19, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_OPLOCK_BREAK_ACK_NO_2 CTL_CODE(FILE_DEVICE_FILE_SYSTEM,20, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_INVALIDATE_VOLUMES CTL_CODE(FILE_DEVICE_FILE_SYSTEM,21, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_QUERY_FAT_BPB CTL_CODE(FILE_DEVICE_FILE_SYSTEM,22, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_REQUEST_FILTER_OPLOCK CTL_CODE(FILE_DEVICE_FILE_SYSTEM,23, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_FILESYSTEM_GET_STATISTICS CTL_CODE(FILE_DEVICE_FILE_SYSTEM,24, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+#if(_WIN32_WINNT >= 0x0400)
+#define FSCTL_GET_NTFS_VOLUME_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM,25, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_GET_NTFS_FILE_RECORD CTL_CODE(FILE_DEVICE_FILE_SYSTEM,26, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_GET_VOLUME_BITMAP CTL_CODE(FILE_DEVICE_FILE_SYSTEM,27, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_GET_RETRIEVAL_POINTERS CTL_CODE(FILE_DEVICE_FILE_SYSTEM,28, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_MOVE_FILE CTL_CODE(FILE_DEVICE_FILE_SYSTEM,29, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_IS_VOLUME_DIRTY CTL_CODE(FILE_DEVICE_FILE_SYSTEM,30, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_GET_HFS_INFORMATION CTL_CODE(FILE_DEVICE_FILE_SYSTEM,31, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_ALLOW_EXTENDED_DASD_IO CTL_CODE(FILE_DEVICE_FILE_SYSTEM,32, METHOD_NEITHER, FILE_ANY_ACCESS)
+#endif /* _WIN32_WINNT >= 0x0400 */
+
+#define FSCTL_READ_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM,32, METHOD_NEITHER, FILE_READ_DATA)
+#define FSCTL_WRITE_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM,33, METHOD_NEITHER, FILE_WRITE_DATA)
+#define FSCTL_READ_PROPERTY_STAT_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM,34, METHOD_NEITHER, FILE_READ_DATA)
+#define FSCTL_INITIALIZE_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM,35, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
+#define FSCTL_COMPACT_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM,36, METHOD_NEITHER, FILE_ANY_ACCESS)
+#define FSCTL_DUMP_PROPERTY_DATA CTL_CODE(FILE_DEVICE_FILE_SYSTEM,37, METHOD_NEITHER, FILE_ANY_ACCESS)
+
+//
+// Property control structures are defined in ntfsprop.h
+//
+
+//
+// Ofs and Content Index File System Control functions.
+//
+// FSCTLs 100 - 199 are reserved for OFS and are defined in iofs.h
+//
+
+//
+// Double Space control structure declarations
+//
+
+// Control structure for FSCTL_MOUNT_DBLS_VOLUME
+
+typedef struct _FILE_MOUNT_DBLS_BUFFER {
+ ULONG CvfNameLength;
+ WCHAR CvfName[1];
+} FILE_MOUNT_DBLS_BUFFER, *PFILE_MOUNT_DBLS_BUFFER;
+
+// Structure for FSCTL_QUERY_BPB_INFO
+
+typedef struct _FSCTL_QUERY_FAT_BPB_BUFFER {
+ UCHAR First0x24BytesOfBootSector[0x24];
+} FSCTL_QUERY_FAT_BPB_BUFFER, *PFSCTL_QUERY_FAT_BPB_BUFFER;
+
+#if(_WIN32_WINNT >= 0x0400)
+// Structure for FSCTL_GET_NTFS_VOLUME_DATA
+
+typedef struct {
+ LARGE_INTEGER VolumeSerialNumber;
+ LARGE_INTEGER NumberSectors;
+ LARGE_INTEGER TotalClusters;
+ LARGE_INTEGER FreeClusters;
+ LARGE_INTEGER TotalReserved;
+ ULONG BytesPerSector;
+ ULONG BytesPerCluster;
+ ULONG BytesPerFileRecordSegment;
+ ULONG ClustersPerFileRecordSegment;
+ LARGE_INTEGER MftValidDataLength;
+ LARGE_INTEGER MftStartLcn;
+ LARGE_INTEGER Mft2StartLcn;
+ LARGE_INTEGER MftZoneStart;
+ LARGE_INTEGER MftZoneEnd;
+} NTFS_VOLUME_DATA_BUFFER, *PNTFS_VOLUME_DATA_BUFFER;
+#endif /* _WIN32_WINNT >= 0x0400 */
+
+#if(_WIN32_WINNT >= 0x0400)
+// Structure for FSCTL_GET_VOLUME_BITMAP
+
+typedef struct {
+ LARGE_INTEGER StartingLcn;
+} STARTING_LCN_INPUT_BUFFER, *PSTARTING_LCN_INPUT_BUFFER;
+
+typedef struct {
+ LARGE_INTEGER StartingLcn;
+ LARGE_INTEGER BitmapSize;
+ UCHAR Buffer[1];
+} VOLUME_BITMAP_BUFFER, *PVOLUME_BITMAP_BUFFER;
+#endif /* _WIN32_WINNT >= 0x0400 */
+
+#if(_WIN32_WINNT >= 0x0400)
+// Structure for FSCTL_GET_RETRIEVAL_POINTERS
+
+typedef struct {
+ LARGE_INTEGER StartingVcn;
+} STARTING_VCN_INPUT_BUFFER, *PSTARTING_VCN_INPUT_BUFFER;
+
+typedef struct RETRIEVAL_POINTERS_BUFFER {
+ ULONG ExtentCount;
+ LARGE_INTEGER StartingVcn;
+ struct {
+ LARGE_INTEGER NextVcn;
+ LARGE_INTEGER Lcn;
+ } Extents[1];
+} RETRIEVAL_POINTERS_BUFFER, *PRETRIEVAL_POINTERS_BUFFER;
+#endif /* _WIN32_WINNT >= 0x0400 */
+
+#if(_WIN32_WINNT >= 0x0400)
+// Structures for FSCTL_GET_NTFS_FILE_RECORD
+
+typedef struct {
+ LARGE_INTEGER FileReferenceNumber;
+} NTFS_FILE_RECORD_INPUT_BUFFER, *PNTFS_FILE_RECORD_INPUT_BUFFER;
+
+typedef struct {
+ LARGE_INTEGER FileReferenceNumber;
+ ULONG FileRecordLength;
+ UCHAR FileRecordBuffer[1];
+} NTFS_FILE_RECORD_OUTPUT_BUFFER, *PNTFS_FILE_RECORD_OUTPUT_BUFFER;
+#endif /* _WIN32_WINNT >= 0x0400 */
+
+#if(_WIN32_WINNT >= 0x0400)
+// Structure for FSCTL_MOVE_FILE
+
+typedef struct {
+ HANDLE FileHandle;
+ LARGE_INTEGER StartingVcn;
+ LARGE_INTEGER StartingLcn;
+ ULONG ClusterCount;
+} MOVE_FILE_DATA, *PMOVE_FILE_DATA;
+#endif /* _WIN32_WINNT >= 0x0400 */
+
+#if(_WIN32_WINNT >= 0x0400)
+// Structure for FSCTL_GET_HFS_INFORMATION
+
+typedef struct {
+ UCHAR FinderInfo[32];
+} HFS_INFORMATION_BUFFER, *PHFS_INFORMATION_BUFFER;
+#endif /* _WIN32_WINNT >= 0x0400 */
+
+
+//
+// Filesystem performance counters
+//
+
+typedef struct _NTFS_STATISTICS {
+ ULONG LogFileFullExceptions;
+ ULONG OtherExceptions;
+
+ // Other meta data io's
+
+ ULONG MftReads;
+ ULONG MftReadBytes;
+ ULONG MftWrites;
+ ULONG MftWriteBytes;
+ struct {
+ USHORT Write;
+ USHORT Create;
+ USHORT SetInfo;
+ USHORT Flush;
+ } MftWritesUserLevel;
+
+ USHORT MftWritesFlushForLogFileFull;
+ USHORT MftWritesLazyWriter;
+ USHORT MftWritesUserRequest;
+
+ ULONG Mft2Writes;
+ ULONG Mft2WriteBytes;
+ struct {
+ USHORT Write;
+ USHORT Create;
+ USHORT SetInfo;
+ USHORT Flush;
+ } Mft2WritesUserLevel;
+
+ USHORT Mft2WritesFlushForLogFileFull;
+ USHORT Mft2WritesLazyWriter;
+ USHORT Mft2WritesUserRequest;
+
+ ULONG RootIndexReads;
+ ULONG RootIndexReadBytes;
+ ULONG RootIndexWrites;
+ ULONG RootIndexWriteBytes;
+
+ ULONG BitmapReads;
+ ULONG BitmapReadBytes;
+ ULONG BitmapWrites;
+ ULONG BitmapWriteBytes;
+
+ USHORT BitmapWritesFlushForLogFileFull;
+ USHORT BitmapWritesLazyWriter;
+ USHORT BitmapWritesUserRequest;
+
+ struct {
+ USHORT Write;
+ USHORT Create;
+ USHORT SetInfo;
+ } BitmapWritesUserLevel;
+
+ ULONG MftBitmapReads;
+ ULONG MftBitmapReadBytes;
+ ULONG MftBitmapWrites;
+ ULONG MftBitmapWriteBytes;
+
+ USHORT MftBitmapWritesFlushForLogFileFull;
+ USHORT MftBitmapWritesLazyWriter;
+ USHORT MftBitmapWritesUserRequest;
+
+ struct {
+ USHORT Write;
+ USHORT Create;
+ USHORT SetInfo;
+ USHORT Flush;
+ } MftBitmapWritesUserLevel;
+
+ ULONG UserIndexReads;
+ ULONG UserIndexReadBytes;
+ ULONG UserIndexWrites;
+ ULONG UserIndexWriteBytes;
+
+} NTFS_STATISTICS, *PNTFS_STATISTICS;
+
+typedef struct _FAT_STATISTICS {
+ ULONG CreateHits;
+ ULONG SuccessfulCreates;
+ ULONG FailedCreates;
+
+ ULONG NonCachedReads;
+ ULONG NonCachedReadBytes;
+ ULONG NonCachedWrites;
+ ULONG NonCachedWriteBytes;
+
+ ULONG NonCachedDiskReads;
+ ULONG NonCachedDiskWrites;
+
+} FAT_STATISTICS, *PFAT_STATISTICS;
+
+typedef struct _FILESYSTEM_STATISTICS {
+
+ USHORT FileSystemType;
+ USHORT Version; // currently version 1
+
+ ULONG UserFileReads;
+ ULONG UserFileReadBytes;
+ ULONG UserDiskReads;
+ ULONG UserFileWrites;
+ ULONG UserFileWriteBytes;
+ ULONG UserDiskWrites;
+
+ ULONG MetaDataReads;
+ ULONG MetaDataReadBytes;
+ ULONG MetaDataDiskReads;
+ ULONG MetaDataWrites;
+ ULONG MetaDataWriteBytes;
+ ULONG MetaDataDiskWrites;
+
+ union {
+ NTFS_STATISTICS Ntfs;
+ FAT_STATISTICS Fat;
+ };
+
+ ULONG Pad[11]; // pad to multiple of 64 bytes
+
+} FILESYSTEM_STATISTICS, *PFILESYSTEM_STATISTICS;
+
+// values for FS_STATISTICS.FileSystemType
+
+#define FILESYSTEM_STATISTICS_TYPE_NTFS 1
+#define FILESYSTEM_STATISTICS_TYPE_FAT 2
+
+//
+// Named Pipe file control code and structure declarations
+//
+
+//
+// External named pipe file control operations
+//
+
+#define FSCTL_PIPE_ASSIGN_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 0, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_DISCONNECT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 1, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_LISTEN CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_PEEK CTL_CODE(FILE_DEVICE_NAMED_PIPE, 3, METHOD_BUFFERED, FILE_READ_DATA)
+#define FSCTL_PIPE_QUERY_EVENT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 4, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 5, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
+#define FSCTL_PIPE_WAIT CTL_CODE(FILE_DEVICE_NAMED_PIPE, 6, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_IMPERSONATE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 7, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_SET_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 8, METHOD_BUFFERED, FILE_ANY_ACCESS)
+#define FSCTL_PIPE_QUERY_CLIENT_PROCESS CTL_CODE(FILE_DEVICE_NAMED_PIPE, 9, METHOD_BUFFERED, FILE_ANY_ACCESS)
+
+//
+// Internal named pipe file control operations
+//
+
+#define FSCTL_PIPE_INTERNAL_READ CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2045, METHOD_BUFFERED, FILE_READ_DATA)
+#define FSCTL_PIPE_INTERNAL_WRITE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2046, METHOD_BUFFERED, FILE_WRITE_DATA)
+#define FSCTL_PIPE_INTERNAL_TRANSCEIVE CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2047, METHOD_NEITHER, FILE_READ_DATA | FILE_WRITE_DATA)
+#define FSCTL_PIPE_INTERNAL_READ_OVFLOW CTL_CODE(FILE_DEVICE_NAMED_PIPE, 2048, METHOD_BUFFERED, FILE_READ_DATA)
+
+//
+// Define entry types for query event information
+//
+
+#define FILE_PIPE_READ_DATA 0x00000000
+#define FILE_PIPE_WRITE_SPACE 0x00000001
+
+//
+// Named pipe file system control structure declarations
+//
+
+// Control structure for FSCTL_PIPE_ASSIGN_EVENT
+
+typedef struct _FILE_PIPE_ASSIGN_EVENT_BUFFER {
+ HANDLE EventHandle;
+ ULONG KeyValue;
+} FILE_PIPE_ASSIGN_EVENT_BUFFER, *PFILE_PIPE_ASSIGN_EVENT_BUFFER;
+
+// Control structure for FSCTL_PIPE_PEEK
+
+typedef struct _FILE_PIPE_PEEK_BUFFER {
+ ULONG NamedPipeState;
+ ULONG ReadDataAvailable;
+ ULONG NumberOfMessages;
+ ULONG MessageLength;
+ CHAR Data[1];
+} FILE_PIPE_PEEK_BUFFER, *PFILE_PIPE_PEEK_BUFFER;
+
+// Control structure for FSCTL_PIPE_QUERY_EVENT
+
+typedef struct _FILE_PIPE_EVENT_BUFFER {
+ ULONG NamedPipeState;
+ ULONG EntryType;
+ ULONG ByteCount;
+ ULONG KeyValue;
+ ULONG NumberRequests;
+} FILE_PIPE_EVENT_BUFFER, *PFILE_PIPE_EVENT_BUFFER;
+
+// Control structure for FSCTL_PIPE_WAIT
+
+typedef struct _FILE_PIPE_WAIT_FOR_BUFFER {
+ LARGE_INTEGER Timeout;
+ ULONG NameLength;
+ BOOLEAN TimeoutSpecified;
+ WCHAR Name[1];
+} FILE_PIPE_WAIT_FOR_BUFFER, *PFILE_PIPE_WAIT_FOR_BUFFER;
+
+// Control structure for FSCTL_PIPE_SET_CLIENT_PROCESS and FSCTL_PIPE_QUERY_CLIENT_PROCESS
+
+typedef struct _FILE_PIPE_CLIENT_PROCESS_BUFFER {
+ PVOID ClientSession;
+ PVOID ClientProcess;
+} FILE_PIPE_CLIENT_PROCESS_BUFFER, *PFILE_PIPE_CLIENT_PROCESS_BUFFER;
+
+//
+// Mailslot file control code and structure definitions.
+//
+
+//
+// Mailslot classes.
+//
+
+#define MAILSLOT_CLASS_FIRSTCLASS 1
+#define MAILSLOT_CLASS_SECONDCLASS 2
+
+//
+// Mailslot file control operations.
+//
+
+#define FSCTL_MAILSLOT_PEEK CTL_CODE(FILE_DEVICE_MAILSLOT, 0, METHOD_NEITHER, FILE_READ_DATA)
+
+// Output control structure for FSCTL_MAILSLOT_PEEK
+
+typedef struct _FILE_MAILSLOT_PEEK_BUFFER {
+ ULONG ReadDataAvailable;
+ ULONG NumberOfMessages;
+ ULONG MessageLength;
+} FILE_MAILSLOT_PEEK_BUFFER, *PFILE_MAILSLOT_PEEK_BUFFER;
+
+//
+// Input parameters for FSCTL_IS_PATHNAME_VALID
+//
+
+typedef struct _PATHNAME_BUFFER {
+ ULONG PathNameLength;
+ WCHAR Name[1];
+} PATHNAME_BUFFER, *PPATHNAME_BUFFER;
+
+
+//
+// I/O Completion Specific Access Rights.
+//
+
+#define IO_COMPLETION_QUERY_STATE 0x0001
+#define IO_COMPLETION_MODIFY_STATE 0x0002 // winnt
+#define IO_COMPLETION_ALL_ACCESS (STANDARD_RIGHTS_REQUIRED|SYNCHRONIZE|0x3) // winnt
+
+//
+// I/O Completion Information Classes.
+//
+
+typedef enum _IO_COMPLETION_INFORMATION_CLASS {
+ IoCompletionBasicInformation
+ } IO_COMPLETION_INFORMATION_CLASS;
+
+//
+// I/O Completition Information Structures.
+//
+
+typedef struct _IO_COMPLETION_BASIC_INFORMATION {
+ LONG Depth;
+} IO_COMPLETION_BASIC_INFORMATION, *PIO_COMPLETION_BASIC_INFORMATION;
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtCreateIoCompletion (
+ OUT PHANDLE IoCompletionHandle,
+ IN ACCESS_MASK DesiredAccess,
+ IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,
+ IN ULONG Count OPTIONAL
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtOpenIoCompletion (
+ OUT PHANDLE IoCompletionHandle,
+ IN ACCESS_MASK DesiredAccess,
+ IN POBJECT_ATTRIBUTES ObjectAttributes
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtQueryIoCompletion (
+ IN HANDLE IoCompletionHandle,
+ IN IO_COMPLETION_INFORMATION_CLASS IoCompletionInformationClass,
+ OUT PVOID IoCompletionInformation,
+ IN ULONG IoCompletionInformationLength,
+ OUT PULONG ReturnLength OPTIONAL
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtSetIoCompletion (
+ IN HANDLE IoCompletionHandle,
+ IN ULONG KeyContext,
+ IN PVOID ApcContext,
+ IN NTSTATUS IoStatus,
+ IN ULONG IoStatusInformation
+ );
+
+NTSYSAPI
+NTSTATUS
+NTAPI
+NtRemoveIoCompletion (
+ IN HANDLE IoCompletionHandle,
+ OUT PVOID *KeyContext,
+ OUT PVOID *ApcContext,
+ PIO_STATUS_BLOCK IoStatusBlock,
+ IN PLARGE_INTEGER Timeout
+ );
+
+
+//
+// Defines that are used to access the registry, but are not registry
+// specific.
+//
+
+// begin_ntddk begin_nthal begin_ntminiport begin_ntndis
+//
+// Define the I/O bus interface types.
+//
+
+typedef enum _INTERFACE_TYPE {
+ InterfaceTypeUndefined = -1,
+ Internal,
+ Isa,
+ Eisa,
+ MicroChannel,
+ TurboChannel,
+ PCIBus,
+ VMEBus,
+ NuBus,
+ PCMCIABus,
+ CBus,
+ MPIBus,
+ MPSABus,
+ ProcessorInternal,
+ InternalPowerBus,
+ PNPISABus,
+ MaximumInterfaceType
+}INTERFACE_TYPE, *PINTERFACE_TYPE;
+
+//
+// Define types of bus information.
+//
+
+typedef enum _BUS_DATA_TYPE {
+ ConfigurationSpaceUndefined = -1,
+ Cmos,
+ EisaConfiguration,
+ Pos,
+ CbusConfiguration,
+ PCIConfiguration,
+ VMEConfiguration,
+ NuBusConfiguration,
+ PCMCIAConfiguration,
+ MPIConfiguration,
+ MPSAConfiguration,
+ PNPISAConfiguration,
+ MaximumBusDataType
+} BUS_DATA_TYPE, *PBUS_DATA_TYPE;
+
+//
+// Define the DMA transfer widths.
+//
+
+typedef enum _DMA_WIDTH {
+ Width8Bits,
+ Width16Bits,
+ Width32Bits,
+ MaximumDmaWidth
+}DMA_WIDTH, *PDMA_WIDTH;
+
+//
+// Define DMA transfer speeds.
+//
+
+typedef enum _DMA_SPEED {
+ Compatible,
+ TypeA,
+ TypeB,
+ TypeC,
+ MaximumDmaSpeed
+}DMA_SPEED, *PDMA_SPEED;
+
+// end_ntddk end_nthal end_ntminiport end_ntndis
+
+#endif // _NTIOAPI_