ReactOS 0.4.16-dev-2613-g9533ad7
io.h
Go to the documentation of this file.
1/*
2 * PROJECT: ReactOS Kernel
3 * LICENSE: GPL - See COPYING in the top level directory
4 * FILE: ntoskrnl/include/internal/io.h
5 * PURPOSE: Internal header for the I/O Manager
6 * PROGRAMMERS: Alex Ionescu (alex.ionescu@reactos.org)
7 */
8
9#include "ntdddisk.h"
10
11//
12// Define this if you want debugging support
13//
14#define _IO_DEBUG_ 0x00
15
16//
17// These define the Debug Masks Supported
18//
19#define IO_IRP_DEBUG 0x01
20#define IO_FILE_DEBUG 0x02
21#define IO_API_DEBUG 0x04
22#define IO_CTL_DEBUG 0x08
23
24//
25// Debug/Tracing support
26//
27#if _IO_DEBUG_
28#ifdef NEW_DEBUG_SYSTEM_IMPLEMENTED // enable when Debug Filters are implemented
29#define IOTRACE(x, ...) \
30 { \
31 DbgPrintEx("%s [%.16s] - ", \
32 __FUNCTION__, \
33 PsGetCurrentProcess()->ImageFileName); \
34 DbgPrintEx(__VA_ARGS__); \
35 }
36#else
37#define IOTRACE(x, ...) \
38 if (x & IopTraceLevel) \
39 { \
40 DbgPrint("%s [%.16s] - ", \
41 __FUNCTION__, \
42 PsGetCurrentProcess()->ImageFileName); \
43 DbgPrint(__VA_ARGS__); \
44 }
45#endif
46#else
47#define IOTRACE(x, fmt, ...) DPRINT(fmt, ##__VA_ARGS__)
48#endif
49
50//
51// Registry path to the enumeration root key
52//
53#define ENUM_ROOT L"\\Registry\\Machine\\System\\CurrentControlSet\\Enum"
54
55//
56// Returns the type of METHOD_ used in this IOCTL
57//
58#define IO_METHOD_FROM_CTL_CODE(c) (c & 0x00000003)
59
60//
61// Bugcheck codes for RAM disk booting
62//
63//
64// No LoaderXIPRom descriptor was found in the loader memory list
65//
66#define RD_NO_XIPROM_DESCRIPTOR 1
67//
68// Unable to open the RAM disk driver (ramdisk.sys or \Device\Ramdisk)
69//
70#define RD_NO_RAMDISK_DRIVER 2
71//
72// FSCTL_CREATE_RAM_DISK failed
73//
74#define RD_FSCTL_FAILED 3
75//
76// Unable to create GUID string from binary GUID
77//
78#define RD_GUID_CONVERT_FAILED 4
79//
80// Unable to create symbolic link pointing to the RAM disk device
81//
82#define RD_SYMLINK_CREATE_FAILED 5
83//
84// Unable to create system root path when creating the RAM disk
85//
86#define RD_SYSROOT_INIT_FAILED 6
87
88//
89// Max traversal of reparse points for a single open in IoParseDevice
90//
91#define IOP_MAX_REPARSE_TRAVERSAL 0x20
92
93//
94// Private flags for IoCreateFile / IoParseDevice
95//
96#define IOP_USE_TOP_LEVEL_DEVICE_HINT 0x01
97#define IOP_CREATE_FILE_OBJECT_EXTENSION 0x02
98
99
101{
104
106
107
108
109//
110// We can call the Ob Inlined API, it's the same thing
111//
112#define IopAllocateMdlFromLookaside \
113 ObpAllocateObjectCreateInfoBuffer
114#define IopFreeMdlFromLookaside \
115 ObpFreeCapturedAttributes
116
117//
118// Determines if the IRP is Synchronous
119//
120#define IsIrpSynchronous(Irp, FileObject) \
121 (((Irp)->Flags & IRP_SYNCHRONOUS_API) || \
122 (!(FileObject) ? FALSE : \
123 (FileObject)->Flags & FO_SYNCHRONOUS_IO))
124
125//
126// Returns the internal Device Object Extension
127//
128#define IoGetDevObjExtension(DeviceObject) \
129 ((PEXTENDED_DEVOBJ_EXTENSION) \
130 ((DeviceObject)->DeviceObjectExtension))
131
132//
133// Returns the internal Driver Object Extension
134//
135#define IoGetDrvObjExtension(DriverObject) \
136 ((PEXTENDED_DRIVER_EXTENSION) \
137 ((DriverObject)->DriverExtension))
138
139/*
140 * VOID
141 * IopDeviceNodeSetFlag(
142 * PDEVICE_NODE DeviceNode,
143 * ULONG Flag);
144 */
145#define IopDeviceNodeSetFlag(DeviceNode, Flag) \
146 ((DeviceNode)->Flags |= (Flag))
147
148/*
149 * VOID
150 * IopDeviceNodeClearFlag(
151 * PDEVICE_NODE DeviceNode,
152 * ULONG Flag);
153 */
154#define IopDeviceNodeClearFlag(DeviceNode, Flag) \
155 ((DeviceNode)->Flags &= ~(Flag))
156
157/*
158 * BOOLEAN
159 * IopDeviceNodeHasFlag(
160 * PDEVICE_NODE DeviceNode,
161 * ULONG Flag);
162 */
163#define IopDeviceNodeHasFlag(DeviceNode, Flag) \
164 (((DeviceNode)->Flags & (Flag)) > 0)
165
166/*
167 * VOID
168 * IopDeviceNodeSetUserFlag(
169 * PDEVICE_NODE DeviceNode,
170 * ULONG UserFlag);
171 */
172#define IopDeviceNodeSetUserFlag(DeviceNode, UserFlag) \
173 ((DeviceNode)->UserFlags |= (UserFlag))
174
175/*
176 * VOID
177 * IopDeviceNodeClearUserFlag(
178 * PDEVICE_NODE DeviceNode,
179 * ULONG UserFlag);
180 */
181#define IopDeviceNodeClearUserFlag(DeviceNode, UserFlag)\
182 ((DeviceNode)->UserFlags &= ~(UserFlag))
183
184/*
185 * BOOLEAN
186 * IopDeviceNodeHasUserFlag(
187 * PDEVICE_NODE DeviceNode,
188 * ULONG UserFlag);
189 */
190#define IopDeviceNodeHasUserFlag(DeviceNode, UserFlag) \
191 (((DeviceNode)->UserFlags & (UserFlag)) > 0)
192
193 /*
194 * VOID
195 * IopDeviceNodeSetProblem(
196 * PDEVICE_NODE DeviceNode,
197 * ULONG Problem);
198 */
199#define IopDeviceNodeSetProblem(DeviceNode, Problem) \
200 ((DeviceNode)->Problem |= (Problem))
201
202/*
203 * VOID
204 * IopDeviceNodeClearProblem(
205 * PDEVICE_NODE DeviceNode,
206 * ULONG Problem);
207 */
208#define IopDeviceNodeClearProblem(DeviceNode, Problem) \
209 ((DeviceNode)->Problem &= ~(Problem))
210
211/*
212 * BOOLEAN
213 * IopDeviceNodeHasProblem(
214 * PDEVICE_NODE DeviceNode,
215 * ULONG Problem);
216 */
217#define IopDeviceNodeHasProblem(DeviceNode, Problem) \
218 (((DeviceNode)->Problem & (Problem)) > 0)
219
220/*
221 * VOID
222 * IopInitDeviceTreeTraverseContext(
223 * PDEVICETREE_TRAVERSE_CONTEXT DeviceTreeTraverseContext,
224 * PDEVICE_NODE DeviceNode,
225 * DEVICETREE_TRAVERSE_ROUTINE Action,
226 * PVOID Context);
227 */
228#define IopInitDeviceTreeTraverseContext( \
229 _DeviceTreeTraverseContext, _DeviceNode, _Action, \
230 _Context) { \
231 (_DeviceTreeTraverseContext)->FirstDeviceNode = \
232 (_DeviceNode); \
233 (_DeviceTreeTraverseContext)->Action = (_Action); \
234 (_DeviceTreeTraverseContext)->Context = (_Context); }
235
236/*
237 * BOOLEAN
238 * IopIsValidPhysicalDeviceObject(
239 * IN PDEVICE_OBJECT PhysicalDeviceObject);
240 */
241#define IopIsValidPhysicalDeviceObject(PhysicalDeviceObject) \
242 (((PEXTENDED_DEVOBJ_EXTENSION)PhysicalDeviceObject) && \
243 (((PEXTENDED_DEVOBJ_EXTENSION)PhysicalDeviceObject->DeviceObjectExtension)->DeviceNode) && \
244 (((PEXTENDED_DEVOBJ_EXTENSION)PhysicalDeviceObject->DeviceObjectExtension)->DeviceNode->Flags & DNF_ENUMERATED))
245
246//
247// Device List Operations
248//
250{
252 IopAdd
254
255//
256// Transfer statistics
257//
259{
264
265//
266// Packet Types when piggybacking on the IRP Overlay
267//
269 {
274
275//
276// Special version of the IRP Overlay used to optimize I/O completion
277// by not using up a separate structure.
278//
280{
281 struct
282 {
284 union
285 {
288 };
289 };
295
296//
297// I/O Completion Context for IoSetIoCompletionRoutineEx
298//
300{
305
306//
307// I/O Wrapper around the Executive Work Item
308//
309typedef struct _IO_WORKITEM
310{
316
317//
318// I/O Wrapper around the Kernel Interrupt
319//
320typedef struct _IO_INTERRUPT
321{
326
327//
328// I/O Error Log Packet Header
329//
330typedef struct _ERROR_LOG_ENTRY
331{
339
340//
341// To simplify matters, the kernel is made to support both the checked and free
342// version of the I/O Remove Lock in the same binary. This structure includes
343// both, since the DDK has the structure with a compile-time #ifdef.
344//
346{
350
351//
352// Dummy File Object used inside the Open Packet so that OB knows how to
353// deal with the Object Pointer even though it's not a real file.
354//
355typedef struct _DUMMY_FILE_OBJECT
356{
360
361//
362// Open packet used as a context for Device/File parsing so that the parse
363// routine can know what operation is being requested.
364//
365typedef struct _OPEN_PACKET
366{
396
397//
398// Boot Driver List Entry
399//
400typedef struct _DRIVER_INFORMATION
401{
411
412//
413// List of Bus Type GUIDs
414//
416{
422
423//
424// Shutdown entry for registed devices
425//
426typedef struct _SHUTDOWN_ENTRY
427{
431
432//
433// F/S Notification entry for registered File Systems
434//
436{
441
442//
443// Driver (Boot) Re-Initialization Entry
444//
446{
452
453//
454// Called on every visit of a node during a preorder-traversal of the device
455// node tree.
456// If the routine returns STATUS_UNSUCCESSFUL the traversal will stop and
457// STATUS_SUCCESS is returned to the caller who initiated the tree traversal.
458// Any other returned status code will be returned to the caller. If a status
459// code that indicates an error (other than STATUS_UNSUCCESSFUL) is returned,
460// the traversal is stopped immediately and the status code is returned to
461// the caller.
462//
463typedef
468);
469
470//
471// Context information for traversing the device tree
472//
474{
475 //
476 // Current device node during a traversal
477 //
479
480 //
481 // Initial device node where we start the traversal
482 //
484
485 //
486 // Action routine to be called for every device node
487 //
489
490 //
491 // Context passed to the action routine
492 //
495
496//
497// Reserve IRP allocator
498// Used for read paging IOs in low-memory situations
499//
501{
507
508//
509// Type selection for IopCreateSecurityDescriptorPerType()
510//
512{
519
520//
521// Action types and data for PiQueueDeviceAction()
522//
523typedef enum _DEVICE_ACTION
524{
532
533//
534// Resource code
535//
536ULONG
537NTAPI
539
541NTAPI
544);
545
547NTAPI
551);
552
554NTAPI
557 IN BOOLEAN Silent,
558 OUT OPTIONAL PCM_PARTIAL_RESOURCE_DESCRIPTOR ConflictingDescriptor
559);
560
561//
562// PNP Routines
563//
565NTAPI
568 IN BOOLEAN LoadDriver,
570);
571
572CODE_SEG("INIT")
574NTAPI
576 VOID
577);
578
580NTAPI
582 VOID
583);
584
585VOID
587 VOID
588);
589
590VOID
592 VOID
593);
594
598);
599
603);
604
605VOID
608 _In_ PDEVICE_NODE ParentNode);
609
613 _In_ PNP_DEVNODE_STATE NewState);
614
615VOID
618 _In_ UINT32 Problem);
619
620VOID
623
627);
628
630NTAPI
632 PDEVICE_CAPABILITIES DeviceCaps);
633
639);
640
642NTAPI
648);
649
654);
655
656CODE_SEG("INIT")
659
665
669 _In_ PUNICODE_STRING DeviceIds);
670
674 _In_ PUNICODE_STRING DeviceId);
675
677NTAPI
683
685NTAPI
690);
691
693NTAPI
696 IN HANDLE BaseHandle OPTIONAL,
701);
702
703
707
709NTAPI
714
715//
716// PnP Routines
717//
718CODE_SEG("INIT")
720NTAPI
722 VOID
723);
724
725CODE_SEG("INIT")
727NTAPI
729 VOID
730);
731
732USHORT
733NTAPI
735 IN HANDLE ServiceHandle
736);
737
738USHORT
739NTAPI
741 IN HANDLE ServiceHandle
742);
743
745NTAPI
747 IN PKEY_VALUE_FULL_INFORMATION KeyValueInformation,
748 OUT PUNICODE_STRING *UnicodeStringList,
749 OUT PULONG UnicodeStringCount
750);
751
753NTAPI
755 IN PWCHAR RegSzData,
756 IN ULONG RegSzLength,
757 OUT PUSHORT StringLength OPTIONAL
758);
759
760VOID
763 _In_ HANDLE InstanceKey);
764
765//
766// Initialization Routines
767//
768CODE_SEG("INIT")
770NTAPI
772 IN PLOADER_PARAMETER_BLOCK LoaderBlock
773);
774
775CODE_SEG("INIT")
777NTAPI
779 IN PLOADER_PARAMETER_BLOCK LoaderBlock,
780 OUT PANSI_STRING NtBootPath
781);
782
783CODE_SEG("INIT")
785NTAPI
787 IN PLOADER_PARAMETER_BLOCK LoaderBlock
788);
789
792 _In_ PDRIVE_LAYOUT_INFORMATION_EX DriveLayout,
793 _In_ PARC_DISK_SIGNATURE ArcDiskSignature,
795
797NTAPI
799 IN HANDLE PageFileHandle
800);
801
802CODE_SEG("INIT")
803VOID
805 VOID);
806
807//
808// Device/Volume Routines
809//
810VOID
811NTAPI
814);
815
816PVPB
817NTAPI
819 IN POPEN_PACKET OpenPacket,
823);
824
826NTAPI
829 IN BOOLEAN AllowRawMount,
830 IN BOOLEAN DeviceIsLocked,
832 OUT PVPB *Vpb
833);
834
835PVOID
838);
839
840PVOID
844);
845
847NTAPI
850);
851
852VOID
853NTAPI
855 IN PVPB Vpb
856);
857
858VOID
859NTAPI
861 VOID
862);
863
864VOID
865NTAPI
867 VOID
868);
869
871NTAPI
874);
875
876VOID
877NTAPI
880 IN BOOLEAN ForceUnload
881);
882
884NTAPI
888
890NTAPI
894);
895
896VOID
897NTAPI
900);
901
903NTAPI
906);
907
908//
909// IRP Routines
910//
912NTAPI
915 IN PKEVENT EventObject,
917);
918
919VOID
920NTAPI
922 IN PKEVENT EventObject,
923 IN PIRP Irp
924);
925
926PIRP
927NTAPI
930);
931
933NTAPI
935 IN PRESERVE_IRP_ALLOCATOR ReserveIrpAllocator
936);
937
938PIRP
939NTAPI
942);
943
944//
945// Shutdown routines
946//
947VOID
949 VOID
950);
951
952VOID
953NTAPI
955 IN ULONG Phase
956);
957
958VOID
959NTAPI
961 IN PLIST_ENTRY ListHead
962);
963
964//
965// Boot logging support
966//
967CODE_SEG("INIT")
968VOID
970 IN BOOLEAN StartBootLog
971);
972
973CODE_SEG("INIT")
974VOID
976 VOID
977);
978
979VOID
981 VOID
982);
983
984VOID
986 IN PUNICODE_STRING DriverName,
988);
989
990VOID
992 VOID
993);
994
995//
996// I/O Cancellation Routines
997//
998VOID
999NTAPI
1002);
1003
1004VOID
1006 VOID
1007);
1008
1009//
1010// I/O Completion
1011//
1012VOID
1013NTAPI
1015 IN PKAPC Apc,
1016 IN PKNORMAL_ROUTINE* NormalRoutine,
1017 IN PVOID* NormalContext,
1020);
1021
1022//
1023// Error Logging Routines
1024//
1025VOID
1026NTAPI
1028 VOID
1029);
1030
1031VOID
1032NTAPI
1035);
1036
1037//
1038// Raw File System MiniDriver
1039//
1040BOOLEAN
1043);
1044
1045CODE_SEG("INIT")
1047NTAPI
1051);
1052
1053//
1054// PnP Root MiniDriver
1055//
1057NTAPI
1061);
1062
1066
1071 OUT PUNICODE_STRING FullInstancePath
1072);
1073
1077
1078VOID
1080
1081//
1082// Driver Routines
1083//
1084CODE_SEG("INIT")
1085VOID
1088 VOID
1089);
1090
1091CODE_SEG("INIT")
1092VOID
1095 VOID
1096);
1097
1098VOID
1099NTAPI
1101 IN PVOID ObjectBody
1102);
1103
1106 _In_ HANDLE ServiceHandle,
1108
1111 _In_ HANDLE ServiceHandle,
1112 _Out_ PUNICODE_STRING DriverName,
1114
1117 _In_ PLDR_DATA_TABLE_ENTRY ModuleObject,
1118 _In_ HANDLE ServiceHandle,
1120 _Out_ NTSTATUS *DriverEntryStatus);
1121
1126 IN HANDLE EnumSubKey,
1127 IN HANDLE ClassKey,
1128 IN BOOLEAN Lower
1129);
1130
1131VOID
1132NTAPI
1134 VOID
1135);
1136
1137VOID
1138NTAPI
1140 VOID
1141);
1142
1143//
1144// File Routines
1145//
1146VOID
1147NTAPI
1148IopDeleteDevice(IN PVOID ObjectBody);
1149
1151NTAPI
1153 IN PVOID ParseObject,
1158 IN OUT PUNICODE_STRING CompleteName,
1163);
1164
1166NTAPI
1168 IN PVOID ParseObject,
1173 IN OUT PUNICODE_STRING CompleteName,
1178);
1179
1180VOID
1181NTAPI
1183 IN PVOID ObjectBody
1184);
1185
1187NTAPI
1189 IN PVOID ObjectBody,
1190 IN SECURITY_OPERATION_CODE OperationCode,
1194 OUT PSECURITY_DESCRIPTOR *OldSecurityDescriptor,
1197);
1198
1200NTAPI
1202 IN PVOID ObjectBody,
1203 IN BOOLEAN HasName,
1204 OUT POBJECT_NAME_INFORMATION ObjectNameInfo,
1205 IN ULONG Length,
1208);
1209
1211NTAPI
1213 IN PVOID ObjectBody,
1214 IN BOOLEAN HasName,
1215 IN BOOLEAN QueryDosName,
1216 OUT POBJECT_NAME_INFORMATION ObjectNameInfo,
1217 IN ULONG Length,
1220);
1221
1222VOID
1223NTAPI
1226 IN PVOID Object,
1229 IN ULONG SystemHandleCount
1230);
1231
1233NTAPI
1238 _Out_ PBOOLEAN LockFailed
1239);
1240
1241PVOID
1242NTAPI
1245);
1246
1248NTAPI
1252 IN BOOLEAN Define
1253);
1254
1255VOID
1256NTAPI
1258 IN PIRP Irp,
1260 IN PREPARSE_DATA_BUFFER DataBuffer
1261);
1262
1264NTAPI
1268);
1269
1271NTAPI
1274 IN ULONG Length,
1275 IN FILE_INFORMATION_CLASS FileInfoClass,
1278);
1279
1280BOOLEAN
1281NTAPI
1283 IN PDEVICE_OBJECT BaseDeviceObject,
1284 IN PDEVICE_OBJECT TopDeviceObjectHint
1285);
1286
1287//
1288// I/O Timer Routines
1289//
1290VOID
1293 VOID
1294);
1295
1296VOID
1297NTAPI
1300);
1301
1302//
1303// I/O Completion Routines
1304//
1305VOID
1306NTAPI
1308 PVOID ObjectBody
1309);
1310
1312NTAPI
1315 IN PVOID KeyContext,
1318 IN ULONG_PTR IoStatusInformation,
1319 IN BOOLEAN Quota
1320);
1321
1322//
1323// Ramdisk Routines
1324//
1325CODE_SEG("INIT")
1327NTAPI
1329 IN PLOADER_PARAMETER_BLOCK LoaderBlock
1330);
1331
1332//
1333// Configuration Routines
1334//
1338 _In_ GUID Guid,
1340 _Out_ PULONG Interfaces
1341);
1342
1343VOID
1345 _In_ PUNICODE_STRING NtSystemPartitionDeviceName,
1346 _In_ PUNICODE_STRING OsLoaderPathName
1347);
1348
1349//
1350// Device action
1351//
1352VOID
1356 _In_opt_ PKEVENT CompletionEvent,
1357 _Out_opt_ NTSTATUS *CompletionStatus);
1358
1363
1364//
1365// PnP notifications
1366//
1367CODE_SEG("PAGE")
1368VOID
1373
1374CODE_SEG("PAGE")
1375VOID
1378
1379CODE_SEG("PAGE")
1380VOID
1384 _In_opt_ PTARGET_DEVICE_CUSTOM_NOTIFICATION CustomNotification);
1385
1386//
1387// PnP IRPs
1388//
1392
1396
1400
1404
1409
1414
1419
1425 _Out_ PWSTR *DeviceText);
1426
1431
1432//
1433// Global I/O Data
1434//
1438extern ULONG IopTraceLevel;
1445extern ULONG IopAutoReboot;
1454
1455//
1456// Inlined Functions
1457//
1458#include "io_x.h"
#define CODE_SEG(...)
_In_ PVOID _In_ ULONG _Out_ PVOID _In_ ULONG _Inout_ PULONG ReturnLength
_In_ PVOID _In_ ULONG _Out_ PVOID _In_ ULONG _Inout_ PULONG _In_ KPROCESSOR_MODE PreviousMode
@ DeviceNode
Definition: Node.h:9
static GENERIC_MAPPING GenericMapping
Definition: SeInheritance.c:11
static ULONG StackSize
Definition: StackOverflow.c:21
Type
Definition: Type.h:7
unsigned char BOOLEAN
Definition: actypes.h:127
LONG NTSTATUS
Definition: precomp.h:26
static WCHAR ServiceName[]
Definition: browser.c:20
_In_ ULONG _In_ BATTERY_QUERY_INFORMATION_LEVEL _In_ LONG _In_ ULONG _Out_ PULONG ReturnedLength
Definition: batclass.h:188
static const CLASS_AND_INTERFACES ExpectedInterfaces[]
Definition: browseui.c:14
PDEVICE_OBJECT PhysicalDeviceObject
Definition: btrfs_drv.h:1157
_Inout_ PFCB _Inout_ PUNICODE_STRING RemainingName
Definition: cdprocs.h:802
Definition: bufpool.h:45
_In_ PIRP Irp
Definition: csq.h:116
LPWSTR Name
Definition: desk.c:124
#define NTSTATUS
Definition: precomp.h:19
static const WCHAR SymbolicLink[]
Definition: interface.c:31
static const WCHAR Signature[]
Definition: parser.c:141
NTSTATUS NTAPI IoCompletion(PDEVICE_OBJECT DeviceObject, PIRP Irp, PVOID Ctx)
Definition: control.c:383
ULONG KSPIN_LOCK
Definition: env_spec_w32.h:72
@ Success
Definition: eventcreate.c:712
IN OUT PVCB IN PDEVICE_OBJECT IN PVPB Vpb
Definition: fatprocs.h:1676
#define MAXIMUM_PROCESSORS
Definition: rwlock.h:5
_In_opt_ PFILE_OBJECT _In_opt_ PETHREAD Thread
Definition: fltkernel.h:2653
_Must_inspect_result_ _In_ PFILE_OBJECT _In_ SECURITY_INFORMATION SecurityInformation
Definition: fltkernel.h:1340
enum _FILE_INFORMATION_CLASS FILE_INFORMATION_CLASS
Definition: directory.c:44
_In_ PLIST_ENTRY _In_ PSTRING _In_ USHORT _In_opt_ PSTRING _In_opt_ PSTRING _In_ ULONG _In_ ULONG _In_opt_ PVOID _In_opt_ PVOID FilterContext
Definition: fsrtlfuncs.h:746
_Must_inspect_result_ _In_ PLARGE_INTEGER _In_ PLARGE_INTEGER _In_ ULONG _In_ PFILE_OBJECT _In_ PVOID Process
Definition: fsrtlfuncs.h:223
_Must_inspect_result_ _In_ WDFDEVICE _In_ REFGUID EventGuid
ULONG Handle
Definition: gdb_input.c:15
Status
Definition: gdiplustypes.h:25
* PNTSTATUS
Definition: strlen.c:14
ObjectType
Definition: metafile.c:81
DWORD * PSECURITY_INFORMATION
Definition: ms-dtyp.idl:311
__in UCHAR __in POWER_STATE __in_opt PVOID __in PIO_STATUS_BLOCK IoStatus
Definition: mxum.h:159
_Must_inspect_result_ _Out_ PNDIS_STATUS _In_ NDIS_HANDLE _In_ ULONG _Out_ PNDIS_STRING _Out_ PNDIS_HANDLE KeyHandle
Definition: ndis.h:4715
_In_ ACCESS_MASK _In_ POBJECT_ATTRIBUTES _Reserved_ ULONG _In_opt_ PUNICODE_STRING _In_ ULONG _Out_opt_ PULONG Disposition
Definition: cmfuncs.h:56
_In_ PVOID _In_ BOOLEAN Alertable
Definition: exfuncs.h:453
_In_opt_ HANDLE _In_opt_ PIO_APC_ROUTINE _In_opt_ PVOID ApcContext
Definition: iofuncs.h:727
enum _PNP_DEVNODE_STATE PNP_DEVNODE_STATE
VOID(NTAPI * PKNORMAL_ROUTINE)(IN PVOID NormalContext OPTIONAL, IN PVOID SystemArgument1 OPTIONAL, IN PVOID SystemArgument2 OPTIONAL)
Definition: ketypes.h:869
#define _Out_opt_
Definition: no_sal2.h:214
#define _Out_
Definition: no_sal2.h:160
#define _In_
Definition: no_sal2.h:158
#define _In_opt_
Definition: no_sal2.h:212
ULONG ACCESS_MASK
Definition: nt_native.h:40
ACCESS_MASK * PACCESS_MASK
Definition: nt_native.h:41
#define FASTCALL
Definition: nt_native.h:50
_In_ ULONG _In_ ULONG _In_ ULONG Length
Definition: ntddpcm.h:102
static OUT PIO_STATUS_BLOCK IoStatusBlock
Definition: pipe.c:75
@ FILE_OBJECT
Definition: ntobjenum.h:17
NTSTATUS PiIrpQueryResources(_In_ PDEVICE_NODE DeviceNode, _Out_ PCM_RESOURCE_LIST *Resources)
Definition: pnpirp.c:201
struct _DRIVER_INFORMATION DRIVER_INFORMATION
PVOID IoOpenFileOnDevice(IN PVOID SymbolicLink, IN PWCHAR Name)
LIST_ENTRY IopErrorLogListHead
Definition: error.c:30
NTSTATUS NTAPI IopOpenRegistryKeyEx(PHANDLE KeyHandle, HANDLE ParentKey, PUNICODE_STRING Name, ACCESS_MASK DesiredAccess)
Definition: pnpmgr.c:885
NTSTATUS PiIrpStartDevice(_In_ PDEVICE_NODE DeviceNode)
Definition: pnpirp.c:87
LIST_ENTRY IopDeviceActionRequestList
Definition: devaction.c:46
PDEVICE_NODE FASTCALL IopGetDeviceNode(IN PDEVICE_OBJECT DeviceObject)
NTSTATUS PiIrpQueryPnPDeviceState(_In_ PDEVICE_NODE DeviceNode, _Out_ PPNP_DEVICE_STATE DeviceState)
Definition: pnpirp.c:284
enum _SECURITY_DESCRIPTOR_TYPE SECURITY_DESCRIPTOR_TYPE
BOOLEAN NTAPI IoInitSystem(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
Definition: iomgr.c:466
enum _IOP_TRANSFER_TYPE IOP_TRANSFER_TYPE
NTSTATUS PiIrpCancelStopDevice(_In_ PDEVICE_NODE DeviceNode)
Definition: pnpirp.c:154
VOID NTAPI IoCancelThreadIo(IN PETHREAD Thread)
Definition: irp.c:1146
struct _EXTENDED_IO_REMOVE_LOCK * PEXTENDED_IO_REMOVE_LOCK
VOID NTAPI IopRemoveTimerFromTimerList(IN PIO_TIMER Timer)
Definition: iotimer.c:70
NTSTATUS NTAPI RawFsDriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
Definition: rawfs.c:1193
VOID NTAPI IopReinitializeBootDrivers(VOID)
Definition: driver.c:1544
NTSTATUS NTAPI IoChangeFileObjectFilterContext(IN PFILE_OBJECT FileObject, IN PVOID FilterContext, IN BOOLEAN Define)
Definition: file.c:2509
KSPIN_LOCK IopDeviceActionLock
Definition: devaction.c:49
_DEVICE_ACTION
Definition: io.h:524
@ PiActionResetDevice
Definition: io.h:527
@ PiActionQueryState
Definition: io.h:530
@ PiActionAddBootDevices
Definition: io.h:528
@ PiActionStartDevice
Definition: io.h:529
@ PiActionEnumRootDevices
Definition: io.h:526
@ PiActionEnumDeviceTree
Definition: io.h:525
NTSTATUS IopInitPlugPlayEvents(VOID)
Definition: plugplay.c:40
NTSTATUS IopInitializeDriverModule(_In_ PLDR_DATA_TABLE_ENTRY ModuleObject, _In_ HANDLE ServiceHandle, _Out_ PDRIVER_OBJECT *DriverObject, _Out_ NTSTATUS *DriverEntryStatus)
Initialize a loaded driver.
Definition: driver.c:449
ULONG NTAPI PnpDetermineResourceListSize(IN PCM_RESOURCE_LIST ResourceList)
Definition: pnpmgr.c:1237
VOID NTAPI IopLogWorker(IN PVOID Parameter)
Definition: error.c:148
VOID NTAPI IopUnloadDevice(IN PDEVICE_OBJECT DeviceObject)
Definition: device.c:391
NTSTATUS IopLoadDriver(_In_ HANDLE ServiceHandle, _Out_ PDRIVER_OBJECT *DriverObject)
Definition: driver.c:1950
POBJECT_TYPE _IoFileObjectType
VOID PnpRootInitializeDevExtension(VOID)
Definition: pnproot.c:1440
BOOLEAN NTAPI IoInitializeCrashDump(IN HANDLE PageFileHandle)
Definition: iomgr.c:650
GENERIC_MAPPING IopFileMapping
Definition: iomgr.c:50
NTSTATUS NTAPI IopReferenceDeviceObject(IN PDEVICE_OBJECT DeviceObject)
VOID PiInsertDevNode(_In_ PDEVICE_NODE DeviceNode, _In_ PDEVICE_NODE ParentNode)
Definition: devnode.c:80
BOOLEAN IoRemoteBootClient
Definition: init.c:70
NTSTATUS NTAPI IopFixupResourceListWithRequirements(IN PIO_RESOURCE_REQUIREMENTS_LIST RequirementsList, OUT PCM_RESOURCE_LIST *ResourceList)
Definition: pnpres.c:219
_SECURITY_DESCRIPTOR_TYPE
Definition: io.h:512
@ RestrictedPublicOpen
Definition: io.h:515
@ RestrictedPublic
Definition: io.h:513
@ UnrestrictedPublicOpen
Definition: io.h:516
@ SystemDefault
Definition: io.h:517
@ UnrestrictedPublic
Definition: io.h:514
USHORT NTAPI PpInitGetGroupOrderIndex(IN HANDLE ServiceHandle)
Definition: pnpinit.c:149
PVOID IoOpenSymlink(IN PVOID SymbolicLink)
VOID NTAPI IopCompleteRequest(IN PKAPC Apc, IN PKNORMAL_ROUTINE *NormalRoutine, IN PVOID *NormalContext, IN PVOID *SystemArgument1, IN PVOID *SystemArgument2)
Definition: irp.c:238
NTSTATUS IopFetchConfigurationInformation(_Out_ PWSTR *SymbolicLinkList, _In_ GUID Guid, _In_ ULONG ExpectedInterfaces, _Out_ PULONG Interfaces)
Definition: iorsrce.c:821
NTSTATUS NTAPI IopGetSetSecurityObject(IN PVOID ObjectBody, IN SECURITY_OPERATION_CODE OperationCode, IN PSECURITY_INFORMATION SecurityInformation, IN OUT PSECURITY_DESCRIPTOR SecurityDescriptor, IN OUT PULONG BufferLength, OUT PSECURITY_DESCRIPTOR *OldSecurityDescriptor, IN POOL_TYPE PoolType, IN OUT PGENERIC_MAPPING GenericMapping)
NTSTATUS NTAPI IopQueryDeviceCapabilities(PDEVICE_NODE DeviceNode, PDEVICE_CAPABILITIES DeviceCaps)
Definition: devaction.c:857
NTSTATUS NTAPI IoComputeDesiredAccessFileObject(IN PFILE_OBJECT FileObject, IN PACCESS_MASK DesiredAccess)
Definition: util.c:26
VOID NTAPI IopShutdownBaseFileSystems(IN PLIST_ENTRY ListHead)
Definition: volume.c:349
BOOLEAN NTAPI IopInitializeReserveIrp(IN PRESERVE_IRP_ALLOCATOR ReserveIrpAllocator)
Definition: irp.c:549
struct _OPEN_PACKET * POPEN_PACKET
VOID IopStartBootLog(VOID)
Definition: bootlog.c:38
NTSTATUS NTAPI IopAssignDeviceResources(IN PDEVICE_NODE DeviceNode)
Definition: pnpres.c:1116
PVPB NTAPI IopCheckVpbMounted(IN POPEN_PACKET OpenPacket, IN PDEVICE_OBJECT DeviceObject, IN PUNICODE_STRING RemainingName, OUT PNTSTATUS Status)
Definition: volume.c:76
struct _FILE_OBJECT_EXTENSION FILE_OBJECT_EXTENSION
VOID IopStoreSystemPartitionInformation(_In_ PUNICODE_STRING NtSystemPartitionDeviceName, _In_ PUNICODE_STRING OsLoaderPathName)
Definition: iorsrce.c:860
struct _IOP_MINI_COMPLETION_PACKET IOP_MINI_COMPLETION_PACKET
VOID FASTCALL IopInitializeSystemDrivers(VOID)
Definition: driver.c:1222
POBJECT_TYPE IoCompletionType
Definition: iocomp.c:16
PDEVICE_NODE PipAllocateDeviceNode(IN PDEVICE_OBJECT PhysicalDeviceObject)
struct _EXTENDED_IO_REMOVE_LOCK EXTENDED_IO_REMOVE_LOCK
VOID PiClearDevNodeProblem(_In_ PDEVICE_NODE DeviceNode)
Definition: devnode.c:141
struct _IO_BUS_TYPE_GUID_LIST IO_BUS_TYPE_GUID_LIST
PIRP NTAPI IopAllocateReserveIrp(IN CCHAR StackSize)
Definition: irp.c:573
VOID IopInitBootLog(IN BOOLEAN StartBootLog)
VOID IopSaveBootLogToFile(VOID)
Definition: bootlog.c:288
KSPIN_LOCK IopDeviceTreeLock
Definition: devnode.c:19
ULONG IopNumTriageDumpDataBlocks
Definition: iomgr.c:47
struct _ERROR_LOG_ENTRY * PERROR_LOG_ENTRY
NTSTATUS NTAPI IopQueryNameInternal(IN PVOID ObjectBody, IN BOOLEAN HasName, IN BOOLEAN QueryDosName, OUT POBJECT_NAME_INFORMATION ObjectNameInfo, IN ULONG Length, OUT PULONG ReturnLength, IN KPROCESSOR_MODE PreviousMode)
Definition: file.c:1941
BOOLEAN NTAPI IopVerifyDeviceObjectOnStack(IN PDEVICE_OBJECT BaseDeviceObject, IN PDEVICE_OBJECT TopDeviceObjectHint)
Definition: device.c:696
VOID NTAPI IopInitErrorLog(VOID)
NTSTATUS NTAPI IopCreateDeviceKeyPath(IN PCUNICODE_STRING RegistryPath, IN ULONG CreateOptions, OUT PHANDLE Handle)
Definition: pnpmgr.c:522
enum _IOP_DEVICE_LIST_OPERATION * PIOP_DEVICE_LIST_OPERATION
VOID PiNotifyTargetDeviceChange(_In_ LPCGUID Event, _In_ PDEVICE_OBJECT DeviceObject, _In_opt_ PTARGET_DEVICE_CUSTOM_NOTIFICATION CustomNotification)
Delivers the event to all drivers subscribed to EventCategoryTargetDeviceChange PnP event.
Definition: pnpnotify.c:258
VOID NTAPI IopDereferenceDeviceObject(IN PDEVICE_OBJECT DeviceObject, IN BOOLEAN ForceUnload)
Definition: device.c:463
NTSTATUS NTAPI IopCleanupFailedIrp(IN PFILE_OBJECT FileObject, IN PKEVENT EventObject, IN PVOID Buffer OPTIONAL)
Definition: irp.c:45
NTSTATUS NTAPI IopCreateVpb(IN PDEVICE_OBJECT DeviceObject)
Definition: volume.c:158
NTSTATUS PnpRootRegisterDevice(IN PDEVICE_OBJECT DeviceObject)
Definition: pnproot.c:107
BOOLEAN NTAPI PnpRegSzToString(IN PWCHAR RegSzData, IN ULONG RegSzLength, OUT PUSHORT StringLength OPTIONAL)
Definition: pnputil.c:171
USHORT NTAPI PipGetDriverTagPriority(IN HANDLE ServiceHandle)
Definition: pnpinit.c:192
NTSTATUS NTAPI IopInitializePlugPlayServices(VOID)
Definition: pnpinit.c:287
struct _FS_CHANGE_NOTIFY_ENTRY FS_CHANGE_NOTIFY_ENTRY
VOID PnpInit2(VOID)
NTSTATUS NTAPI IopParseFile(IN PVOID ParseObject, IN PVOID ObjectType, IN OUT PACCESS_STATE AccessState, IN KPROCESSOR_MODE AccessMode, IN ULONG Attributes, IN OUT PUNICODE_STRING CompleteName, IN OUT PUNICODE_STRING RemainingName, IN OUT PVOID Context OPTIONAL, IN PSECURITY_QUALITY_OF_SERVICE SecurityQos OPTIONAL, OUT PVOID *Object)
Definition: file.c:1316
NTSTATUS PnpRootCreateDevice(IN PUNICODE_STRING ServiceName, OUT PDEVICE_OBJECT *PhysicalDeviceObject, OUT PUNICODE_STRING FullInstancePath)
Definition: pnproot.c:184
NTSTATUS IopGetSystemPowerDeviceObject(IN PDEVICE_OBJECT *DeviceObject)
VOID NTAPI IopDoNameTransmogrify(IN PIRP Irp, IN PFILE_OBJECT FileObject, IN PREPARSE_DATA_BUFFER DataBuffer)
Definition: file.c:167
enum _SECURITY_DESCRIPTOR_TYPE * PSECURITY_DESCRIPTOR_TYPE
_IOP_TRANSFER_TYPE
Definition: io.h:259
@ IopWriteTransfer
Definition: io.h:261
@ IopReadTransfer
Definition: io.h:260
@ IopOtherTransfer
Definition: io.h:262
PVOID IopTriageDumpDataBlocks[64]
Definition: iomgr.c:48
NTSTATUS NTAPI IopGetRelatedTargetDevice(IN PFILE_OBJECT FileObject, OUT PDEVICE_NODE *DeviceNode)
Definition: device.c:654
NTSTATUS NTAPI IoGetRelatedTargetDevice(IN PFILE_OBJECT FileObject, OUT PDEVICE_OBJECT *DeviceObject)
Definition: device.c:1617
NTSTATUS IopQueueDeviceInstallEvent(_In_ const GUID *Guid, _In_ PUNICODE_STRING DeviceId)
Definition: plugplay.c:97
VOID IopInitDriverImplementation(VOID)
VOID NTAPI IopAbortInterruptedIrp(IN PKEVENT EventObject, IN PIRP Irp)
Definition: irp.c:67
NTSTATUS NTAPI IopGetRegistryValue(IN HANDLE Handle, IN PWSTR ValueName, OUT PKEY_VALUE_FULL_INFORMATION *Information)
Definition: pnpmgr.c:1036
ULONG IopAutoReboot
Definition: iomgr.c:46
VOID NTAPI IoInitVpbImplementation(VOID)
PIRP NTAPI IopAllocateIrpMustSucceed(IN CCHAR StackSize)
Definition: irp.c:716
NTSTATUS FASTCALL IopAttachFilterDrivers(IN PDEVICE_NODE DeviceNode, IN HANDLE EnumSubKey, IN HANDLE ClassKey, IN BOOLEAN Lower)
struct _SHUTDOWN_ENTRY SHUTDOWN_ENTRY
struct _IO_INTERRUPT * PIO_INTERRUPT
NTSTATUS NTAPI PiInitCacheGroupInformation(VOID)
Definition: pnpinit.c:94
PIO_BUS_TYPE_GUID_LIST IopBusTypeGuidList
struct _FS_CHANGE_NOTIFY_ENTRY * PFS_CHANGE_NOTIFY_ENTRY
NTSTATUS NTAPI PnpRootDriverEntry(IN PDRIVER_OBJECT DriverObject, IN PUNICODE_STRING RegistryPath)
Definition: pnproot.c:1488
_COMPLETION_PACKET_TYPE
Definition: io.h:269
@ IopCompletionPacketIrp
Definition: io.h:270
@ IopCompletionPacketMini
Definition: io.h:271
@ IopCompletionPacketQuota
Definition: io.h:272
struct _DRIVER_INFORMATION * PDRIVER_INFORMATION
NTSTATUS IopTraverseDeviceTree(PDEVICETREE_TRAVERSE_CONTEXT Context)
NTSTATUS IopQueueDeviceChangeEvent(_In_ const GUID *EventGuid, _In_ const GUID *InterfaceClassGuid, _In_ PUNICODE_STRING SymbolicLinkName)
Definition: plugplay.c:52
VOID PiNotifyDeviceInterfaceChange(_In_ LPCGUID Event, _In_ LPCGUID InterfaceClassGuid, _In_ PUNICODE_STRING SymbolicLinkName)
Delivers the event to all drivers subscribed to EventCategoryDeviceInterfaceChange.
Definition: pnpnotify.c:161
VOID PiSetDevNodeText(_In_ PDEVICE_NODE DeviceNode, _In_ HANDLE InstanceKey)
Sets the DeviceNode's DeviceDesc and LocationInformation registry values.
Definition: devaction.c:1092
NTSTATUS IopSynchronousCall(IN PDEVICE_OBJECT DeviceObject, IN PIO_STACK_LOCATION IoStackLocation, OUT PVOID *Information)
NTSTATUS IopFreeDeviceNode(IN PDEVICE_NODE DeviceNode)
struct _DUMMY_FILE_OBJECT DUMMY_FILE_OBJECT
VOID NTAPI IoShutdownSystem(IN ULONG Phase)
Definition: device.c:134
NTSTATUS NTAPI IopInitiatePnpIrp(IN PDEVICE_OBJECT DeviceObject, IN PIO_STATUS_BLOCK IoStatusBlock, IN UCHAR MinorFunction, IN PIO_STACK_LOCATION Stack)
PVOID NTAPI IoGetFileObjectFilterContext(IN PFILE_OBJECT FileObject)
Definition: file.c:2494
NTSTATUS NTAPI IopQueryName(IN PVOID ObjectBody, IN BOOLEAN HasName, OUT POBJECT_NAME_INFORMATION ObjectNameInfo, IN ULONG Length, OUT PULONG ReturnLength, IN KPROCESSOR_MODE PreviousMode)
Definition: file.c:1923
NTSTATUS NTAPI IopAcquireFileObjectLock(_In_ PFILE_OBJECT FileObject, _In_ KPROCESSOR_MODE AccessMode, _In_ BOOLEAN Alertable, _Out_ PBOOLEAN LockFailed)
Definition: file.c:2448
VOID NTAPI IopDeleteDriver(IN PVOID ObjectBody)
Definition: driver.c:77
struct _IO_UNLOAD_SAFE_COMPLETION_CONTEXT * PIO_UNLOAD_SAFE_COMPLETION_CONTEXT
struct _RESERVE_IRP_ALLOCATOR RESERVE_IRP_ALLOCATOR
NTSTATUS IopGetDriverNames(_In_ HANDLE ServiceHandle, _Out_ PUNICODE_STRING DriverName, _Out_opt_ PUNICODE_STRING ServiceName)
Definition: driver.c:123
VOID FASTCALL IopInitializeBootDrivers(VOID)
Definition: driver.c:1035
NTSTATUS PiIrpQueryResourceRequirements(_In_ PDEVICE_NODE DeviceNode, _Out_ PIO_RESOURCE_REQUIREMENTS_LIST *Resources)
Definition: pnpirp.c:227
NTSTATUS NTAPI IopUpdateRootKey(VOID)
Definition: pnpmap.c:670
VOID PiSetDevNodeProblem(_In_ PDEVICE_NODE DeviceNode, _In_ UINT32 Problem)
Definition: devnode.c:132
NTSTATUS NTAPI IopCreateRegistryKeyEx(OUT PHANDLE Handle, IN HANDLE BaseHandle OPTIONAL, IN PUNICODE_STRING KeyName, IN ACCESS_MASK DesiredAccess, IN ULONG CreateOptions, OUT PULONG Disposition OPTIONAL)
NTSTATUS NTAPI IopStartRamdisk(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
Definition: ramdisk.c:26
PNP_DEVNODE_STATE PiSetDevNodeState(_In_ PDEVICE_NODE DeviceNode, _In_ PNP_DEVNODE_STATE NewState)
Definition: devnode.c:108
enum _DEVICE_ACTION DEVICE_ACTION
NTSTATUS NTAPI PipCallDriverAddDevice(IN PDEVICE_NODE DeviceNode, IN BOOLEAN LoadDriver, IN PDRIVER_OBJECT DriverObject)
struct _DUMMY_FILE_OBJECT * PDUMMY_FILE_OBJECT
struct _IO_BUS_TYPE_GUID_LIST * PIO_BUS_TYPE_GUID_LIST
struct _SHUTDOWN_ENTRY * PSHUTDOWN_ENTRY
NTSTATUS NTAPI IopDetectResourceConflict(IN PCM_RESOURCE_LIST ResourceList, IN BOOLEAN Silent, OUT OPTIONAL PCM_PARTIAL_RESOURCE_DESCRIPTOR ConflictingDescriptor)
Definition: pnpres.c:1255
enum _IOP_TRANSFER_TYPE * PIOP_TRANSFER_TYPE
enum _COMPLETION_PACKET_TYPE COMPLETION_PACKET_TYPE
VOID NTAPI IoInitFileSystemImplementation(VOID)
VOID IopStopBootLog(VOID)
Definition: bootlog.c:46
VOID NTAPI IopCloseFile(IN PEPROCESS Process OPTIONAL, IN PVOID Object, IN ACCESS_MASK GrantedAccess, IN ULONG ProcessHandleCount, IN ULONG SystemHandleCount)
Definition: file.c:2176
VOID NTAPI IopReinitializeDrivers(VOID)
Definition: driver.c:1508
struct _DEVICETREE_TRAVERSE_CONTEXT DEVICETREE_TRAVERSE_CONTEXT
VOID IoInitCancelHandling(VOID)
NTSTATUS PiIrpQueryStopDevice(_In_ PDEVICE_NODE DeviceNode)
Definition: pnpirp.c:133
struct _FILE_OBJECT_EXTENSION * PFILE_OBJECT_EXTENSION
NTSTATUS NTAPI IoSetIoCompletion(IN PVOID IoCompletion, IN PVOID KeyContext, IN PVOID ApcContext, IN NTSTATUS IoStatus, IN ULONG_PTR IoStatusInformation, IN BOOLEAN Quota)
Definition: iocomp.c:147
NTSTATUS PiIrpStopDevice(_In_ PDEVICE_NODE DeviceNode)
Definition: pnpirp.c:111
PIO_BUS_TYPE_GUID_LIST PnpBusTypeGuidList
Definition: pnpmgr.c:27
NTSTATUS IopQueueTargetDeviceEvent(_In_ const GUID *Guid, _In_ PUNICODE_STRING DeviceIds)
PDRIVER_OBJECT IopRootDriverObject
Definition: pnpmgr.c:26
NTSTATUS NTAPI IopGetFileInformation(IN PFILE_OBJECT FileObject, IN ULONG Length, IN FILE_INFORMATION_CLASS FileInfoClass, OUT PVOID Buffer, OUT PULONG ReturnedLength)
Definition: iofunc.c:777
NTSTATUS NTAPI IopMountVolume(IN PDEVICE_OBJECT DeviceObject, IN BOOLEAN AllowRawMount, IN BOOLEAN DeviceIsLocked, IN BOOLEAN Alertable, OUT PVPB *Vpb)
Definition: volume.c:462
VOID FASTCALL IopInitTimerImplementation(VOID)
NTSTATUS NTAPI IopReassignSystemRoot(IN PLOADER_PARAMETER_BLOCK LoaderBlock, OUT PANSI_STRING NtBootPath)
Definition: arcname.c:839
GENERAL_LOOKASIDE IopMdlLookasideList
Definition: iomgr.c:85
BOOLEAN IopVerifyDiskSignature(_In_ PDRIVE_LAYOUT_INFORMATION_EX DriveLayout, _In_ PARC_DISK_SIGNATURE ArcDiskSignature, _Out_ PULONG Signature)
Definition: arcname.c:946
struct _IO_UNLOAD_SAFE_COMPLETION_CONTEXT IO_UNLOAD_SAFE_COMPLETION_CONTEXT
struct _DRIVER_REINIT_ITEM * PDRIVER_REINIT_ITEM
VOID NTAPI IopDereferenceVpbAndFree(IN PVPB Vpb)
Definition: volume.c:186
VOID PiQueueDeviceAction(_In_ PDEVICE_OBJECT DeviceObject, _In_ DEVICE_ACTION Action, _In_opt_ PKEVENT CompletionEvent, _Out_opt_ NTSTATUS *CompletionStatus)
Queue a device operation to a worker thread.
Definition: devaction.c:2668
PDEVICE_OBJECT NTAPI IopGetDeviceAttachmentBase(IN PDEVICE_OBJECT DeviceObject)
Definition: file.c:1483
NTSTATUS(* DEVICETREE_TRAVERSE_ROUTINE)(IN PDEVICE_NODE DeviceNode, IN PVOID Context)
Definition: io.h:465
struct _IO_WORKITEM IO_WORKITEM
VOID PiInitializeNotifications(VOID)
Definition: pnpnotify.c:55
NTSTATUS PiIrpQueryDeviceText(_In_ PDEVICE_NODE DeviceNode, _In_ LCID LocaleId, _In_ DEVICE_TEXT_TYPE Type, _Out_ PWSTR *DeviceText)
Definition: pnpirp.c:253
VOID NTAPI IopDeleteDevice(IN PVOID ObjectBody)
Definition: device.c:52
ULONG IopTraceLevel
Definition: iomgr.c:16
PDEVICE_NODE IopRootDeviceNode
Definition: devnode.c:18
HAL_DISPATCH _HalDispatchTable
NTSTATUS NTAPI PnpRegMultiSzToUnicodeStrings(IN PKEY_VALUE_FULL_INFORMATION KeyValueInformation, OUT PUNICODE_STRING *UnicodeStringList, OUT PULONG UnicodeStringCount)
Definition: pnputil.c:47
VOID NTAPI IopDeleteIoCompletion(PVOID ObjectBody)
Definition: iocomp.c:100
struct _IOP_MINI_COMPLETION_PACKET * PIOP_MINI_COMPLETION_PACKET
BOOLEAN RawFsIsRawFileSystemDeviceObject(IN PDEVICE_OBJECT DeviceObject)
BOOLEAN NTAPI PpInitSystem(VOID)
Definition: pnpmgr.c:1142
struct _ERROR_LOG_ENTRY ERROR_LOG_ENTRY
NTSTATUS PiIrpQueryDeviceRelations(_In_ PDEVICE_NODE DeviceNode, _In_ DEVICE_RELATION_TYPE Type)
Definition: pnpirp.c:176
_IOP_DEVICE_LIST_OPERATION
Definition: io.h:250
@ IopAdd
Definition: io.h:252
@ IopRemove
Definition: io.h:251
GENERIC_MAPPING IopCompletionMapping
Definition: iocomp.c:20
NTSTATUS PiPerformSyncDeviceAction(_In_ PDEVICE_OBJECT DeviceObject, _In_ DEVICE_ACTION Action)
Perfom a device operation synchronously via PiQueueDeviceAction.
Definition: devaction.c:2727
VOID NTAPI IopDeleteFile(IN PVOID ObjectBody)
Definition: file.c:1352
struct _DEVICETREE_TRAVERSE_CONTEXT * PDEVICETREE_TRAVERSE_CONTEXT
NTSTATUS NTAPI IopParseDevice(IN PVOID ParseObject, IN PVOID ObjectType, IN OUT PACCESS_STATE AccessState, IN KPROCESSOR_MODE AccessMode, IN ULONG Attributes, IN OUT PUNICODE_STRING CompleteName, IN OUT PUNICODE_STRING RemainingName, IN OUT PVOID Context, IN PSECURITY_QUALITY_OF_SERVICE SecurityQos OPTIONAL, OUT PVOID *Object)
Definition: file.c:321
VOID IopBootLog(IN PUNICODE_STRING DriverName, IN BOOLEAN Success)
struct _OPEN_PACKET OPEN_PACKET
VOID NTAPI IopReadyDeviceObjects(IN PDRIVER_OBJECT Driver)
Definition: device.c:34
NTSTATUS NTAPI IopCreateArcNames(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
Definition: arcname.c:39
enum _IOP_DEVICE_LIST_OPERATION IOP_DEVICE_LIST_OPERATION
struct _IO_INTERRUPT IO_INTERRUPT
enum _COMPLETION_PACKET_TYPE * PCOMPLETION_PACKET_TYPE
struct _RESERVE_IRP_ALLOCATOR * PRESERVE_IRP_ALLOCATOR
RESERVE_IRP_ALLOCATOR IopReserveIrpAllocator
Definition: irp.c:19
VOID IoInitShutdownNotification(VOID)
VOID PiNotifyHardwareProfileChange(_In_ LPCGUID Event)
Delivers the event to all drivers subscribed to EventCategoryHardwareProfileChange PnP event.
Definition: pnpnotify.c:214
struct _DRIVER_REINIT_ITEM DRIVER_REINIT_ITEM
NTSTATUS PnpRootCreateDeviceObject(OUT PDEVICE_OBJECT *DeviceObject)
Definition: pnproot.c:167
PVOID *typedef PHANDLE
Definition: ntsecpkg.h:455
long LONG
Definition: pedump.c:60
unsigned short USHORT
Definition: pedump.c:61
char CHAR
Definition: pedump.c:57
DWORD LCID
Definition: nls.h:13
PULONG MinorVersion OPTIONAL
Definition: CrossNt.h:68
_In_ PVOID Context
Definition: storport.h:2269
Definition: arc.h:334
PDEVICE_NODE FirstDeviceNode
Definition: io.h:483
PDEVICE_NODE DeviceNode
Definition: io.h:478
DEVICETREE_TRAVERSE_ROUTINE Action
Definition: io.h:488
NTSTATUS Status
Definition: io.h:409
HANDLE ServiceHandle
Definition: io.h:405
PBOOT_DRIVER_LIST_ENTRY DataTableEntry
Definition: io.h:404
ULONG Failed
Definition: io.h:407
LIST_ENTRY Link
Definition: io.h:402
ULONG Processed
Definition: io.h:408
USHORT TagPosition
Definition: io.h:406
PDRIVER_OBJECT DriverObject
Definition: io.h:403
PDRIVER_OBJECT DriverObject
Definition: io.h:448
PDRIVER_REINITIALIZE ReinitRoutine
Definition: io.h:449
LIST_ENTRY ItemEntry
Definition: io.h:447
PVOID Context
Definition: io.h:450
CHAR FileObjectBody[sizeof(FILE_OBJECT)]
Definition: io.h:358
OBJECT_HEADER ObjectHeader
Definition: io.h:357
Definition: io.h:331
LARGE_INTEGER TimeStamp
Definition: io.h:337
CSHORT Size
Definition: io.h:333
CSHORT Type
Definition: io.h:332
LIST_ENTRY ListEntry
Definition: io.h:334
PDEVICE_OBJECT DeviceObject
Definition: io.h:335
PDRIVER_OBJECT DriverObject
Definition: io.h:336
IO_REMOVE_LOCK_DBG_BLOCK Dbg
Definition: io.h:348
IO_REMOVE_LOCK_COMMON_BLOCK Common
Definition: io.h:347
PDEVICE_OBJECT TopDeviceObjectHint
Definition: io.h:102
PVOID FilterContext
Definition: io.h:103
Definition: io.h:436
PDRIVER_FS_NOTIFICATION FSDNotificationProc
Definition: io.h:439
LIST_ENTRY FsChangeNotifyList
Definition: io.h:437
PDRIVER_OBJECT DriverObject
Definition: io.h:438
ULONG_PTR IoStatusInformation
Definition: io.h:293
struct _IO_STACK_LOCATION * CurrentStackLocation
Definition: io.h:286
LIST_ENTRY ListEntry
Definition: io.h:283
GUID Guids[1]
Definition: io.h:419
FAST_MUTEX Lock
Definition: io.h:418
KSPIN_LOCK SpinLock
Definition: io.h:324
KINTERRUPT FirstInterrupt
Definition: io.h:322
PIO_COMPLETION_ROUTINE CompletionRoutine
Definition: io.h:303
PDEVICE_OBJECT DeviceObject
Definition: io.h:301
PIO_WORKITEM_ROUTINE WorkerRoutine
Definition: io.h:313
PDEVICE_OBJECT DeviceObject
Definition: io.h:312
WORK_QUEUE_ITEM Item
Definition: io.h:311
PVOID Context
Definition: io.h:314
Definition: ketypes.h:599
Definition: btrfs_drv.h:1876
Definition: typedefs.h:120
LARGE_INTEGER AllocationSize
Definition: io.h:375
BOOLEAN Override
Definition: io.h:387
BOOLEAN DeleteOnly
Definition: io.h:389
OBJECT_ATTRIBUTES OriginalAttributes
Definition: io.h:374
PFILE_BASIC_INFORMATION BasicInformation
Definition: io.h:383
USHORT FileAttributes
Definition: io.h:377
PVOID ExtraCreateParameters
Definition: io.h:386
PFILE_NETWORK_OPEN_INFORMATION NetworkInformation
Definition: io.h:384
USHORT ShareAccess
Definition: io.h:378
BOOLEAN FullAttributes
Definition: io.h:390
NTSTATUS FinalStatus
Definition: io.h:370
CREATE_FILE_TYPE CreateFileType
Definition: io.h:385
PDUMMY_FILE_OBJECT LocalFileObject
Definition: io.h:391
CSHORT Type
Definition: io.h:367
ULONG_PTR Information
Definition: io.h:371
ULONG InternalFlags
Definition: io.h:393
ULONG Disposition
Definition: io.h:382
PDEVICE_OBJECT TopDeviceObjectHint
Definition: io.h:394
PFILE_OBJECT FileObject
Definition: io.h:369
ULONG Options
Definition: io.h:381
BOOLEAN TraversedMountPoint
Definition: io.h:392
PFILE_OBJECT RelatedFileObject
Definition: io.h:373
ULONG ParseCheck
Definition: io.h:372
CSHORT Size
Definition: io.h:368
ULONG CreateOptions
Definition: io.h:376
PVOID EaBuffer
Definition: io.h:379
ULONG EaLength
Definition: io.h:380
BOOLEAN QueryOnly
Definition: io.h:388
volatile LONG ReserveIrpInUse
Definition: io.h:503
KEVENT WaitEvent
Definition: io.h:504
Definition: io.h:427
PDEVICE_OBJECT DeviceObject
Definition: io.h:429
LIST_ENTRY ShutdownList
Definition: io.h:428
Definition: iotypes.h:189
uint16_t * PWSTR
Definition: typedefs.h:56
uint32_t * PULONG
Definition: typedefs.h:59
unsigned char UCHAR
Definition: typedefs.h:53
unsigned char * PBOOLEAN
Definition: typedefs.h:53
INT POOL_TYPE
Definition: typedefs.h:78
#define NTAPI
Definition: typedefs.h:36
uint16_t * PUSHORT
Definition: typedefs.h:56
uint32_t ULONG_PTR
Definition: typedefs.h:65
#define IN
Definition: typedefs.h:39
uint16_t * PWCHAR
Definition: typedefs.h:56
uint32_t UINT32
Definition: typedefs.h:59
uint32_t ULONG
Definition: typedefs.h:59
#define OUT
Definition: typedefs.h:40
char CCHAR
Definition: typedefs.h:51
short CSHORT
Definition: umtypes.h:127
_In_ PIO_STACK_LOCATION IoStackLocation
Definition: usbdlib.h:265
_Must_inspect_result_ _In_ WDFCOLLECTION _In_ WDFOBJECT Object
_Must_inspect_result_ _In_ WDFDMAENABLER _In_ _In_opt_ PWDF_OBJECT_ATTRIBUTES Attributes
_Must_inspect_result_ _In_ WDFDRIVER Driver
Definition: wdfcontrol.h:83
_In_ PDEVICE_OBJECT DeviceObject
Definition: wdfdevice.h:2061
_In_ WDFDEVICE _Out_ PWDF_DEVICE_STATE DeviceState
Definition: wdfdevice.h:2005
_Must_inspect_result_ _In_ WDFDEVICE _In_ ULONG _In_ ACCESS_MASK DesiredAccess
Definition: wdfdevice.h:2664
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ _Strict_type_match_ POOL_TYPE PoolType
Definition: wdfdevice.h:3821
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
Definition: wdfdevice.h:550
_Must_inspect_result_ _In_ WDFDEVICE _In_ PCUNICODE_STRING SymbolicLinkName
Definition: wdfdevice.h:3745
_Must_inspect_result_ _In_ WDFDEVICE _In_ PCUNICODE_STRING KeyName
Definition: wdfdevice.h:2705
_Must_inspect_result_ _In_ WDFDEVICE _In_ DEVICE_REGISTRY_PROPERTY _In_ ULONG BufferLength
Definition: wdfdevice.h:3777
_In_ UCHAR _In_ UCHAR MinorFunction
Definition: wdfdevice.h:1705
_Must_inspect_result_ _In_ PDRIVER_OBJECT _In_ PCUNICODE_STRING RegistryPath
Definition: wdfdriver.h:215
_Must_inspect_result_ _In_ PDRIVER_OBJECT DriverObject
Definition: wdfdriver.h:213
_Must_inspect_result_ _In_ WDFDEVICE _In_ PWDF_INTERRUPT_CONFIG _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFINTERRUPT * Interrupt
Definition: wdfinterrupt.h:379
_In_ WDFIOTARGET _In_ _Strict_type_match_ WDF_IO_TARGET_SENT_IO_ACTION Action
Definition: wdfiotarget.h:510
_Must_inspect_result_ _In_ WDFOBJECT _In_ CONST GUID * Guid
Definition: wdfobject.h:762
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_ PCUNICODE_STRING _In_ PCUNICODE_STRING _In_ LCID LocaleId
Definition: wdfpdo.h:437
_Must_inspect_result_ _In_opt_ WDFKEY _In_ PCUNICODE_STRING _In_ ACCESS_MASK _In_ ULONG CreateOptions
Definition: wdfregistry.h:118
_Must_inspect_result_ _In_opt_ WDFKEY ParentKey
Definition: wdfregistry.h:69
_Must_inspect_result_ _In_ WDFKEY _In_ PCUNICODE_STRING ValueName
Definition: wdfregistry.h:243
_In_ WDFREQUEST _In_ PIO_STACK_LOCATION Stack
Definition: wdfrequest.h:639
_In_ WDFREQUEST _In_ NTSTATUS _In_ ULONG_PTR Information
Definition: wdfrequest.h:1049
_Must_inspect_result_ _In_ WDFIORESREQLIST _In_opt_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFIORESLIST * ResourceList
Definition: wdfresource.h:309
_In_ WDFIORESREQLIST RequirementsList
Definition: wdfresource.h:65
@ ProcessHandleCount
Definition: winternl.h:1902
_In_ USHORT _In_ ULONG _In_ PSOCKADDR _In_ PSOCKADDR _Reserved_ ULONG _In_opt_ PVOID _In_opt_ const WSK_CLIENT_CONNECTION_DISPATCH _In_opt_ PEPROCESS _In_opt_ PETHREAD _In_opt_ PSECURITY_DESCRIPTOR SecurityDescriptor
Definition: wsk.h:191
struct LOOKASIDE_ALIGN _GENERAL_LOOKASIDE GENERAL_LOOKASIDE
FAST_MUTEX
Definition: extypes.h:17
_In_opt_ PDEVICE_OBJECT _In_ ULONG _Outptr_result_nullonfailure_ _At_ * SymbolicLinkList(return==0, __drv_allocatesMem(Mem))) PZZWSTR *SymbolicLinkList
_In_ CONST GUID * InterfaceClassGuid
Definition: iofuncs.h:1136
VOID(NTAPI * PDRIVER_REINITIALIZE)(_In_ struct _DRIVER_OBJECT *DriverObject, _In_opt_ PVOID Context, _In_ ULONG Count)
Definition: iotypes.h:4458
IO_COMPLETION_ROUTINE * PIO_COMPLETION_ROUTINE
Definition: iotypes.h:2837
* PFILE_OBJECT
Definition: iotypes.h:1998
* PDEVICE_CAPABILITIES
Definition: iotypes.h:965
DRIVER_FS_NOTIFICATION * PDRIVER_FS_NOTIFICATION
Definition: iotypes.h:7364
enum _DEVICE_TEXT_TYPE DEVICE_TEXT_TYPE
enum _CREATE_FILE_TYPE CREATE_FILE_TYPE
ULONG * PPNP_DEVICE_STATE
Definition: iotypes.h:997
enum _DEVICE_RELATION_TYPE DEVICE_RELATION_TYPE
IO_WORKITEM_ROUTINE * PIO_WORKITEM_ROUTINE
Definition: iotypes.h:515
CCHAR KPROCESSOR_MODE
Definition: ketypes.h:7
_In_opt_ PVOID _In_opt_ PVOID SystemArgument1
Definition: ketypes.h:740
_In_opt_ PVOID _In_opt_ PVOID _In_opt_ PVOID SystemArgument2
Definition: ketypes.h:741
_In_ PEPROCESS _In_ KPROCESSOR_MODE AccessMode
Definition: mmfuncs.h:396
_Inout_opt_ PVOID Parameter
Definition: rtltypes.h:336
_In_opt_ PVOID _In_opt_ PUNICODE_STRING _In_ PSECURITY_DESCRIPTOR _In_ PACCESS_STATE AccessState
Definition: sefuncs.h:417
_In_ PSECURITY_SUBJECT_CONTEXT _In_ BOOLEAN _In_ ACCESS_MASK _In_ ACCESS_MASK _Outptr_opt_ PPRIVILEGE_SET _In_ PGENERIC_MAPPING _In_ KPROCESSOR_MODE _Out_ PACCESS_MASK GrantedAccess
Definition: sefuncs.h:20
SECURITY_OPERATION_CODE
Definition: setypes.h:170
#define const
Definition: zconf.h:233