Alex Ionescu (alexi@tinykrnl.org) - Updated - 27-Feb-2006
--*/
-
#ifndef _IOTYPES_H
#define _IOTYPES_H
// Dependencies
//
#include <umtypes.h>
+#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
#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
#define FILE_REMOVABLE_MEDIA 0x00000001
#define FILE_REMOTE_DEVICE 0x00000010
+//
+// File Object Flags
+//
+#define FO_FILE_OBJECT_HAS_EXTENSION 0x00800000
+
//
// Device Object Extension Flags
//
#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
#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
//
#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
//
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
//
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;
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
//
#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
//
PIO_TIMER_ROUTINE TimerRoutine;
PVOID Context;
PDEVICE_OBJECT DeviceObject;
-} IO_TIMER, *PIO_TIMER;
+} IO_TIMER;
+
+//
+// Driver Extension
+//
+typedef struct _IO_CLIENT_EXTENSION
+{
+ struct _IO_CLIENT_EXTENSION *NextExtension;
+ PVOID ClientIdentificationAddress;
+} IO_CLIENT_EXTENSION, *PIO_CLIENT_EXTENSION;
//
// Device Node
//
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;
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;
ULONG DriverUnloadRetryCount;
struct _DEVICE_NODE *PreviousParent;
ULONG DeletedChidren;
+#if (NTDDI_VERSION >= NTDDI_LONGHORN)
+ ULONG NumaNodeIndex;
+#endif
} DEVICE_NODE, *PDEVICE_NODE;
//
} EXTENDED_DEVOBJ_EXTENSION, *PEXTENDED_DEVOBJ_EXTENSION;
//
-// Private Driver Extension Descriptor
+// Extended Driver Object Extension Structure
//
-typedef struct _PRIVATE_DRIVER_EXTENSIONS
+typedef struct _EXTENDED_DRIVER_EXTENSION
{
- struct _PRIVATE_DRIVER_EXTENSIONS *Link;
- PVOID ClientIdentificationAddress;
- CHAR Extension[1];
-} PRIVATE_DRIVER_EXTENSIONS, *PPRIVATE_DRIVER_EXTENSIONS;
+ struct _DRIVER_OBJECT *DriverObject;
+ PDRIVER_ADD_DEVICE AddDevice;
+ ULONG Count;
+ UNICODE_STRING ServiceKeyName;
+ PIO_CLIENT_EXTENSION ClientDriverExtension;
+ PFS_FILTER_CALLBACKS FsFilterCallbacks;
+} EXTENDED_DRIVER_EXTENSION, *PEXTENDED_DRIVER_EXTENSION;
//
// Extended I/O Stack Location Structure
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
//
IN PIO_STATUS_BLOCK IoStatusBlock,
IN ULONG Reserved);
-#ifdef NTOS_MODE_USER
-
//
// Mailslot IOCTL Codes
//