882981029a61024dd876cdb29ac7f81591c1858e
[reactos.git] / reactos / include / ndk / iotypes.h
1 /*
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)
6 * UPDATE HISTORY:
7 * Created 06/10/04
8 */
9
10 #ifndef _IOTYPES_H
11 #define _IOTYPES_H
12
13 /* DEPENDENCIES **************************************************************/
14 #include "potypes.h"
15
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;
22
23 /* CONSTANTS *****************************************************************/
24
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
31
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
68
69 /* ENUMERATIONS **************************************************************/
70 typedef enum _PNP_DEVNODE_STATE
71 {
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,
94 } PNP_DEVNODE_STATE;
95
96 /* TYPES *********************************************************************/
97
98 typedef struct _MAILSLOT_CREATE_PARAMETERS
99 {
100 ULONG MailslotQuota;
101 ULONG MaximumMessageSize;
102 LARGE_INTEGER ReadTimeout;
103 BOOLEAN TimeoutSpecified;
104 } MAILSLOT_CREATE_PARAMETERS, *PMAILSLOT_CREATE_PARAMETERS;
105
106 typedef struct _NAMED_PIPE_CREATE_PARAMETERS
107 {
108 ULONG NamedPipeType;
109 ULONG ReadMode;
110 ULONG CompletionMode;
111 ULONG MaximumInstances;
112 ULONG InboundQuota;
113 ULONG OutboundQuota;
114 LARGE_INTEGER DefaultTimeout;
115 BOOLEAN TimeoutSpecified;
116 } NAMED_PIPE_CREATE_PARAMETERS, *PNAMED_PIPE_CREATE_PARAMETERS;
117
118 typedef struct _IO_TIMER
119 {
120 USHORT Type;
121 USHORT TimerEnabled;
122 LIST_ENTRY IoTimerList;
123 PIO_TIMER_ROUTINE TimerRoutine;
124 PVOID Context;
125 PDEVICE_OBJECT DeviceObject;
126 } IO_TIMER, *PIO_TIMER;
127
128 typedef struct _DEVICE_NODE
129 {
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. */
136 UINT Level;
137 PPO_DEVICE_NOTIFY Notify;
138 /* State machine. */
139 PNP_DEVNODE_STATE State;
140 PNP_DEVNODE_STATE PreviousState;
141 PNP_DEVNODE_STATE StateHistory[20];
142 UINT StateHistoryEntry;
143 /* ? */
144 INT CompletionStatus;
145 /* ? */
146 PIRP PendingIrp;
147 /* See DNF_* flags below (WinDBG documentation has WRONG values) */
148 ULONG Flags;
149 /* See DNUF_* flags below (and IRP_MN_QUERY_PNP_DEVICE_STATE) */
150 ULONG UserFlags;
151 /* See CM_PROB_* values are defined in cfg.h */
152 ULONG Problem;
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;
164 /* ? */
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;
170 ULONG BusNumber;
171 /* Information about underlying bus for child devices. */
172 INTERFACE_TYPE ChildInterfaceType;
173 ULONG ChildBusNumber;
174 USHORT ChildBusTypeIndex;
175 /* ? */
176 UCHAR RemovalPolicy;
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;
185 union
186 {
187 struct _DEVICE_NODE *LegacyDeviceNode;
188 PDEVICE_RELATIONS PendingDeviceRelations;
189 } OverUsed1;
190 union
191 {
192 struct _DEVICE_NODE *NextResourceDeviceNode;
193 } OverUsed2;
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;
198 struct
199 {
200 ULONG DockStatus;
201 LIST_ENTRY ListEntry;
202 WCHAR *SerialNumber;
203 } DockInfo;
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;
211
212 typedef struct _PI_RESOURCE_ARBITER_ENTRY
213 {
214 LIST_ENTRY DeviceArbiterList;
215 UCHAR ResourceType;
216 PARBITER_INTERFACE ArbiterInterface;
217 ULONG Level;
218 LIST_ENTRY ResourceList;
219 LIST_ENTRY BestResourceList;
220 LIST_ENTRY BestConfig;
221 LIST_ENTRY ActiveArbiterList;
222 UCHAR State;
223 UCHAR ResourcesChanged;
224 } PI_RESOURCE_ARBITER_ENTRY, *PPI_RESOURCE_ARBITER_ENTRY;
225
226 typedef struct _DEVOBJ_EXTENSION
227 {
228 CSHORT Type;
229 USHORT Size;
230 PDEVICE_OBJECT DeviceObject;
231 ULONG PowerFlags;
232 struct DEVICE_OBJECT_POWER_EXTENSION *Dope;
233 ULONG ExtensionFlags;
234 struct _DEVICE_NODE *DeviceNode;
235 PDEVICE_OBJECT AttachedTo;
236 LONG StartIoCount;
237 LONG StartIoKey;
238 ULONG StartIoFlags;
239 struct _VPB *Vpb;
240 } DEVOBJ_EXTENSION, *PDEVOBJ_EXTENSION;
241
242 typedef struct _PRIVATE_DRIVER_EXTENSIONS
243 {
244 struct _PRIVATE_DRIVER_EXTENSIONS *Link;
245 PVOID ClientIdentificationAddress;
246 CHAR Extension[1];
247 } PRIVATE_DRIVER_EXTENSIONS, *PPRIVATE_DRIVER_EXTENSIONS;
248
249 #endif
250