public void CanDisableAtGivenTime() { int deactivateAfterMs = 200, checkAfterMs = 200; this.ExecuteTest((proxy, pendingChanges, driversSource) => { var moduleName = new DriverModuleName("ACPI"); var switcher = new DriversScheduledEnablementSwitcher( proxy.Query, proxy.Manage, pendingChanges ); var schedule = new DriverEnablementSchedule { { DateTime.Now.AddMilliseconds( deactivateAfterMs), DriverEnablementRequest.Deactivation } }; switcher.Disable(moduleName, schedule); Assert.IsTrue(driversSource.GetStatus(moduleName) .IsDeactivationPending == false); Thread.Sleep(deactivateAfterMs + checkAfterMs); Assert.IsTrue(driversSource.GetStatus(moduleName) .IsDeactivationPending == true); }); }
private void LaunchEnablementSwitcher() { DriverModuleName moduleName; { string mnStr = GCTaskFilesInterface.GetNameOfModuleToDisable(); if (string.IsNullOrEmpty(mnStr)) { Console.WriteLine("Could not get module name of driver to disable."); return; } moduleName = new DriverModuleName(mnStr); if (this.proxy.Query.HasDriver(moduleName) == false) { Console.WriteLine(string.Format( "Driver {0} was not found.", mnStr)); return; } if (this.proxy.Query.SupportsDisabling(moduleName) == false) { Console.WriteLine(string.Format( "Driver {0} cannot be disabled.", mnStr)); return; } } this.switcher = new DriversScheduledEnablementSwitcher( this.proxy.Query, this.proxy.Manage, this.pendingChanges ); IEnumerable <DateTime> inputSchedule = GCTaskFilesInterface.GetDisablementSchedule(); if (inputSchedule == null) { return; } this.switcher.DeactivationRequested += (sender, ea) => Console.WriteLine(string.Format( "Deactivation requested for driver '{0}'.", moduleName)); var switcherSchedule = new DriverEnablementSchedule(); foreach (DateTime time in inputSchedule) { switcherSchedule[time] = DriverEnablementRequest.Deactivation; } this.switcher.Disable(new DriverModuleName(moduleName), switcherSchedule); }