#include <glib/gutils.h> /* for g_atexit() */
#include "giochannel-blind.h"
#include <glib-object.h>
+#include "reactos/internal/se.h" /* for SeInit2() */
/* Are we initialized? */
static PMODULE_OBJECT ModuleObject;
/* Driver in fs module loaded by captive_w32_init() */
-static DRIVER_OBJECT DriverObject;
+DRIVER_OBJECT captive_DriverObject;
+PDRIVER_REINITIALIZE captive_DriverObject_ReinitRoutine;
+PVOID captive_DriverObject_ReinitRoutine_Context;
/* Structure holding the pointer to the toplevel IRP */
static TOP_LEVEL_IRP TopLevelIrp; /* TODO:thread */
/* Part of reactos/ntoskrnl/ldr/loader.c/LdrInit1() ends. */
KeLowerIrql(DISPATCH_LEVEL);
/*...*/
- KeLowerIrql(PASSIVE_LEVEL);
- /*...*/
/* create default nls tables */
RtlpInitNlsTables();
/*...*/
+ KeLowerIrql(PASSIVE_LEVEL);
+ errbool=SeInit1();
+ g_assert(errbool==TRUE);
ObInit();
- /*...*/
+ errbool=SeInit2();
+ g_assert(errbool==TRUE);
/* PiInitProcessManager(); */
/* Part of reactos/ntoskrnl/ps/psmgr.c/PiInitProcessManager() begins. */
PsInitProcessManagment();
/* You must have already captive_signal_init() passed here as the module may
* call some functions from W32 ntoskrnl.exe.
*/
+ captive_DriverObject_ReinitRoutine=NULL;
err=captive_LdrpLoadAndCallImage(
&ModuleObject, /* ModuleObjectp */
captive_utf8_to_UnicodeString_alloca(captive_option_filesystem), /* ModuleName */
- &DriverObject, /* DriverEntry_DriverObject */
+ &captive_DriverObject, /* DriverEntry_DriverObject */
captive_utf8_to_UnicodeString_alloca("\\captive\\filesystem")); /* DriverEntry_RegistryPath */
g_return_val_if_fail(NT_SUCCESS(err),FALSE);
+ if (captive_DriverObject_ReinitRoutine) {
+ (*captive_DriverObject_ReinitRoutine)(
+ &captive_DriverObject, /* DriverObject */
+ captive_DriverObject_ReinitRoutine_Context, /* Context */
+ 1); /* Count: # of calls of ReinitRoutine incl. the current one */
+ }
return TRUE;
}
g_return_val_if_fail(active==TRUE,FALSE);
g_return_val_if_fail(captive_image_iochannel!=NULL,FALSE);
+ captive_PoQueueShutdownWorkItem_hooklist_invoke();
+
/* FIXME: ntoskrnl/ex/power.c/NtShutdownSystem() does
* IoShutdownRegistered{Devices,FileSystems} order; is it correct?
*/