/*
* COPYRIGHT: See COPYING in the top level directory
* PROJECT: ReactOS Kernel
- * FILE: ntoskrnl/io/iomgr.c
+ * FILE: ntoskrnl/io/iomgr/iomgr.c
* PURPOSE: I/O Manager Initialization and Misc Utility Functions
*
* PROGRAMMERS: David Welch (welch@mcmail.com)
IN PVOID SystemArgument2
);
+BOOLEAN
+NTAPI
+WmiInitialize(
+ VOID);
+
/* DATA ********************************************************************/
POBJECT_TYPE IoDeviceObjectType = NULL;
POBJECT_TYPE IoFileObjectType = NULL;
extern POBJECT_TYPE IoControllerObjectType;
-extern UNICODE_STRING NtSystemRoot;
BOOLEAN IoCountOperations = TRUE;
ULONG IoReadOperationCount = 0;
LARGE_INTEGER IoReadTransferCount = {{0, 0}};
extern POBJECT_TYPE IoAdapterObjectType;
extern ERESOURCE IopDatabaseResource;
ERESOURCE IopSecurityResource;
+extern ERESOURCE IopDriverLoadResource;
extern KGUARDED_MUTEX PnpNotifyListLock;
extern LIST_ENTRY IopDiskFileSystemQueueHead;
extern LIST_ENTRY IopCdRomFileSystemQueueHead;
IOC_TAG1,
32,
&ExSystemLookasideListHead);
-
+
/* Initialize the Lookaside List for Large IRPs */
ExInitializeSystemLookasideList(&IoLargeIrpLookaside,
NonPagedPool,
&ExSystemLookasideListHead);
/* Allocate the global lookaside list buffer */
- CurrentList = ExAllocatePoolWithTag(NonPagedPool,
+ CurrentList = ExAllocatePoolWithTag(NonPagedPool,
4 * KeNumberProcessors *
sizeof(GENERAL_LOOKASIDE),
TAG_IO);
-
+
/* Loop all processors */
for (i = 0; i < KeNumberProcessors; i++)
{
&ExSystemLookasideListHead);
Prcb->PPLookasideList[LookasideCompletionList].P = CurrentList;
CurrentList++;
-
+
}
else
{
Prcb->PPLookasideList[LookasideCompletionList].P = &IoCompletionPacketLookaside;
}
-
+
/* Set the Large IRP List */
Prcb->PPLookasideList[LookasideLargeIrpList].L = &IoLargeIrpLookaside;
if (CurrentList)
&ExSystemLookasideListHead);
Prcb->PPLookasideList[LookasideLargeIrpList].P = CurrentList;
CurrentList++;
-
+
}
else
{
&ExSystemLookasideListHead);
Prcb->PPLookasideList[LookasideSmallIrpList].P = CurrentList;
CurrentList++;
-
+
}
else
{
TAG_MDL,
128,
&ExSystemLookasideListHead);
-
+
Prcb->PPLookasideList[LookasideMdlList].P = CurrentList;
CurrentList++;
-
+
}
else
{
ObjectTypeInitializer.DefaultNonPagedPoolCharge = sizeof(DEVICE_OBJECT);
ObjectTypeInitializer.DeleteProcedure = IopDeleteDevice;
ObjectTypeInitializer.ParseProcedure = IopParseDevice;
- ObjectTypeInitializer.SecurityProcedure = IopSecurityFile;
+ ObjectTypeInitializer.SecurityProcedure = IopGetSetSecurityObject;
ObjectTypeInitializer.CaseInsensitive = TRUE;
if (!NT_SUCCESS(ObCreateObjectType(&Name,
&ObjectTypeInitializer,
ObjectTypeInitializer.GenericMapping = IopFileMapping;
ObjectTypeInitializer.CloseProcedure = IopCloseFile;
ObjectTypeInitializer.DeleteProcedure = IopDeleteFile;
- ObjectTypeInitializer.SecurityProcedure = IopSecurityFile;
- ObjectTypeInitializer.QueryNameProcedure = IopQueryNameFile;
+ ObjectTypeInitializer.SecurityProcedure = IopGetSetSecurityObject;
+ ObjectTypeInitializer.QueryNameProcedure = IopQueryName;
ObjectTypeInitializer.ParseProcedure = IopParseFile;
ObjectTypeInitializer.UseDefaultObject = FALSE;
if (!NT_SUCCESS(ObCreateObjectType(&Name,
BOOLEAN
INIT_FUNCTION
NTAPI
-IopCreateRootDirectories()
+IopCreateRootDirectories(VOID)
{
OBJECT_ATTRIBUTES ObjectAttributes;
UNICODE_STRING DirName;
HANDLE Handle;
+ NTSTATUS Status;
/* Create the '\Driver' object directory */
RtlInitUnicodeString(&DirName, L"\\Driver");
OBJ_PERMANENT,
NULL,
NULL);
- if (!NT_SUCCESS(NtCreateDirectoryObject(&Handle,
- DIRECTORY_ALL_ACCESS,
- &ObjectAttributes))) return FALSE;
+ Status = NtCreateDirectoryObject(&Handle,
+ DIRECTORY_ALL_ACCESS,
+ &ObjectAttributes);
+ if (!NT_SUCCESS(Status))
+ {
+ DPRINT1("Failed to create \\Driver directory: 0x%lx\n", Status);
+ return FALSE;
+ }
NtClose(Handle);
/* Create the '\FileSystem' object directory */
OBJ_PERMANENT,
NULL,
NULL);
- if (!NT_SUCCESS(NtCreateDirectoryObject(&Handle,
- DIRECTORY_ALL_ACCESS,
- &ObjectAttributes))) return FALSE;
+ Status = NtCreateDirectoryObject(&Handle,
+ DIRECTORY_ALL_ACCESS,
+ &ObjectAttributes);
+ if (!NT_SUCCESS(Status))
+ {
+ DPRINT1("Failed to create \\FileSystem directory: 0x%lx\n", Status);
+ return FALSE;
+ }
+ NtClose(Handle);
+
+ /* Create the '\FileSystem' object directory */
+ RtlInitUnicodeString(&DirName, L"\\FileSystem\\Filters");
+ InitializeObjectAttributes(&ObjectAttributes,
+ &DirName,
+ OBJ_PERMANENT,
+ NULL,
+ NULL);
+ Status = NtCreateDirectoryObject(&Handle,
+ DIRECTORY_ALL_ACCESS,
+ &ObjectAttributes);
+ if (!NT_SUCCESS(Status))
+ {
+ DPRINT1("Failed to create \\FileSystem\\Filters directory: 0x%lx\n", Status);
+ return FALSE;
+ }
NtClose(Handle);
/* Return success */
IopInitLookasideLists();
/* Initialize all locks and lists */
- ExInitializeResource(&IopDatabaseResource);
- ExInitializeResource(&IopSecurityResource);
+ ExInitializeResourceLite(&IopDatabaseResource);
+ ExInitializeResourceLite(&IopSecurityResource);
+ ExInitializeResourceLite(&IopDriverLoadResource);
KeInitializeGuardedMutex(&PnpNotifyListLock);
InitializeListHead(&IopDiskFileSystemQueueHead);
InitializeListHead(&IopCdRomFileSystemQueueHead);
KeInitializeSpinLock(&ShutdownListLock);
KeInitializeSpinLock(&IopLogListLock);
+ /* Initialize the reserve IRP */
+ if (!IopInitializeReserveIrp(&IopReserveIrpAllocator))
+ {
+ DPRINT1("IopInitializeReserveIrp failed!\n");
+ return FALSE;
+ }
+
/* Initialize Timer List Lock */
KeInitializeSpinLock(&IopTimerLock);
/* Initialize PnP manager */
IopInitializePlugPlayServices();
+ /* Initialize SHIM engine */
+ ApphelpCacheInitialize();
+
+ /* Initialize WMI */
+ WmiInitialize();
+
/* Initialize HAL Root Bus Driver */
HalInitPnpDriver();
/* Initialize PnP root relations */
IopEnumerateDevice(IopRootDeviceNode->PhysicalDeviceObject);
-#ifndef _WINKD_
+#if !defined(_WINKD_) && defined(KDBG)
/* Read KDB Data */
KdbInit();
return TRUE;
}
+BOOLEAN
+NTAPI
+IoInitializeCrashDump(IN HANDLE PageFileHandle)
+{
+ UNIMPLEMENTED;
+ return FALSE;
+}
+
/* EOF */