Cleanup isn't necessary after calling the driver in NtQueryDirectoryFile.
[reactos.git] / reactos / ntoskrnl / inbv / inbv.c
index 70c841c..a3e3145 100755 (executable)
@@ -1,24 +1,24 @@
-/* $Id: inbv.c,v 1.4 2003/11/17 02:12:50 hyperion Exp $
+/* $Id$
  *
  * COPYRIGHT:      See COPYING in the top level directory
  * PROJECT:        ReactOS kernel
  * FILE:           ntoskrnl/inbv/inbv.c
  * PURPOSE:        Boot video support
- * PROGRAMMER:     Casper S. Hornstrup (chorns@users.sourceforge.net)
- * UPDATE HISTORY:
- *  12-07-2003 CSH Created
+ *
+ * PROGRAMMERS:    Casper S. Hornstrup (chorns@users.sourceforge.net)
  */
 
 /* INCLUDES ******************************************************************/
 
-#include <roskrnl.h>
-#include <ntos/bootvid.h>
-#include <ddk/ntbootvid.h>
-#include <rosrtl/string.h>
-
+#include <ntoskrnl.h>
+#include "../../drivers/dd/bootvid/ntbootvid.h"
 #define NDEBUG
 #include <internal/debug.h>
 
+#if defined (ALLOC_PRAGMA)
+#pragma alloc_text(INIT, InbvEnableBootDriver)
+#endif
+
 
 /* GLOBALS *******************************************************************/
 
@@ -40,9 +40,8 @@ InbvCheckBootVid(VOID)
     {
       NTSTATUS Status;
       OBJECT_ATTRIBUTES ObjectAttributes;
-      UNICODE_STRING BootVidName;
+      UNICODE_STRING BootVidName = RTL_CONSTANT_STRING(L"\\Device\\BootVid");
 
-      RtlRosInitUnicodeStringFromLiteral(&BootVidName, L"\\Device\\BootVid");
       InitializeObjectAttributes(&ObjectAttributes,
                                 &BootVidName,
                                 0,
@@ -62,13 +61,13 @@ InbvCheckBootVid(VOID)
   return(STATUS_SUCCESS);
 }
 
+
 VOID
 STDCALL
 InbvAcquireDisplayOwnership(VOID)
 {
 }
 
-
 BOOLEAN
 STDCALL
 InbvCheckDisplayOwnership(VOID)
@@ -76,21 +75,32 @@ InbvCheckDisplayOwnership(VOID)
   return FALSE;
 }
 
-
 BOOLEAN
 STDCALL
 InbvDisplayString(IN PCHAR String)
 {
-  return FALSE;
+    /* Call Bootvid (we don't support bootvid for now) 
+     * vidDisplayString(String);
+     * so instead, we'll fall-back to HAL
+     */
+     HalDisplayString(String);
+     
+     /* Call Headless (We don't support headless for now) 
+     HeadlessDispatch(DISPLAY_STRING);
+     */
+     
+     /* Return success */
+     return TRUE;
 }
 
 BOOLEAN
-STDCALL_FUNC
+STDCALL
 InbvResetDisplayParameters(ULONG SizeX, ULONG SizeY)
 {
   return(InbvResetDisplay());
 }
 
+
 VOID
 STDCALL INIT_FUNCTION
 InbvEnableBootDriver(IN BOOLEAN Enable)
@@ -106,6 +116,9 @@ InbvEnableBootDriver(IN BOOLEAN Enable)
 
   if (Enable)
     {
+      /* Notify the hal we will acquire the display. */
+      HalAcquireDisplayOwnership(InbvResetDisplayParameters);
+
       Status = NtDeviceIoControlFile(BootVidDevice,
                                     NULL,
                                     NULL,
@@ -118,12 +131,10 @@ InbvEnableBootDriver(IN BOOLEAN Enable)
                                     sizeof(BootVidFunctionTable));
       if (!NT_SUCCESS(Status))
        {
-         KeBugCheck(0);
+         KEBUGCHECK(0);
        }
       BootVidDriverInstalled = TRUE;
-      /* Notify the hal we have acquired the display. */
       CHECKPOINT;
-      HalAcquireDisplayOwnership(InbvResetDisplayParameters);
     }
   else
     {
@@ -139,7 +150,7 @@ InbvEnableBootDriver(IN BOOLEAN Enable)
                                     0);
       if (!NT_SUCCESS(Status))
        {
-         KeBugCheck(0);
+         KEBUGCHECK(0);
        }
       BootVidDriverInstalled = FALSE;
       /* Notify the hal we have released the display. */
@@ -150,6 +161,7 @@ InbvEnableBootDriver(IN BOOLEAN Enable)
     }
 }
 
+
 BOOLEAN
 STDCALL
 InbvEnableDisplayString(IN BOOLEAN Enable)
@@ -218,3 +230,16 @@ InbvSolidColorFill(IN ULONG Left,
   IN ULONG Color)
 {
 }
+
+NTSTATUS
+STDCALL
+NtDisplayString(IN PUNICODE_STRING DisplayString)
+{
+  OEM_STRING OemString;
+
+  RtlUnicodeStringToOemString(&OemString, DisplayString, TRUE);
+  HalDisplayString(OemString.Buffer);
+  RtlFreeOemString(&OemString);
+
+  return STATUS_SUCCESS;
+}