diff --git a/src/sys/driver.c b/src/sys/driver.c index c0f615d8..ad2a2c67 100644 --- a/src/sys/driver.c +++ b/src/sys/driver.c @@ -150,6 +150,10 @@ NTSTATUS DriverEntry( goto exit; InitDoneDevices = TRUE; + Result = FspSiloPostInitialize(); + if (!NT_SUCCESS(Result)) + goto exit; + Result = STATUS_SUCCESS; exit: diff --git a/src/sys/driver.h b/src/sys/driver.h index c0e56e26..fe748534 100644 --- a/src/sys/driver.h +++ b/src/sys/driver.h @@ -754,6 +754,7 @@ NTSTATUS FspSiloGetGlobals(FSP_SILO_GLOBALS **PGlobals); VOID FspSiloDereferenceGlobals(FSP_SILO_GLOBALS *Globals); VOID FspSiloGetContainerId(GUID *ContainerId); NTSTATUS FspSiloInitialize(FSP_SILO_INIT_CALLBACK Init, FSP_SILO_FINI_CALLBACK Fini); +NTSTATUS FspSiloPostInitialize(VOID); VOID FspSiloFinalize(VOID); /* process buffers */ diff --git a/src/sys/silo.c b/src/sys/silo.c index 7af2ea7a..665fc474 100644 --- a/src/sys/silo.c +++ b/src/sys/silo.c @@ -22,9 +22,11 @@ #include NTSTATUS FspSiloInitialize(FSP_SILO_INIT_CALLBACK Init, FSP_SILO_FINI_CALLBACK Fini); +NTSTATUS FspSiloPostInitialize(VOID); #ifdef ALLOC_PRAGMA #pragma alloc_text(INIT, FspSiloInitialize) +#pragma alloc_text(INIT, FspSiloPostInitialize) #endif typedef PEJOB FSP_PESILO; @@ -293,15 +295,11 @@ NTSTATUS FspSiloInitialize(FSP_SILO_INIT_CALLBACK Init, FSP_SILO_FINI_CALLBACK F if (!NT_SUCCESS(Result)) goto exit; - Result = CALL(PsStartSiloMonitor)(Monitor); - if (!NT_SUCCESS(Result)) - goto exit; - FspSiloMonitor = Monitor; FspSiloInitCallback = Init; FspSiloFiniCallback = Fini; - FspSiloInitDone = TRUE; + Result = STATUS_SUCCESS; exit: @@ -316,10 +314,23 @@ NTSTATUS FspSiloInitialize(FSP_SILO_INIT_CALLBACK Init, FSP_SILO_FINI_CALLBACK F return Result; } +NTSTATUS FspSiloPostInitialize(VOID) +{ + if (!FspSiloInitDone) + return STATUS_SUCCESS; + + return CALL(PsStartSiloMonitor)(FspSiloMonitor); +} + VOID FspSiloFinalize(VOID) { if (!FspSiloInitDone) return; CALL(PsUnregisterSiloMonitor)(FspSiloMonitor); + + FspSiloMonitor = 0; + FspSiloInitCallback = 0; + FspSiloFiniCallback = 0; + FspSiloInitDone = FALSE; } diff --git a/tools/deploy.bat b/tools/deploy.bat index a265469a..fe3a1344 100755 --- a/tools/deploy.bat +++ b/tools/deploy.bat @@ -7,7 +7,8 @@ set Config=Debug set Suffix=x64 set Deploy=C:\Deploy\winfsp set Target=Win10DBG -set Chkpnt=winfsp +set Chkpnt=docker+winfsp +set CImage=mcr.microsoft.com/windows/servercore:1909 if not X%1==X set Target=%1 if not X%2==X set Chkpnt=%2 @@ -15,6 +16,10 @@ if not X%2==X set Chkpnt=%2 echo regsvr32 /s winfsp-x64.dll ) > %~dp0..\build\VStudio\build\%Config%\deploy-setup.bat +( + echo docker run -it --rm --isolation=process -v%Deploy%:%Deploy%:RO %CImage% cmd.exe +) > %~dp0..\build\VStudio\build\%Config%\docker-run.bat + set Files= for %%f in ( %~dp0..\build\VStudio\build\%Config%\ @@ -23,6 +28,7 @@ for %%f in ( winfsp-tests-%Suffix%.exe memfs-%Suffix%.exe deploy-setup.bat + docker-run.bat ) do ( set File=%%~f if [!File:~-1!] == [\] (