[HEADERS]
[reactos.git] / reactos / include / ndk / iotypes.h
index de2034c..121ce2d 100644 (file)
@@ -15,7 +15,6 @@ Author:
     Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
 
 --*/
-
 #ifndef _IOTYPES_H
 #define _IOTYPES_H
 
@@ -23,11 +22,18 @@ Author:
 // Dependencies
 //
 #include <umtypes.h>
-#if !defined(_NTIFS_)
-typedef PVOID PFS_FILTER_CALLBACKS;
-#endif
+#include <ifssupp.h>
+#include <potypes.h>
 
+//
+// I/O Completion Access Rights
+//
+#define IO_COMPLETION_QUERY_STATE               0x0001
 #ifndef NTOS_MODE_USER
+#define IO_COMPLETION_MODIFY_STATE              0x0002
+#define IO_COMPLETION_ALL_ACCESS                (STANDARD_RIGHTS_REQUIRED | \
+                                                 SYNCHRONIZE | \
+                                                 0x3)
 
 //
 // Kernel Exported Object Types
@@ -101,7 +107,7 @@ extern POBJECT_TYPE NTSYSAPI IoDriverObjectType;
 #define FILE_CREATE_TREE_CONNECTION             0x00000080
 #define FILE_COMPLETE_IF_OPLOCKED               0x00000100
 #define FILE_NO_EA_KNOWLEDGE                    0x00000200
-#define FILE_OPEN_FOR_RECOVERY                  0x00000400
+#define FILE_OPEN_REMOTE_INSTANCE               0x00000400
 #define FILE_RANDOM_ACCESS                      0x00000800
 #define FILE_DELETE_ON_CLOSE                    0x00001000
 #define FILE_OPEN_BY_FILE_ID                    0x00002000
@@ -118,6 +124,11 @@ extern POBJECT_TYPE NTSYSAPI IoDriverObjectType;
 #define FILE_REMOVABLE_MEDIA                    0x00000001
 #define FILE_REMOTE_DEVICE                      0x00000010
 
+//
+// File Object Flags
+//
+#define FO_FILE_OBJECT_HAS_EXTENSION            0x00800000
+
 //
 // Device Object Extension Flags
 //
@@ -178,13 +189,18 @@ extern POBJECT_TYPE NTSYSAPI IoDriverObjectType;
 #define DNUF_DONT_SHOW_IN_UI                    0x0002
 #define DNUF_NOT_DISABLEABLE                    0x0008
 
+//
+// Internal Option Flags
+//
+#define IO_ATTACH_DEVICE_API                    0x80000000
+
 //
 // Undocumented WMI Registration Flags
 //
-#define WMIREG_FLAG_TRACE_PROVIDER          0x00010000
-#define WMIREG_FLAG_TRACE_NOTIFY_MASK       0x00F00000
-#define WMIREG_NOTIFY_DISK_IO               0x00100000
-#define WMIREG_NOTIFY_TDI_IO                0x00200000
+#define WMIREG_FLAG_TRACE_PROVIDER              0x00010000
+#define WMIREG_FLAG_TRACE_NOTIFY_MASK           0x00F00000
+#define WMIREG_NOTIFY_DISK_IO                   0x00100000
+#define WMIREG_NOTIFY_TDI_IO                    0x00200000
 
 //
 // I/O Completion Information Class for NtQueryIoCompletionInformation
@@ -306,6 +322,18 @@ typedef enum _FSINFOCLASS
 
 #endif
 
+//
+// Dock Profile Status
+//
+typedef enum _PROFILE_STATUS
+{
+    DOCK_NOTDOCKDEVICE,
+    DOCK_QUIESCENT,
+    DOCK_ARRIVING,
+    DOCK_DEPARTING,
+    DOCK_EJECTIRP_COMPLETED
+} PROFILE_STATUS, *PPROFILE_STATUS;
+
 //
 // Device Node States
 //
@@ -337,6 +365,19 @@ typedef enum _PNP_DEVNODE_STATE
 
 #ifdef NTOS_MODE_USER
 
+//
+// I/O Status Block
+//
+typedef struct _IO_STATUS_BLOCK
+{
+    union
+    {
+        NTSTATUS Status;
+        PVOID Pointer;
+    };
+    ULONG_PTR Information;
+} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
+
 //
 // File Information structures for NtQueryInformationFile
 //
@@ -544,6 +585,13 @@ typedef struct _FILE_DIRECTORY_INFORMATION
     WCHAR FileName[1];
 } FILE_DIRECTORY_INFORMATION, *PFILE_DIRECTORY_INFORMATION;
 
+typedef struct _FILE_IO_COMPLETION_INFORMATION
+{
+    PVOID KeyContext;
+    PVOID ApcContext;
+    IO_STATUS_BLOCK IoStatusBlock;
+} FILE_IO_COMPLETION_INFORMATION, *PFILE_IO_COMPLETION_INFORMATION;
+
 //
 // File System Information structures for NtQueryInformationFile
 //
@@ -569,6 +617,15 @@ typedef struct _FILE_FS_SIZE_INFORMATION
     ULONG BytesPerSector;
 } FILE_FS_SIZE_INFORMATION, *PFILE_FS_SIZE_INFORMATION;
 
+typedef struct _FILE_FS_FULL_SIZE_INFORMATION
+{
+    LARGE_INTEGER   TotalAllocationUnits;
+    LARGE_INTEGER   CallerAvailableAllocationUnits;
+    LARGE_INTEGER   ActualAvailableAllocationUnits;
+    ULONG           SectorsPerAllocationUnit;
+    ULONG           BytesPerSector;
+} FILE_FS_FULL_SIZE_INFORMATION, *PFILE_FS_FULL_SIZE_INFORMATION;
+
 typedef struct _FILE_FS_LABEL_INFORMATION
 {
     ULONG VolumeLabelLength;
@@ -604,19 +661,6 @@ typedef struct _FILE_PIPE_PEEK_BUFFER
     CHAR Data[1];
 } FILE_PIPE_PEEK_BUFFER, *PFILE_PIPE_PEEK_BUFFER;
 
-//
-// I/O Status Block
-//
-typedef struct _IO_STATUS_BLOCK
-{
-    union
-    {
-        NTSTATUS  Status;
-        PVOID  Pointer;
-    };
-    ULONG_PTR  Information;
-} IO_STATUS_BLOCK, *PIO_STATUS_BLOCK;
-
 //
 // I/O Error Log Structures
 //
@@ -649,6 +693,14 @@ typedef struct _IO_ERROR_LOG_MESSAGE
 
 #endif
 
+//
+// I/O Completion Information structures
+//
+typedef struct _IO_COMPLETION_BASIC_INFORMATION
+{
+    LONG Depth;
+} IO_COMPLETION_BASIC_INFORMATION, *PIO_COMPLETION_BASIC_INFORMATION;
+
 //
 // Parameters for NtCreateMailslotFile/NtCreateNamedPipeFile
 //
@@ -685,7 +737,7 @@ typedef struct _IO_TIMER
     PIO_TIMER_ROUTINE TimerRoutine;
     PVOID Context;
     PDEVICE_OBJECT DeviceObject;
-} IO_TIMER, *PIO_TIMER;
+} IO_TIMER;
 
 //
 // Driver Extension
@@ -701,17 +753,18 @@ typedef struct _IO_CLIENT_EXTENSION
 //
 typedef struct _DEVICE_NODE
 {
-    struct _DEVICE_NODE *Parent;
-    struct _DEVICE_NODE *PrevSibling;
-    struct _DEVICE_NODE *NextSibling;
+    struct _DEVICE_NODE *Sibling;
     struct _DEVICE_NODE *Child;
+    struct _DEVICE_NODE *Parent;
+    struct _DEVICE_NODE *LastChild;
     ULONG Level;
     struct _PO_DEVICE_NOTIFY *Notify;
+    PO_IRP_MANAGER PoIrpManager;
     PNP_DEVNODE_STATE State;
     PNP_DEVNODE_STATE PreviousState;
     PNP_DEVNODE_STATE StateHistory[20];
     ULONG StateHistoryEntry;
-    INT CompletionStatus;
+    NTSTATUS CompletionStatus;
     PIRP PendingIrp;
     ULONG Flags;
     ULONG UserFlags;
@@ -747,10 +800,13 @@ typedef struct _DEVICE_NODE
         struct _DEVICE_NODE *NextResourceDeviceNode;
     } OverUsed2;
     PCM_RESOURCE_LIST BootResources;
+#if (NTDDI_VERSION >= NTDDI_LONGHORN)
+    PCM_RESOURCE_LIST BootResourcesTranslated;
+#endif
     ULONG CapabilityFlags;
     struct
     {
-        ULONG DockStatus;
+        PROFILE_STATUS DockStatus;
         LIST_ENTRY ListEntry;
         WCHAR *SerialNumber;
     } DockInfo;
@@ -760,6 +816,9 @@ typedef struct _DEVICE_NODE
     ULONG DriverUnloadRetryCount;
     struct _DEVICE_NODE *PreviousParent;
     ULONG DeletedChidren;
+#if (NTDDI_VERSION >= NTDDI_LONGHORN)
+    ULONG NumaNodeIndex;
+#endif
 } DEVICE_NODE, *PDEVICE_NODE;
 
 //
@@ -1085,6 +1144,36 @@ typedef struct _BOOT_OPTIONS
     WCHAR HeadlessRedirection[1];
 } BOOT_OPTIONS, *PBOOT_OPTIONS;
 
+//
+// Firmware Boot Entry
+//
+typedef struct _BOOT_ENTRY
+{
+    ULONG Version;
+    ULONG Length;
+    ULONG Id;
+    ULONG Attributes;
+    ULONG FriendlyNameOffset;
+    ULONG BootFilePathOffset;
+    ULONG OsOptionsLength;
+    CHAR OsOptions[1];
+} BOOT_ENTRY, *PBOOT_ENTRY;
+
+//
+// Firmware Driver Entry
+//
+typedef struct _EFI_DRIVER_ENTRY
+{
+    ULONG Version;
+    ULONG Length;
+    ULONG Id;
+    ULONG Attributes;
+    ULONG FriendlyNameOffset;
+    ULONG DriverFilePathOffset;
+} EFI_DRIVER_ENTRY, *PEFI_DRIVER_ENTRY;
+
+#ifdef NTOS_MODE_USER
+
 //
 // APC Callback for NtCreateFile
 //
@@ -1094,8 +1183,6 @@ typedef VOID
     IN PIO_STATUS_BLOCK IoStatusBlock,
     IN ULONG Reserved);
 
-#ifdef NTOS_MODE_USER
-
 //
 // Mailslot IOCTL Codes
 //