[CMAKE]
[reactos.git] / subsystems / win32 / csrss / win32csr / dllmain.c
index f385588..d8cfa8c 100644 (file)
@@ -9,11 +9,13 @@
 /* INCLUDES ******************************************************************/
 #define NDEBUG
 #include "w32csr.h"
+#include "file.h"
 #include <debug.h>
 
 /* Not defined in any header file */
 extern VOID WINAPI PrivateCsrssManualGuiCheck(LONG Check);
-extern VOID WINAPI InitializeAppSwitchHook();
+extern LIST_ENTRY DosDeviceHistory;
+extern RTL_CRITICAL_SECTION Win32CsrDefineDosDeviceCritSec;
 
 /* GLOBALS *******************************************************************/
 
@@ -87,11 +89,25 @@ static CSRSS_API_DEFINITION Win32CsrApiDefinitions[] =
     CSRSS_DEFINE_API(SET_HISTORY_NUMBER_COMMANDS,  CsrSetHistoryNumberCommands),
     CSRSS_DEFINE_API(GET_HISTORY_INFO,             CsrGetHistoryInfo),
     CSRSS_DEFINE_API(SET_HISTORY_INFO,             CsrSetHistoryInfo),
+    CSRSS_DEFINE_API(GET_TEMP_FILE,                CsrGetTempFile),
+    CSRSS_DEFINE_API(DEFINE_DOS_DEVICE,            CsrDefineDosDevice),
     { 0, 0, NULL }
 };
 
+static HHOOK hhk = NULL;
+
 /* FUNCTIONS *****************************************************************/
 
+LRESULT
+CALLBACK
+KeyboardHookProc(
+    int nCode,
+    WPARAM wParam,
+    LPARAM lParam)
+{
+   return CallNextHookEx(hhk, nCode, wParam, lParam);
+}
+
 BOOL WINAPI
 DllMain(HANDLE hDll,
         DWORD dwReason,
@@ -100,9 +116,19 @@ DllMain(HANDLE hDll,
     if (DLL_PROCESS_ATTACH == dwReason)
     {
         Win32CsrDllHandle = hDll;
-        InitializeAppSwitchHook();
+//
+// HACK HACK HACK ReactOS to BOOT! Initialization BUG ALERT! See bug 5655.
+//
+        hhk = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardHookProc, NULL, 0);
+// BUG ALERT! BUG ALERT! BUG ALERT! BUG ALERT! BUG ALERT! BUG ALERT! BUG ALERT!
+//  BUG ALERT! BUG ALERT! BUG ALERT! BUG ALERT! BUG ALERT! BUG ALERT! BUG ALERT!
+//   BUG ALERT! BUG ALERT! BUG ALERT! BUG ALERT! BUG ALERT! BUG ALERT! BUG ALERT!
     }
 
+    if (DLL_PROCESS_DETACH == dwReason)
+    {
+        CsrCleanupDefineDosDevice();
+    }
     return TRUE;
 }
 
@@ -173,6 +199,8 @@ Win32CsrInitialization(PCSRSS_API_DEFINITION *ApiDefinitions,
     ServerProcs->ProcessInheritProc = Win32CsrDuplicateHandleTable;
     ServerProcs->ProcessDeletedProc = Win32CsrReleaseConsole;
 
+    Status = RtlInitializeCriticalSection(&Win32CsrDefineDosDeviceCritSec);
+    InitializeListHead(&DosDeviceHistory);
     return TRUE;
 }