ReactOS 0.4.17-dev-1196-gb6224c3
iomgr.c
Go to the documentation of this file.
1/*
2 * COPYRIGHT: See COPYING in the top level directory
3 * PROJECT: ReactOS Kernel
4 * FILE: ntoskrnl/io/iomgr/iomgr.c
5 * PURPOSE: I/O Manager Initialization and Misc Utility Functions
6 *
7 * PROGRAMMERS: David Welch (welch@mcmail.com)
8 */
9
10/* INCLUDES ****************************************************************/
11
12#include <ntoskrnl.h>
13#define NDEBUG
14#include <debug.h>
15
16VOID
19 IN PKDPC Dpc,
23);
24
28 VOID);
29
30/* DATA ********************************************************************/
31
34
39#if (NTDDI_VERSION >= NTDDI_WIN7) || (DLL_EXPORT_VERSION >= _WIN32_WINNT_WIN7)
40 TRUE;
41#else
42 FALSE;
43#endif
55
61
78extern KDPC IopTimerDpc;
79extern KTIMER IopTimer;
85
88
93
95
96/* INIT FUNCTIONS ************************************************************/
97
98CODE_SEG("INIT")
99VOID
100NTAPI
102{
103 ULONG LargeIrpSize, SmallIrpSize, MdlSize;
104 LONG i;
105 PKPRCB Prcb;
106 PGENERAL_LOOKASIDE CurrentList = NULL;
107
108 /* Calculate the sizes */
109 LargeIrpSize = sizeof(IRP) + (8 * sizeof(IO_STACK_LOCATION));
110 SmallIrpSize = sizeof(IRP) + sizeof(IO_STACK_LOCATION);
111 MdlSize = sizeof(MDL) + (23 * sizeof(PFN_NUMBER));
112
113 /* Initialize the Lookaside List for I\O Completion */
117 IOC_TAG1,
118 32,
120
121 /* Initialize the Lookaside List for Large IRPs */
124 LargeIrpSize,
126 64,
128
129
130 /* Initialize the Lookaside List for Small IRPs */
133 SmallIrpSize,
135 32,
137
138 /* Initialize the Lookaside List for MDLs */
141 MdlSize,
142 TAG_MDL,
143 128,
145
146 /* Allocate the global lookaside list buffer */
149 sizeof(GENERAL_LOOKASIDE),
150 TAG_IO);
151
152 /* Loop all processors */
153 for (i = 0; i < KeNumberProcessors; i++)
154 {
155 /* Get the PRCB for this CPU */
156 Prcb = KiProcessorBlock[i];
157 DPRINT("Setting up lookaside for CPU: %x, PRCB: %p\n", i, Prcb);
158
159 /* Write IRP credit limit */
161
162 /* Set the I/O Completion List */
164 if (CurrentList)
165 {
166 /* Initialize the Lookaside List for mini-packets */
171 32,
173 Prcb->PPLookasideList[LookasideCompletionList].P = CurrentList;
174 CurrentList++;
175
176 }
177 else
178 {
180 }
181
182 /* Set the Large IRP List */
184 if (CurrentList)
185 {
186 /* Initialize the Lookaside List for Large IRPs */
189 LargeIrpSize,
191 64,
193 Prcb->PPLookasideList[LookasideLargeIrpList].P = CurrentList;
194 CurrentList++;
195
196 }
197 else
198 {
200 }
201
202 /* Set the Small IRP List */
204 if (CurrentList)
205 {
206 /* Initialize the Lookaside List for Small IRPs */
209 SmallIrpSize,
211 32,
213 Prcb->PPLookasideList[LookasideSmallIrpList].P = CurrentList;
214 CurrentList++;
215
216 }
217 else
218 {
220 }
221
222 /* Set the MDL Completion List */
224 if (CurrentList)
225 {
226 /* Initialize the Lookaside List for MDLs */
229 SmallIrpSize,
230 TAG_MDL,
231 128,
233
234 Prcb->PPLookasideList[LookasideMdlList].P = CurrentList;
235 CurrentList++;
236
237 }
238 else
239 {
241 }
242 }
243}
244
245CODE_SEG("INIT")
247NTAPI
249{
250 OBJECT_TYPE_INITIALIZER ObjectTypeInitializer;
252
253 /* Initialize default settings */
254 RtlZeroMemory(&ObjectTypeInitializer, sizeof(ObjectTypeInitializer));
255 ObjectTypeInitializer.Length = sizeof(ObjectTypeInitializer);
256 ObjectTypeInitializer.PoolType = NonPagedPool;
257 ObjectTypeInitializer.InvalidAttributes = OBJ_OPENLINK;
258 ObjectTypeInitializer.ValidAccessMask = FILE_ALL_ACCESS;
259 ObjectTypeInitializer.UseDefaultObject = TRUE;
260 ObjectTypeInitializer.GenericMapping = IopFileMapping;
261
262 /* Do the Adapter Type */
263 RtlInitUnicodeString(&Name, L"Adapter");
265 &ObjectTypeInitializer,
266 NULL,
267 &IoAdapterObjectType))) return FALSE;
268
269 /* Do the Controller Type */
270 RtlInitUnicodeString(&Name, L"Controller");
271 ObjectTypeInitializer.DefaultNonPagedPoolCharge = sizeof(CONTROLLER_OBJECT);
273 &ObjectTypeInitializer,
274 NULL,
275 &IoControllerObjectType))) return FALSE;
276
277 /* Do the Device Type */
278 RtlInitUnicodeString(&Name, L"Device");
279 ObjectTypeInitializer.DefaultNonPagedPoolCharge = sizeof(DEVICE_OBJECT);
280 ObjectTypeInitializer.DeleteProcedure = IopDeleteDevice;
281 ObjectTypeInitializer.ParseProcedure = IopParseDevice;
282 ObjectTypeInitializer.SecurityProcedure = IopGetSetSecurityObject;
283 ObjectTypeInitializer.CaseInsensitive = TRUE;
285 &ObjectTypeInitializer,
286 NULL,
287 &IoDeviceObjectType))) return FALSE;
288
289 /* Initialize the Driver object type */
290 RtlInitUnicodeString(&Name, L"Driver");
291 ObjectTypeInitializer.DefaultNonPagedPoolCharge = sizeof(DRIVER_OBJECT);
292 ObjectTypeInitializer.DeleteProcedure = IopDeleteDriver;
293 ObjectTypeInitializer.ParseProcedure = NULL;
294 ObjectTypeInitializer.SecurityProcedure = NULL;
296 &ObjectTypeInitializer,
297 NULL,
298 &IoDriverObjectType))) return FALSE;
299
300 /* Initialize the I/O Completion object type */
301 RtlInitUnicodeString(&Name, L"IoCompletion");
302 ObjectTypeInitializer.DefaultNonPagedPoolCharge = sizeof(KQUEUE);
303 ObjectTypeInitializer.ValidAccessMask = IO_COMPLETION_ALL_ACCESS;
304 ObjectTypeInitializer.InvalidAttributes |= OBJ_PERMANENT;
305 ObjectTypeInitializer.GenericMapping = IopCompletionMapping;
306 ObjectTypeInitializer.DeleteProcedure = IopDeleteIoCompletion;
308 &ObjectTypeInitializer,
309 NULL,
310 &IoCompletionType))) return FALSE;
311
312 /* Initialize the File object type */
313 RtlInitUnicodeString(&Name, L"File");
314 ObjectTypeInitializer.DefaultNonPagedPoolCharge = sizeof(FILE_OBJECT);
315 ObjectTypeInitializer.InvalidAttributes |= OBJ_EXCLUSIVE;
316 ObjectTypeInitializer.MaintainHandleCount = TRUE;
317 ObjectTypeInitializer.ValidAccessMask = FILE_ALL_ACCESS;
318 ObjectTypeInitializer.GenericMapping = IopFileMapping;
319 ObjectTypeInitializer.CloseProcedure = IopCloseFile;
320 ObjectTypeInitializer.DeleteProcedure = IopDeleteFile;
321 ObjectTypeInitializer.SecurityProcedure = IopGetSetSecurityObject;
322 ObjectTypeInitializer.QueryNameProcedure = IopQueryName;
323 ObjectTypeInitializer.ParseProcedure = IopParseFile;
324 ObjectTypeInitializer.UseDefaultObject = FALSE;
326 &ObjectTypeInitializer,
327 NULL,
328 &IoFileObjectType))) return FALSE;
329
330 /* Success */
331 return TRUE;
332}
333
334CODE_SEG("INIT")
336NTAPI
338{
343
344 /* Create the '\Driver' object directory */
345 RtlInitUnicodeString(&DirName, L"\\Driver");
347 &DirName,
349 NULL,
350 NULL);
354 if (!NT_SUCCESS(Status))
355 {
356 DPRINT1("Failed to create \\Driver directory: 0x%lx\n", Status);
357 return FALSE;
358 }
360
361 /* Create the '\FileSystem' object directory */
362 RtlInitUnicodeString(&DirName, L"\\FileSystem");
364 &DirName,
366 NULL,
367 NULL);
371 if (!NT_SUCCESS(Status))
372 {
373 DPRINT1("Failed to create \\FileSystem directory: 0x%lx\n", Status);
374 return FALSE;
375 }
377
378 /* Create the '\FileSystem' object directory */
379 RtlInitUnicodeString(&DirName, L"\\FileSystem\\Filters");
381 &DirName,
383 NULL,
384 NULL);
388 if (!NT_SUCCESS(Status))
389 {
390 DPRINT1("Failed to create \\FileSystem\\Filters directory: 0x%lx\n", Status);
391 return FALSE;
392 }
394
395 /* Return success */
396 return TRUE;
397}
398
399/* Control\PnP\PollBootPartitionTimeout is in milliseconds */
400#define IOP_BOOT_PARTITION_POLL_INTERVAL 200
401#define IOP_BOOT_PARTITION_MAX_TIMEOUT 180000
402
403CODE_SEG("INIT")
404static
405LONG
407{
408 UNICODE_STRING KeyName = RTL_CONSTANT_STRING(L"\\Registry\\Machine\\System\\CurrentControlSet\\Control\\PnP");
410 ULONG Timeout = 0;
413
415 if (!NT_SUCCESS(Status))
416 return 0;
417
418 Status = IopGetRegistryValue(KeyHandle, L"PollBootPartitionTimeout", &Information);
419 if (NT_SUCCESS(Status))
420 {
421 if (Information->Type == REG_DWORD && Information->DataLength == sizeof(ULONG))
422 Timeout = *(PULONG)((PUCHAR)Information + Information->DataOffset);
423
425 }
426
428
430 return 0;
431
433}
434
435CODE_SEG("INIT")
436static
440{
446
450 NULL,
451 NULL);
456 0,
458 if (!NT_SUCCESS(Status))
459 return Status;
460
461 /* Get the DO */
463 0,
466 (PVOID *)&FileObject,
467 NULL);
468 if (!NT_SUCCESS(Status))
469 {
471 return Status;
472 }
473
474 /* Mark it as the boot partition */
475 FileObject->DeviceObject->Flags |= DO_SYSTEM_BOOT_PARTITION;
476
477 /* Save a copy of the DO for the I/O Error Logger */
478 ObReferenceObject(FileObject->DeviceObject);
479 IopErrorLogObject = FileObject->DeviceObject;
480
483 return STATUS_SUCCESS;
484}
485
486CODE_SEG("INIT")
488NTAPI
490{
491 STRING DeviceString;
492 CHAR Buffer[256];
497
498 /* Build the ARC device name */
500 sizeof(Buffer),
501 "\\ArcName\\%s",
502 LoaderBlock->ArcBootDeviceName);
503 if (!NT_SUCCESS(Status)) return FALSE;
504
505 RtlInitAnsiString(&DeviceString, Buffer);
507 if (!NT_SUCCESS(Status)) return FALSE;
508
511 if (Timeout > 0)
512 DPRINT1("Polling up to %ld ms for the boot device\n", Timeout);
513
514 /* A boot disk behind a USB hub can still be enumerating, so name the disks
515 that arrived since the last pass and try again until the timeout runs out */
517 while (!NT_SUCCESS(Status) && Timeout > 0)
518 {
521
522 IopCreateArcNames(LoaderBlock);
524 }
525
526 if (!NT_SUCCESS(Status))
527 {
528 KeBugCheckEx(INACCESSIBLE_BOOT_DEVICE,
530 Status,
531 0,
532 0);
533 }
534
536 return TRUE;
537}
538
539CODE_SEG("INIT")
541NTAPI
543{
544 LARGE_INTEGER ExpireTime;
546 CHAR Buffer[256];
547 ANSI_STRING NtBootPath, RootString;
548
549 /* Initialize empty NT Boot Path */
550 RtlInitEmptyAnsiString(&NtBootPath, Buffer, sizeof(Buffer));
551
552 /* Initialize the lookaside lists */
554
555 /* Initialize all locks and lists */
574
575 /* Initialize PnP notifications */
577
578 /* Initialize the reserve IRP */
580 {
581 DPRINT1("IopInitializeReserveIrp failed!\n");
582 return FALSE;
583 }
584
585 /* Initialize Timer List Lock */
587
588 /* Initialize Timer List */
590
591 /* Initialize the DPC/Timer which will call the other Timer Routines */
592 ExpireTime.QuadPart = -10000000;
595 KeSetTimerEx(&IopTimer, ExpireTime, 1000, &IopTimerDpc);
596
597 /* Create Object Types */
599 {
600 DPRINT1("IopCreateObjectTypes failed!\n");
601 return FALSE;
602 }
603
604 /* Create Object Directories */
606 {
607 DPRINT1("IopCreateRootDirectories failed!\n");
608 return FALSE;
609 }
610
611 /* Initialize Kernel Shim engine */
612 KseInitialize(0, LoaderBlock);
613
614 /* Initialize PnP manager */
616
617 /* Initialize SHIM engine */
619
620 /* Initialize WMI */
622
623 /* Finish Kernel Shim engine initialization */
624 KseInitialize(1, LoaderBlock);
625
626 /* Initialize HAL Root Bus Driver */
628
629 /* Reenumerate what HAL has added (synchronously)
630 * This function call should eventually become a 2nd stage of the PnP initialization */
633 NULL,
634 NULL);
635
636 /* Make loader block available for the whole kernel */
637 IopLoaderBlock = LoaderBlock;
638
639 /* Load boot start drivers */
641
642 /* Call back drivers that asked for */
644
645 /* Check if this was a ramdisk boot */
646 if (!_strnicmp(LoaderBlock->ArcBootDeviceName, "ramdisk(0)", 10))
647 {
648 /* Initialize the ramdisk driver */
649 IopStartRamdisk(LoaderBlock);
650 }
651
652 /* No one should need loader block any longer */
654
655 /* Create ARC names for boot devices */
656 Status = IopCreateArcNames(LoaderBlock);
657 if (!NT_SUCCESS(Status))
658 {
659 DPRINT1("IopCreateArcNames failed: %lx\n", Status);
660 return FALSE;
661 }
662
663 /* Mark the system boot partition */
664 if (!IopMarkBootPartition(LoaderBlock))
665 {
666 DPRINT1("IopMarkBootPartition failed!\n");
667 return FALSE;
668 }
669
670 /* The disk subsystem is initialized here and the SystemRoot is set too.
671 * We can finally load other drivers from the boot volume. */
673
674 /* Load system start drivers */
677
678 /* Reinitialize drivers that requested it */
680
681 /* Convert SystemRoot from ARC to NT path */
682 Status = IopReassignSystemRoot(LoaderBlock, &NtBootPath);
683 if (!NT_SUCCESS(Status))
684 {
685 DPRINT1("IopReassignSystemRoot failed: %lx\n", Status);
686 return FALSE;
687 }
688
689 /* Set the ANSI_STRING for the root path */
690 RootString.MaximumLength = NtSystemRoot.MaximumLength / sizeof(WCHAR);
691 RootString.Length = 0;
693 RootString.MaximumLength,
694 TAG_IO);
695
696 /* Convert the path into the ANSI_STRING */
698 if (!NT_SUCCESS(Status))
699 {
700 DPRINT1("RtlUnicodeStringToAnsiString failed: %lx\n", Status);
701 return FALSE;
702 }
703
704 /* Assign drive letters */
705 IoAssignDriveLetters(LoaderBlock,
706 &NtBootPath,
707 (PUCHAR)RootString.Buffer,
708 &RootString);
709
710 /* Update system root */
712 if (!NT_SUCCESS(Status))
713 {
714 DPRINT1("RtlAnsiStringToUnicodeString failed: %lx\n", Status);
715 return FALSE;
716 }
717
718 /* Load the System DLL and its entrypoints */
720 if (!NT_SUCCESS(Status))
721 {
722 DPRINT1("PsLocateSystemDll failed: %lx\n", Status);
723 return FALSE;
724 }
725
726 /* Return success */
727 return TRUE;
728}
729
731NTAPI
733{
735 return FALSE;
736}
737
738/* EOF */
struct _IRP IRP
#define CODE_SEG(...)
ULONG_PTR PFN_NUMBER
unsigned char BOOLEAN
Definition: actypes.h:127
LONG NTSTATUS
Definition: precomp.h:26
#define FILE_NON_DIRECTORY_FILE
Definition: constants.h:492
#define DPRINT1
Definition: precomp.h:8
VOID FASTCALL IoAssignDriveLetters(IN struct _LOADER_PARAMETER_BLOCK *LoaderBlock, IN PSTRING NtDeviceName, OUT PUCHAR NtSystemPath, OUT PSTRING NtSystemPathString)
Definition: ntoskrnl.c:40
#define UNIMPLEMENTED
Definition: ntoskrnl.c:15
DECLSPEC_NORETURN VOID NTAPI KeBugCheckEx(IN ULONG BugCheckCode, IN ULONG_PTR BugCheckParameter1, IN ULONG_PTR BugCheckParameter2, IN ULONG_PTR BugCheckParameter3, IN ULONG_PTR BugCheckParameter4)
Definition: debug.c:485
_In_ PFCB _In_ PCD_NAME DirName
Definition: cdprocs.h:737
Definition: bufpool.h:45
IN PUNICODE_STRING IN POBJECT_ATTRIBUTES ObjectAttributes
Definition: conport.c:36
LPWSTR Name
Definition: desk.c:124
_In_ PIO_STATUS_BLOCK IoStatusBlock
Definition: dispmprt.h:608
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define NT_SUCCESS(StatCode)
Definition: apphelp.c:33
#define RTL_CONSTANT_STRING(s)
Definition: combase.c:35
#define _strnicmp(_String1, _String2, _MaxCount)
Definition: compat.h:23
VOID NTAPI KeInitializeDpc(IN PKDPC Dpc, IN PKDEFERRED_ROUTINE DeferredRoutine, IN PVOID DeferredContext)
Definition: dpc.c:712
#define L(x)
Definition: resources.c:13
struct _DEVICE_OBJECT DEVICE_OBJECT
#define ExAllocatePoolWithTag(hernya, size, tag)
Definition: env_spec_w32.h:350
ULONG KSPIN_LOCK
Definition: env_spec_w32.h:72
NTSTATUS ExInitializeResourceLite(PULONG res)
Definition: env_spec_w32.h:641
#define ExFreePool(addr)
Definition: env_spec_w32.h:352
#define DO_SYSTEM_BOOT_PARTITION
Definition: env_spec_w32.h:400
#define NonPagedPool
Definition: env_spec_w32.h:307
ULONG ERESOURCE
Definition: env_spec_w32.h:594
#define InitializeListHead(ListHead)
Definition: env_spec_w32.h:944
#define KeDelayExecutionThread(mode, foo, t)
Definition: env_spec_w32.h:484
#define KeInitializeSpinLock(sl)
Definition: env_spec_w32.h:604
#define PagedPool
Definition: env_spec_w32.h:308
_Must_inspect_result_ _In_opt_ PFLT_INSTANCE _Out_ PHANDLE FileHandle
Definition: fltkernel.h:1231
std::wstring STRING
Definition: fontsub.cpp:33
ULONG Handle
Definition: gdb_input.c:15
Status
Definition: gdiplustypes.h:24
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
LIST_ENTRY IopErrorLogListHead
Definition: error.c:30
LIST_ENTRY DriverReinitListHead
Definition: driver.c:22
KDPC IopTimerDpc
Definition: iotimer.c:22
BOOLEAN NTAPI IoInitSystem(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
Definition: iomgr.c:542
ULONG IopCaseInsensitive
Definition: iomgr.c:38
POBJECT_TYPE IoDeviceObjectType
Definition: iomgr.c:35
VOID NTAPI IopInitLookasideLists(VOID)
Definition: iomgr.c:101
BOOLEAN NTAPI IopCreateRootDirectories(VOID)
Definition: iomgr.c:337
ULONG IoWriteOperationCount
Definition: iomgr.c:47
LIST_ENTRY ShutdownListHead
Definition: device.c:21
BOOLEAN NTAPI IoInitializeCrashDump(IN HANDLE PageFileHandle)
Definition: iomgr.c:732
POBJECT_TYPE IoControllerObjectType
Definition: controller.c:16
GENERIC_MAPPING IopFileMapping
Definition: iomgr.c:56
ERESOURCE IopDriverLoadResource
Definition: driver.c:20
ERESOURCE IopSecurityResource
Definition: iomgr.c:67
BOOLEAN IoCountOperations
Definition: iomgr.c:44
BOOLEAN PnPBootDriversInitialized
Definition: pnpinit.c:21
POBJECT_TYPE IoFileObjectType
Definition: iomgr.c:36
BOOLEAN PnpSystemInit
Definition: iomgr.c:33
GENERAL_LOOKASIDE IoLargeIrpLookaside
Definition: iomgr.c:89
POBJECT_TYPE IoAdapterObjectType
Definition: adapter.c:18
KSPIN_LOCK DriverBootReinitListLock
Definition: driver.c:28
LARGE_INTEGER IoReadTransferCount
Definition: iomgr.c:46
BOOLEAN NTAPI WmiInitialize(VOID)
Definition: wmi.c:38
ULONG IopNumTriageDumpDataBlocks
Definition: iomgr.c:53
GENERAL_LOOKASIDE IoSmallIrpLookaside
Definition: iomgr.c:90
KSPIN_LOCK IoStatisticsLock
Definition: iomgr.c:51
BOOLEAN NTAPI IopMarkBootPartition(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
Definition: iomgr.c:489
KSPIN_LOCK IopTimerLock
Definition: iotimer.c:18
LARGE_INTEGER IoWriteTransferCount
Definition: iomgr.c:48
PVOID IopTriageDumpDataBlocks[64]
Definition: iomgr.c:54
KSPIN_LOCK ShutdownListLock
Definition: device.c:22
LIST_ENTRY IopCdRomFileSystemQueueHead
Definition: volume.c:22
ULONG IoOtherOperationCount
Definition: iomgr.c:49
static LONG IopGetBootPartitionTimeout(VOID)
Definition: iomgr.c:406
ULONG IopAutoReboot
Definition: iomgr.c:52
ERESOURCE IopDatabaseResource
Definition: volume.c:20
LIST_ENTRY DriverBootReinitListHead
Definition: driver.c:27
KSPIN_LOCK IopLogListLock
Definition: error.c:31
KSPIN_LOCK DriverReinitListLock
Definition: driver.c:23
LARGE_INTEGER IoOtherTransferCount
Definition: iomgr.c:50
GENERAL_LOOKASIDE IoCompletionPacketLookaside
Definition: iocomp.c:18
KTIMER IopTimer
Definition: iotimer.c:23
PDEVICE_OBJECT IopErrorLogObject
Definition: error.c:38
LIST_ENTRY LastChanceShutdownListHead
Definition: device.c:21
VOID NTAPI IopTimerDispatch(IN PKDPC Dpc, IN PVOID DeferredContext, IN PVOID SystemArgument1, IN PVOID SystemArgument2)
Definition: iotimer.c:32
static NTSTATUS IopOpenBootPartition(_In_ PUNICODE_STRING DeviceName)
Definition: iomgr.c:438
LIST_ENTRY IopNetworkFileSystemQueueHead
Definition: volume.c:21
GENERAL_LOOKASIDE IopMdlLookasideList
Definition: iomgr.c:91
ULONG IopTraceLevel
Definition: iomgr.c:32
LIST_ENTRY IopDiskFileSystemQueueHead
Definition: volume.c:21
PLOADER_PARAMETER_BLOCK IopLoaderBlock
Definition: iomgr.c:94
LIST_ENTRY IopFsNotifyChangeQueueHead
Definition: volume.c:23
ULONG IoReadOperationCount
Definition: iomgr.c:45
#define IOP_BOOT_PARTITION_POLL_INTERVAL
Definition: iomgr.c:400
BOOLEAN NTAPI IopCreateObjectTypes(VOID)
Definition: iomgr.c:248
LIST_ENTRY IopTimerQueueHead
Definition: iotimer.c:19
LIST_ENTRY IopTapeFileSystemQueueHead
Definition: volume.c:22
#define IOP_BOOT_PARTITION_MAX_TIMEOUT
Definition: iomgr.c:401
NTSTATUS NTAPI KseInitialize(_In_ ULONG BootPhase, _In_ PLOADER_PARAMETER_BLOCK LoaderBlock)
Definition: kse.c:403
VOID NTAPI ExInitializeSystemLookasideList(IN PGENERAL_LOOKASIDE List, IN POOL_TYPE Type, IN ULONG Size, IN ULONG Tag, IN USHORT MaximumDepth, IN PLIST_ENTRY ListHead)
Definition: lookas.c:31
LIST_ENTRY ExSystemLookasideListHead
Definition: lookas.c:21
#define IO_COMPLETION_ALL_ACCESS
Definition: file.c:43
#define InitializeObjectAttributes(p, n, a, r, s)
Definition: reg.c:115
#define min(a, b)
Definition: monoChain.cc:55
_Must_inspect_result_ _Out_ PNDIS_STATUS _In_ NDIS_HANDLE _In_ ULONG _Out_ PNDIS_STRING _Out_ PNDIS_HANDLE KeyHandle
Definition: ndis.h:4715
#define KernelMode
Definition: asm.h:38
NTSYSAPI NTSTATUS NTAPI ZwOpenFile(_Out_ PHANDLE FileHandle, _In_ ACCESS_MASK DesiredAccess, _In_ POBJECT_ATTRIBUTES ObjectAttributes, _Out_ PIO_STATUS_BLOCK IoStatusBlock, _In_ ULONG ShareAccess, _In_ ULONG OpenOptions)
@ LookasideLargeIrpList
Definition: mmtypes.h:169
@ LookasideCompletionList
Definition: mmtypes.h:174
@ LookasideMdlList
Definition: mmtypes.h:170
@ LookasideSmallIrpList
Definition: mmtypes.h:168
NTSYSAPI NTSTATUS NTAPI ZwClose(_In_ HANDLE Handle)
DWORD Interval
Definition: netstat.c:28
#define _In_
Definition: no_sal2.h:158
NTSYSAPI NTSTATUS NTAPI RtlUnicodeStringToAnsiString(PANSI_STRING DestinationString, PUNICODE_STRING SourceString, BOOLEAN AllocateDestinationString)
#define FILE_GENERIC_EXECUTE
Definition: nt_native.h:668
#define FILE_READ_ATTRIBUTES
Definition: nt_native.h:647
#define KEY_READ
Definition: nt_native.h:1026
NTSYSAPI NTSTATUS NTAPI RtlAnsiStringToUnicodeString(PUNICODE_STRING DestinationString, PANSI_STRING SourceString, BOOLEAN AllocateDestinationString)
NTSYSAPI VOID NTAPI RtlInitUnicodeString(PUNICODE_STRING DestinationString, PCWSTR SourceString)
NTSTATUS NTAPI NtClose(IN HANDLE Handle)
Definition: obhandle.c:3434
NTSYSAPI VOID NTAPI RtlFreeUnicodeString(PUNICODE_STRING UnicodeString)
#define FILE_ALL_ACCESS
Definition: nt_native.h:651
#define DIRECTORY_ALL_ACCESS
Definition: nt_native.h:1262
NTSYSAPI VOID NTAPI RtlInitAnsiString(PANSI_STRING DestinationString, PCSZ SourceString)
#define FILE_GENERIC_READ
Definition: nt_native.h:653
#define FILE_GENERIC_WRITE
Definition: nt_native.h:660
#define Int32x32To64(a, b)
@ SynchronizationTimer
@ FILE_OBJECT
Definition: ntobjenum.h:17
UNICODE_STRING NtSystemRoot
Definition: init.c:80
NTSTATUS NTAPI IopOpenRegistryKeyEx(PHANDLE KeyHandle, HANDLE ParentKey, PUNICODE_STRING Name, ACCESS_MASK DesiredAccess)
Definition: pnpmgr.c:885
VOID NTAPI IopReinitializeBootDrivers(VOID)
Definition: driver.c:1550
@ PiActionEnumRootDevices
Definition: io.h:526
BOOLEAN NTAPI IopInitializeReserveIrp(IN PRESERVE_IRP_ALLOCATOR ReserveIrpAllocator)
Definition: irp.c:581
VOID FASTCALL IopInitializeSystemDrivers(VOID)
Definition: driver.c:1228
POBJECT_TYPE IoCompletionType
Definition: iocomp.c:16
NTSTATUS NTAPI IopInitializePlugPlayServices(VOID)
Definition: pnpinit.c:287
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 NTAPI IopGetRegistryValue(IN HANDLE Handle, IN PWSTR ValueName, OUT PKEY_VALUE_FULL_INFORMATION *Information)
Definition: pnpmgr.c:1036
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:1924
VOID NTAPI IopDeleteDriver(IN PVOID ObjectBody)
Definition: driver.c:77
VOID FASTCALL IopInitializeBootDrivers(VOID)
Definition: driver.c:1041
NTSTATUS NTAPI IopStartRamdisk(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
Definition: ramdisk.c:26
VOID NTAPI IopReinitializeDrivers(VOID)
Definition: driver.c:1514
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, IN KPROCESSOR_MODE AccessMode)
NTSTATUS NTAPI IopReassignSystemRoot(IN PLOADER_PARAMETER_BLOCK LoaderBlock, OUT PANSI_STRING NtBootPath)
Definition: arcname.c:848
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
VOID NTAPI IopCloseFile(IN PEPROCESS Process OPTIONAL, IN PVOID Object, IN ACCESS_MASK GrantedAccess, IN ULONG_PTR ProcessHandleCount, IN ULONG_PTR SystemHandleCount)
Definition: file.c:2177
VOID PiInitializeNotifications(VOID)
Definition: pnpnotify.c:55
VOID NTAPI IopDeleteDevice(IN PVOID ObjectBody)
Definition: device.c:52
PDEVICE_NODE IopRootDeviceNode
Definition: devnode.c:18
VOID NTAPI IopDeleteIoCompletion(PVOID ObjectBody)
Definition: iocomp.c:100
GENERIC_MAPPING IopCompletionMapping
Definition: iocomp.c:20
VOID NTAPI IopDeleteFile(IN PVOID ObjectBody)
Definition: file.c:1352
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
NTSTATUS NTAPI IopCreateArcNames(IN PLOADER_PARAMETER_BLOCK LoaderBlock)
Definition: arcname.c:39
RESERVE_IRP_ALLOCATOR IopReserveIrpAllocator
Definition: irp.c:19
PKPRCB KiProcessorBlock[]
Definition: krnlinit.c:31
POBJECT_TYPE IoDriverObjectType
Definition: driver.c:34
CCHAR KeNumberProcessors
Definition: processor.c:19
NTSTRSAFEVAPI RtlStringCbPrintfA(_Out_writes_bytes_(cbDest) _Always_(_Post_z_) NTSTRSAFE_PSTR pszDest, _In_ size_t cbDest, _In_ _Printf_format_string_ NTSTRSAFE_PCSTR pszFormat,...)
Definition: ntstrsafe.h:1148
NTSTATUS NTAPI NtCreateDirectoryObject(OUT PHANDLE DirectoryHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes)
Definition: obdir.c:765
NTSTATUS NTAPI ObCreateObjectType(IN PUNICODE_STRING TypeName, IN POBJECT_TYPE_INITIALIZER ObjectTypeInitializer, IN PVOID Reserved, OUT POBJECT_TYPE *ObjectType)
Definition: oblife.c:1146
NTSTATUS NTAPI ObReferenceObjectByHandle(IN HANDLE Handle, IN ACCESS_MASK DesiredAccess, IN POBJECT_TYPE ObjectType, IN KPROCESSOR_MODE AccessMode, OUT PVOID *Object, OUT POBJECT_HANDLE_INFORMATION HandleInformation OPTIONAL)
Definition: obref.c:493
short WCHAR
Definition: pedump.c:58
long LONG
Definition: pedump.c:60
char CHAR
Definition: pedump.c:57
static ULONG Timeout
Definition: ping.c:61
NTSTATUS NTAPI ApphelpCacheInitialize(VOID)
Definition: apphelp.c:437
NTSTATUS NTAPI PsLocateSystemDll(VOID)
Definition: psmgr.c:187
#define OBJ_CASE_INSENSITIVE
Definition: winternl.h:228
#define OBJ_OPENLINK
Definition: winternl.h:230
#define OBJ_EXCLUSIVE
Definition: winternl.h:227
#define OBJ_PERMANENT
Definition: winternl.h:226
#define REG_DWORD
Definition: sdbapi.c:615
#define STATUS_SUCCESS
Definition: shellext.h:65
#define DPRINT
Definition: sndvol32.h:73
USHORT MaximumLength
Definition: env_spec_w32.h:377
PDEVICE_OBJECT PhysicalDeviceObject
Definition: iotypes.h:1015
Definition: ketypes.h:767
PP_LOOKASIDE_LIST PPLookasideList[16]
Definition: ketypes.h:728
LONG LookasideIrpFloat
Definition: ketypes.h:759
Definition: typedefs.h:120
OB_CLOSE_METHOD CloseProcedure
Definition: obtypes.h:398
OB_SECURITY_METHOD SecurityProcedure
Definition: obtypes.h:401
GENERIC_MAPPING GenericMapping
Definition: obtypes.h:388
OB_DELETE_METHOD DeleteProcedure
Definition: obtypes.h:399
BOOLEAN MaintainHandleCount
Definition: obtypes.h:391
OB_QUERYNAME_METHOD QueryNameProcedure
Definition: obtypes.h:402
OB_PARSE_METHOD ParseProcedure
Definition: obtypes.h:400
ULONG DefaultNonPagedPoolCharge
Definition: obtypes.h:395
struct _GENERAL_LOOKASIDE * P
Definition: ketypes.h:1015
struct _GENERAL_LOOKASIDE * L
Definition: ketypes.h:1016
USHORT MaximumLength
Definition: env_spec_w32.h:370
#define IO_SMALLIRP_CPU
Definition: tag.h:75
#define IO_LARGEIRP
Definition: tag.h:72
#define IO_SMALLIRP
Definition: tag.h:73
#define TAG_IO
Definition: tag.h:79
#define TAG_MDL
Definition: tag.h:88
#define IO_LARGEIRP_CPU
Definition: tag.h:74
#define IOC_TAG1
Definition: tag.h:76
BOOLEAN NTAPI KeSetTimerEx(IN OUT PKTIMER Timer, IN LARGE_INTEGER DueTime, IN LONG Period, IN PKDPC Dpc OPTIONAL)
Definition: timerobj.c:295
VOID NTAPI KeInitializeTimerEx(OUT PKTIMER Timer, IN TIMER_TYPE Type)
Definition: timerobj.c:244
uint32_t * PULONG
Definition: typedefs.h:59
#define NTAPI
Definition: typedefs.h:36
#define RtlZeroMemory(Destination, Length)
Definition: typedefs.h:262
uint32_t ULONG_PTR
Definition: typedefs.h:65
#define IN
Definition: typedefs.h:39
unsigned char * PUCHAR
Definition: typedefs.h:53
uint32_t ULONG
Definition: typedefs.h:59
LONGLONG QuadPart
Definition: typedefs.h:114
_In_ WDFREQUEST _In_ WDFFILEOBJECT FileObject
Definition: wdfdevice.h:550
_Must_inspect_result_ _In_ WDFDEVICE _In_ PCUNICODE_STRING KeyName
Definition: wdfdevice.h:2705
_Must_inspect_result_ _In_ PWDFDEVICE_INIT _In_opt_ PCUNICODE_STRING DeviceName
Definition: wdfdevice.h:3281
_Must_inspect_result_ _In_ PWDF_DPC_CONFIG _In_ PWDF_OBJECT_ATTRIBUTES _Out_ WDFDPC * Dpc
Definition: wdfdpc.h:112
_In_ WDFREQUEST _In_ NTSTATUS _In_ ULONG_PTR Information
Definition: wdfrequest.h:1049
struct LOOKASIDE_ALIGN _GENERAL_LOOKASIDE GENERAL_LOOKASIDE
struct LOOKASIDE_ALIGN _GENERAL_LOOKASIDE * PGENERAL_LOOKASIDE
#define HalInitPnpDriver
Definition: haltypes.h:310
struct _DRIVER_OBJECT DRIVER_OBJECT
* PFILE_OBJECT
Definition: iotypes.h:1998
struct _CONTROLLER_OBJECT CONTROLLER_OBJECT
struct _KQUEUE KQUEUE
_In_opt_ PVOID _In_opt_ PVOID SystemArgument1
Definition: ketypes.h:756
_In_opt_ PVOID DeferredContext
Definition: ketypes.h:755
_In_opt_ PVOID _In_opt_ PVOID _In_opt_ PVOID SystemArgument2
Definition: ketypes.h:757
MDL
Definition: mmtypes.h:117
#define ObDereferenceObject
Definition: obfuncs.h:203
#define ObReferenceObject
Definition: obfuncs.h:204