diff --git a/src/actions/drivers/byovd.rs b/src/actions/drivers/byovd.rs index f2875cd..2895ad8 100644 --- a/src/actions/drivers/byovd.rs +++ b/src/actions/drivers/byovd.rs @@ -7,9 +7,13 @@ use clap::Parser; use std::{error::Error, path::PathBuf}; use windows::{ core::{Owned, HSTRING, PCWSTR}, - Win32::System::Services::{ - CreateServiceW, OpenSCManagerW, StartServiceW, SC_HANDLE, SC_MANAGER_ALL_ACCESS, - SC_MANAGER_CREATE_SERVICE, SERVICE_AUTO_START, SERVICE_ERROR_IGNORE, SERVICE_KERNEL_DRIVER, + Win32::{ + Foundation::GENERIC_READ, + System::Services::{ + CreateServiceW, OpenSCManagerW, OpenServiceW, StartServiceW, SC_HANDLE, + SC_MANAGER_ALL_ACCESS, SC_MANAGER_CREATE_SERVICE, SERVICE_AUTO_START, + SERVICE_ERROR_IGNORE, SERVICE_KERNEL_DRIVER, + }, }, }; @@ -40,6 +44,16 @@ impl Runnable for Byovd { SC_MANAGER_CREATE_SERVICE, )?); + if OpenServiceW( + *service_manager, + &HSTRING::from(self.service_name.as_str()), + GENERIC_READ.0, + ) + .is_ok() + { + return Ok(()); + } + let service: Owned = Owned::new(CreateServiceW( *service_manager, &HSTRING::from(self.service_name.as_str()),