2 * PROJECT: ReactOS Native Headers
3 * FILE: include/ndk/iotypes.h
4 * PURPOSE: Definitions for exported I/O Manager Types not defined in DDK/IFS
5 * PROGRAMMER: Alex Ionescu (alex@relsoft.net)
13 /* DEPENDENCIES **************************************************************/
16 /* EXPORTED DATA *************************************************************/
17 extern POBJECT_TYPE NTOSAPI IoAdapterObjectType
;
18 extern POBJECT_TYPE NTOSAPI IoDeviceHandlerObjectType
;
19 extern POBJECT_TYPE NTOSAPI IoDeviceObjectType
;
20 extern POBJECT_TYPE NTOSAPI IoDriverObjectType
;
21 extern POBJECT_TYPE NTOSAPI IoFileObjectType
;
23 /* CONSTANTS *****************************************************************/
25 /* Device Object Extension Flags */
26 #define DOE_UNLOAD_PENDING 0x1
27 #define DOE_DELETE_PENDING 0x2
28 #define DOE_REMOVE_PENDING 0x4
29 #define DOE_REMOVE_PROCESSED 0x8
30 #define DOE_START_PENDING 0x10
32 /* Device Node Flags */
33 #define DNF_PROCESSED 0x00000001
34 #define DNF_STARTED 0x00000002
35 #define DNF_START_FAILED 0x00000004
36 #define DNF_ENUMERATED 0x00000008
37 #define DNF_DELETED 0x00000010
38 #define DNF_MADEUP 0x00000020
39 #define DNF_START_REQUEST_PENDING 0x00000040
40 #define DNF_NO_RESOURCE_REQUIRED 0x00000080
41 #define DNF_INSUFFICIENT_RESOURCES 0x00000100
42 #define DNF_RESOURCE_ASSIGNED 0x00000200
43 #define DNF_RESOURCE_REPORTED 0x00000400
44 #define DNF_HAL_NODE 0x00000800 // ???
45 #define DNF_ADDED 0x00001000
46 #define DNF_ADD_FAILED 0x00002000
47 #define DNF_LEGACY_DRIVER 0x00004000
48 #define DNF_STOPPED 0x00008000
49 #define DNF_WILL_BE_REMOVED 0x00010000
50 #define DNF_NEED_TO_ENUM 0x00020000
51 #define DNF_NOT_CONFIGURED 0x00040000
52 #define DNF_REINSTALL 0x00080000
53 #define DNF_RESOURCE_REQUIREMENTS_NEED_FILTERED 0x00100000 // ???
54 #define DNF_DISABLED 0x00200000
55 #define DNF_RESTART_OK 0x00400000
56 #define DNF_NEED_RESTART 0x00800000
57 #define DNF_VISITED 0x01000000
58 #define DNF_ASSIGNING_RESOURCES 0x02000000
59 #define DNF_BEEING_ENUMERATED 0x04000000
60 #define DNF_NEED_ENUMERATION_ONLY 0x08000000
61 #define DNF_LOCKED 0x10000000
62 #define DNF_HAS_BOOT_CONFIG 0x20000000
63 #define DNF_BOOT_CONFIG_RESERVED 0x40000000
64 #define DNF_HAS_PROBLEM 0x80000000 // ???
65 /* For UserFlags field */
66 #define DNUF_DONT_SHOW_IN_UI 0x0002
67 #define DNUF_NOT_DISABLEABLE 0x0008
69 /* ENUMERATIONS **************************************************************/
70 typedef enum _PNP_DEVNODE_STATE
72 DeviceNodeUnspecified
= 0x300,
73 DeviceNodeUninitialized
= 0x301,
74 DeviceNodeInitialized
= 0x302,
75 DeviceNodeDriversAdded
= 0x303,
76 DeviceNodeResourcesAssigned
= 0x304,
77 DeviceNodeStartPending
= 0x305,
78 DeviceNodeStartCompletion
= 0x306,
79 DeviceNodeStartPostWork
= 0x307,
80 DeviceNodeStarted
= 0x308,
81 DeviceNodeQueryStopped
= 0x309,
82 DeviceNodeStopped
= 0x30a,
83 DeviceNodeRestartCompletion
= 0x30b,
84 DeviceNodeEnumeratePending
= 0x30c,
85 DeviceNodeEnumerateCompletion
= 0x30d,
86 DeviceNodeAwaitingQueuedDeletion
= 0x30e,
87 DeviceNodeAwaitingQueuedRemoval
= 0x30f,
88 DeviceNodeQueryRemoved
= 0x310,
89 DeviceNodeRemovePendingCloses
= 0x311,
90 DeviceNodeRemoved
= 0x312,
91 DeviceNodeDeletePendingCloses
= 0x313,
92 DeviceNodeDeleted
= 0x314,
93 MaxDeviceNodeState
= 0x315,
96 /* TYPES *********************************************************************/
98 typedef struct _MAILSLOT_CREATE_PARAMETERS
101 ULONG MaximumMessageSize
;
102 LARGE_INTEGER ReadTimeout
;
103 BOOLEAN TimeoutSpecified
;
104 } MAILSLOT_CREATE_PARAMETERS
, *PMAILSLOT_CREATE_PARAMETERS
;
106 typedef struct _NAMED_PIPE_CREATE_PARAMETERS
110 ULONG CompletionMode
;
111 ULONG MaximumInstances
;
114 LARGE_INTEGER DefaultTimeout
;
115 BOOLEAN TimeoutSpecified
;
116 } NAMED_PIPE_CREATE_PARAMETERS
, *PNAMED_PIPE_CREATE_PARAMETERS
;
118 typedef struct _IO_TIMER
122 LIST_ENTRY IoTimerList
;
123 PIO_TIMER_ROUTINE TimerRoutine
;
125 PDEVICE_OBJECT DeviceObject
;
126 } IO_TIMER
, *PIO_TIMER
;
128 typedef struct _DEVICE_NODE
130 /* A tree structure. */
131 struct _DEVICE_NODE
*Parent
;
132 struct _DEVICE_NODE
*PrevSibling
;
133 struct _DEVICE_NODE
*NextSibling
;
134 struct _DEVICE_NODE
*Child
;
135 /* The level of deepness in the tree. */
137 PPO_DEVICE_NOTIFY Notify
;
139 PNP_DEVNODE_STATE State
;
140 PNP_DEVNODE_STATE PreviousState
;
141 PNP_DEVNODE_STATE StateHistory
[20];
142 UINT StateHistoryEntry
;
144 INT CompletionStatus
;
147 /* See DNF_* flags below (WinDBG documentation has WRONG values) */
149 /* See DNUF_* flags below (and IRP_MN_QUERY_PNP_DEVICE_STATE) */
151 /* See CM_PROB_* values are defined in cfg.h */
153 /* Pointer to the PDO corresponding to the device node. */
154 PDEVICE_OBJECT PhysicalDeviceObject
;
155 /* Resource list as assigned by the PnP arbiter. See IRP_MN_START_DEVICE
156 and ARBITER_INTERFACE (not documented in DDK, but present in headers). */
157 PCM_RESOURCE_LIST ResourceList
;
158 /* Resource list as assigned by the PnP arbiter (translated version). */
159 PCM_RESOURCE_LIST ResourceListTranslated
;
160 /* Instance path relative to the Enum key in registry. */
161 UNICODE_STRING InstancePath
;
162 /* Name of the driver service. */
163 UNICODE_STRING ServiceName
;
165 PDEVICE_OBJECT DuplicatePDO
;
166 /* See IRP_MN_QUERY_RESOURCE_REQUIREMENTS. */
167 PIO_RESOURCE_REQUIREMENTS_LIST ResourceRequirements
;
168 /* Information about bus for bus drivers. */
169 INTERFACE_TYPE InterfaceType
;
171 /* Information about underlying bus for child devices. */
172 INTERFACE_TYPE ChildInterfaceType
;
173 ULONG ChildBusNumber
;
174 USHORT ChildBusTypeIndex
;
177 UCHAR HardwareRemovalPolicy
;
178 LIST_ENTRY TargetDeviceNotify
;
179 LIST_ENTRY DeviceArbiterList
;
180 LIST_ENTRY DeviceTranslatorList
;
181 USHORT NoTranslatorMask
;
182 USHORT QueryTranslatorMask
;
183 USHORT NoArbiterMask
;
184 USHORT QueryArbiterMask
;
187 struct _DEVICE_NODE
*LegacyDeviceNode
;
188 PDEVICE_RELATIONS PendingDeviceRelations
;
192 struct _DEVICE_NODE
*NextResourceDeviceNode
;
194 /* See IRP_MN_QUERY_RESOURCES/IRP_MN_FILTER_RESOURCES. */
195 PCM_RESOURCE_LIST BootResources
;
196 /* See the bitfields in DEVICE_CAPABILITIES structure. */
197 ULONG CapabilityFlags
;
201 LIST_ENTRY ListEntry
;
204 ULONG DisableableDepends
;
205 LIST_ENTRY PendedSetInterfaceState
;
206 LIST_ENTRY LegacyBusListEntry
;
207 ULONG DriverUnloadRetryCount
;
208 struct _DEVICE_NODE
*PreviousParent
;
209 ULONG DeletedChidren
;
210 } DEVICE_NODE
, *PDEVICE_NODE
;
212 typedef struct _PI_RESOURCE_ARBITER_ENTRY
214 LIST_ENTRY DeviceArbiterList
;
216 PARBITER_INTERFACE ArbiterInterface
;
218 LIST_ENTRY ResourceList
;
219 LIST_ENTRY BestResourceList
;
220 LIST_ENTRY BestConfig
;
221 LIST_ENTRY ActiveArbiterList
;
223 UCHAR ResourcesChanged
;
224 } PI_RESOURCE_ARBITER_ENTRY
, *PPI_RESOURCE_ARBITER_ENTRY
;
226 typedef struct _DEVOBJ_EXTENSION
230 PDEVICE_OBJECT DeviceObject
;
232 struct DEVICE_OBJECT_POWER_EXTENSION
*Dope
;
233 ULONG ExtensionFlags
;
234 struct _DEVICE_NODE
*DeviceNode
;
235 PDEVICE_OBJECT AttachedTo
;
240 } DEVOBJ_EXTENSION
, *PDEVOBJ_EXTENSION
;
242 typedef struct _PRIVATE_DRIVER_EXTENSIONS
244 struct _PRIVATE_DRIVER_EXTENSIONS
*Link
;
245 PVOID ClientIdentificationAddress
;
247 } PRIVATE_DRIVER_EXTENSIONS
, *PPRIVATE_DRIVER_EXTENSIONS
;