Changes to get video drivers and win32k to load
authorRex Jolliff <rex@lvcablemodem.com>
Sun, 24 Oct 1999 17:07:57 +0000 (17:07 +0000)
committerRex Jolliff <rex@lvcablemodem.com>
Sun, 24 Oct 1999 17:07:57 +0000 (17:07 +0000)
svn path=/trunk/; revision=731

reactos/Makefile
reactos/ntoskrnl/io/device.c
reactos/ntoskrnl/ldr/loader.c
reactos/subsys/smss/init.c

index a6161c3..65ef2c5 100644 (file)
@@ -35,7 +35,7 @@ LOADERS = dos
 #
 # Select the device drivers and filesystems you want
 #
-DEVICE_DRIVERS = blue ide keyboard null parallel serial vidport
+DEVICE_DRIVERS = blue ide keyboard null parallel serial vga vidport
 # DEVICE_DRIVERS = beep event floppy ide_test mouse sound test test1
 FS_DRIVERS = vfat
 # FS_DRIVERS = minix ext2 template
index 530111c..32393da 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: device.c,v 1.10 1999/08/29 06:59:06 ea Exp $
+/* $Id: device.c,v 1.11 1999/10/24 17:07:57 rex Exp $
  *
  * COPYRIGHT:      See COPYING in the top level directory
  * PROJECT:        ReactOS kernel
@@ -56,7 +56,8 @@ NtLoadDriver (
        PUNICODE_STRING DriverServiceName
        )
 {
-       UNIMPLEMENTED;
+  /* FIXME: this should lookup the filename from the registry and then call LdrLoadDriver  */
+  return  LdrLoadDriver (DriverServiceName);
 }
 
 
index 482f7bd..31e0dfd 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: loader.c,v 1.34 1999/10/23 18:58:40 rex Exp $
+/* $Id: loader.c,v 1.35 1999/10/24 17:07:57 rex Exp $
  * 
  * COPYRIGHT:       See COPYING in the top level directory
  * PROJECT:         ReactOS kernel
@@ -52,23 +52,24 @@ NTSTATUS LdrLoadDriver(PUNICODE_STRING Filename);
 NTSTATUS LdrProcessDriver(PVOID ModuleLoadBase);
 
 PMODULE_OBJECT  LdrLoadModule(PUNICODE_STRING Filename);
-PMODULE_OBJECT  LdrProcessModule(PVOID ModuleLoadBase);
+PMODULE_OBJECT  LdrProcessModule(PVOID ModuleLoadBase, PUNICODE_STRING ModuleName);
 PVOID  LdrGetExportAddress(PMODULE_OBJECT ModuleObject, char *Name, unsigned short Hint);
 static PMODULE_OBJECT LdrOpenModule(PUNICODE_STRING  Filename);
-static PIMAGE_SECTION_HEADER LdrPEGetEnclosingSectionHeader(DWORD  RVA,
-                                                            PMODULE_OBJECT  ModuleObject);
 static NTSTATUS LdrCreateModule(PVOID ObjectBody,
                                 PVOID Parent,
                                 PWSTR RemainingPath,
                                 POBJECT_ATTRIBUTES ObjectAttributes);
 
 /*  PE Driver load support  */
-static PMODULE_OBJECT  LdrPEProcessModule(PVOID ModuleLoadBase);
+static PMODULE_OBJECT  LdrPEProcessModule(PVOID ModuleLoadBase, PUNICODE_STRING ModuleName);
 static PVOID  LdrPEGetExportAddress(PMODULE_OBJECT ModuleObject, 
                                     char *Name, 
                                     unsigned short Hint);
+#if 0
 static unsigned int LdrGetKernelSymbolAddr(char *Name);
-
+#endif
+static PIMAGE_SECTION_HEADER LdrPEGetEnclosingSectionHeader(DWORD  RVA,
+                                                            PMODULE_OBJECT  ModuleObject);
 
 /* FUNCTIONS *****************************************************************/
 
@@ -221,6 +222,10 @@ LdrLoadAutoConfigDrivers (VOID)
          * VideoPort driver
          */
         LdrLoadAutoConfigDriver( L"vidport.sys" );
+        /*
+         * VGA Miniport driver
+         */
+        LdrLoadAutoConfigDriver( L"vgamp.sys" );
 }
 
 
@@ -279,7 +284,7 @@ LdrLoadModule(PUNICODE_STRING Filename)
   PMODULE_OBJECT  ModuleObject;
   FILE_STANDARD_INFORMATION FileStdInfo;
   WCHAR  NameBuffer[60];
-  PWSTR  RemainingPath;
+//  PWSTR  RemainingPath;
   UNICODE_STRING  ModuleName;
 
   /*  Check for module already loaded  */
@@ -349,7 +354,20 @@ LdrLoadModule(PUNICODE_STRING Filename)
 
   ZwClose(FileHandle);
 
-  ModuleObject = LdrProcessModule(ModuleLoadBase);
+  /*  Build module object name  */
+  wcscpy(NameBuffer, MODULE_ROOT_NAME);
+  if (wcsrchr(Filename->Buffer, '\\') != 0)
+    {
+      wcscat(NameBuffer, wcsrchr(Filename->Buffer, '\\') + 1);
+    }
+  else
+    {
+      wcscat(NameBuffer, Filename->Buffer);
+    }
+  ModuleName.Length = ModuleName.MaximumLength = wcslen(NameBuffer);
+  ModuleName.Buffer = NameBuffer;
+
+  ModuleObject = LdrProcessModule(ModuleLoadBase, &ModuleName);
 
   /*  Cleanup  */
   ExFreePool(ModuleLoadBase);
@@ -362,7 +380,7 @@ LdrProcessDriver(PVOID ModuleLoadBase)
 {
   PMODULE_OBJECT ModuleObject;
 
-  ModuleObject = LdrProcessModule(ModuleLoadBase);
+  ModuleObject = LdrProcessModule(ModuleLoadBase, 0);
   if (ModuleObject == 0)
     {
       return STATUS_UNSUCCESSFUL;
@@ -374,7 +392,7 @@ LdrProcessDriver(PVOID ModuleLoadBase)
 }
 
 PMODULE_OBJECT
-LdrProcessModule(PVOID ModuleLoadBase)
+LdrProcessModule(PVOID ModuleLoadBase, PUNICODE_STRING ModuleName)
 {
   PIMAGE_DOS_HEADER PEDosHeader;
 
@@ -382,7 +400,7 @@ LdrProcessModule(PVOID ModuleLoadBase)
   PEDosHeader = (PIMAGE_DOS_HEADER) ModuleLoadBase;
   if (PEDosHeader->e_magic == IMAGE_DOS_MAGIC && PEDosHeader->e_lfanew != 0L)
     {
-      return LdrPEProcessModule(ModuleLoadBase);
+      return LdrPEProcessModule(ModuleLoadBase, ModuleName);
     }
 #if 0
   if (PEDosHeader->e_magic == IMAGE_DOS_MAGIC)
@@ -391,7 +409,7 @@ LdrProcessModule(PVOID ModuleLoadBase)
     }
   else  /*  Assume COFF format and load  */
     {
-      return LdrCOFFProcessModule(ModuleLoadBase);
+      return LdrCOFFProcessModule(ModuleLoadBase, ModuleName);
     }
 #endif
 
@@ -456,7 +474,7 @@ LdrGetExportAddress(PMODULE_OBJECT ModuleObject,
 /*  ----------------------------------------------  PE Module support */
 
 PMODULE_OBJECT
-LdrPEProcessModule(PVOID ModuleLoadBase)
+LdrPEProcessModule(PVOID ModuleLoadBase, PUNICODE_STRING pModuleName)
 {
   unsigned int DriverSize, Idx, Idx2;
   ULONG RelocDelta, NumRelocs;
@@ -730,29 +748,36 @@ LdrPEProcessModule(PVOID ModuleLoadBase)
     }
 
   /*  Create ModuleName string  */
-  wcscpy(NameBuffer, MODULE_ROOT_NAME);
-  if (PEOptionalHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT]
-        .VirtualAddress != 0)
+  if (pModuleName != 0)
     {
-      ExportDirectory = (PIMAGE_EXPORT_DIRECTORY) (DriverBase +
-        PEOptionalHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT]
-          .VirtualAddress);
-      wcscat(NameBuffer, DriverBase + ExportDirectory->Name);
+      wcscpy(NameBuffer, pModuleName->Buffer);
     }
   else
     {
-      char buf[12];
+      wcscpy(NameBuffer, MODULE_ROOT_NAME);
+      if (PEOptionalHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT]
+            .VirtualAddress != 0)
+        {
+          ExportDirectory = (PIMAGE_EXPORT_DIRECTORY) (DriverBase +
+            PEOptionalHeader->DataDirectory[IMAGE_DIRECTORY_ENTRY_EXPORT]
+              .VirtualAddress);
+          wcscat(NameBuffer, DriverBase + ExportDirectory->Name);
+        }
+      else
+        {
+          char buf[12];
 
-      sprintf(buf, "%08X", (DWORD) DriverBase);
-      for (Idx = 0; NameBuffer[Idx] != 0; Idx++)
-        ;
-      Idx2 = 0;
-      while ((NameBuffer[Idx + Idx2] = (WCHAR) buf[Idx2]) != 0)
-        Idx2++;
+          sprintf(buf, "%08X", (DWORD) DriverBase);
+          for (Idx = 0; NameBuffer[Idx] != 0; Idx++)
+            ;
+          Idx2 = 0;
+          while ((NameBuffer[Idx + Idx2] = (WCHAR) buf[Idx2]) != 0)
+            Idx2++;
+        }
     }
   ModuleName.Length = ModuleName.MaximumLength = wcslen(NameBuffer);
   ModuleName.Buffer = NameBuffer;
-  DPRINT("Module name is: %W\n", &ModuleName);
+  DbgPrint("Module name is: %W\n", &ModuleName);
   
   /*  Initialize ObjectAttributes for ModuleObject  */
   InitializeObjectAttributes(&ObjectAttributes, 
index a65fee9..cc862b8 100644 (file)
@@ -1,4 +1,4 @@
-/* $Id: init.c,v 1.1 1999/09/05 12:29:50 ekohl Exp $
+/* $Id: init.c,v 1.2 1999/10/24 17:07:57 rex Exp $
  *
  * init.c - Session Manager initialization
  * 
@@ -43,7 +43,16 @@ InitSessionManager(
        /* FIXME: Define symbolic links to kernel devices (MS-DOS names) */
         /* FIXME: Create paging files (if any) other than the first one */
        /* FIXME: Load the well known DLLs */
+
        /* FIXME: Load the kernel mode driver win32k.sys */
+        RtlInitUnicodeString(&CmdLineW,
+                             L"\\??\\C:\\reactos\\system32\\drivers\\win32k.sys");
+        Status = NtLoadDriver(&CmdLineW);
+
+       if (!NT_SUCCESS(Status))
+       {
+               return FALSE;
+       }
 
 #if 0
        /* Start the Win32 subsystem (csrss.exe) */