75
}
76
} // namespace
77
78
-WslCoreVm::WslCoreVm(_In_ wsl::core::Config&& VmConfig) :
79
- m_vmConfig(std::move(VmConfig)), m_traceClient(m_vmConfig.EnableTelemetry)
78
+WslCoreVm::WslCoreVm(_In_ wsl::core::Config&& VmConfig, _In_ InitializeDrvFsCallback InitializeDrvFs) :
79
+ m_vmConfig(std::move(VmConfig)), m_initializeDrvFs(std::move(InitializeDrvFs)), m_traceClient(m_vmConfig.EnableTelemetry)
80
{
81
// Create a job object that will terminate child processes (wslhost.exe, wslrelay.exe)
82
// when the VM is destroyed.
83
m_processJobObject = wsl::windows::common::helpers::CreateKillOnCloseJob();
84
}
85
86
-std::unique_ptr<WslCoreVm> WslCoreVm::Create(_In_ const wil::shared_handle& UserToken, _In_ wsl::core::Config&& VmConfig, _In_ const GUID& VmId)
86
+std::unique_ptr<WslCoreVm> WslCoreVm::Create(
87
+ _In_ const wil::shared_handle& UserToken, _In_ wsl::core::Config&& VmConfig, _In_ const GUID& VmId, _In_ InitializeDrvFsCallback InitializeDrvFs)
88
{
88
- auto newInstance = std::unique_ptr<WslCoreVm>{new WslCoreVm{std::move(VmConfig)}};
89
+ THROW_HR_IF(E_INVALIDARG, !InitializeDrvFs);
90
+
91
+ auto newInstance = std::unique_ptr<WslCoreVm>{new WslCoreVm{std::move(VmConfig), std::move(InitializeDrvFs)}};
92
try
93
{
94
const auto startTimeMs = GetTickCount64();
1284
localConfig,
1285
DefaultUid,
1286
ClientLifetimeId,
1284
- std::bind(s_InitializeDrvFs, this, std::placeholders::_1),
1287
+ m_initializeDrvFs,
1288
featureFlags,
1289
m_vmConfig.DistributionStartTimeout,
1290
m_vmConfig.InstanceIdleTimeout,
2781
return target;
2782
}
2783
2781
-LX_INIT_DRVFS_MOUNT WslCoreVm::s_InitializeDrvFs(_Inout_ WslCoreVm* VmContext, _In_ HANDLE UserToken)
2782
-{
2783
- try
2784
- {
2785
- return VmContext->InitializeDrvFs(UserToken) ? LxInitDrvfsMountElevated : LxInitDrvfsMountNonElevated;
2786
- }
2787
- catch (...)
2788
- {
2789
- LOG_CAUGHT_EXCEPTION();
2790
-
2791
- return LxInitDrvfsMountNone;
2792
- }
2793
-}
2794
-
2784
void CALLBACK WslCoreVm::s_OnExit(_In_ HCS_EVENT* Event, _In_opt_ void* Context)
2785
try
2786
{