# Service config codes |
# https://docs.microsoft.com/en-us/windows/win32/api/winsvc/nf-winsvc-changeserviceconfig2w |
SERVICE_CONFIG_DESCRIPTION = 0x00000001 |
SERVICE_CONFIG_FAILURE_ACTIONS = 0x00000002 |
SERVICE_CONFIG_DELAYED_AUTO_START = 0x00000003 |
SERVICE_CONFIG_FAILURE_ACTIONS_FLAG = 0x00000004 |
SERVICE_CONFIG_SERVICE_SID_INFO = 0x00000005 |
SERVICE_CONFIG_REQUIRED_PRIVILEGES_INFO = 0x00000006 |
SERVICE_CONFIG_PRESHUTDOWN_INFO = 0x00000007 |
SERVICE_CONFIG_TRIGGER_INFO = 0x00000008 |
SERVICE_CONFIG_PREFERRED_NODE = 0x00000009 |
SERVICE_CONFIG_LAUNCH_PROTECTED = 0x00000012 |
|
SERVICE_CONFIG_CHANGES = { |
SERVICE_CONFIG_DELAYED_AUTO_START => :SERVICE_CONFIG_DELAYED_AUTO_START |
} |
|
class SERVICE_DELAYED_AUTO_START < FFI::Struct |
layout( |
:fDelayedAutostart, :win32_bool |
) |
end |
|
def set_startup_mode_delayed(service_name) |
change_code = SERVICE_CONFIG_CHANGES.key('SERVICE_CONFIG_DELAYED_AUTO_START') |
change_ptr = FFI::Pointer.new(SERVICE_DELAYED_AUTO_START, SERVICE_DELAYED_AUTO_START.size) |
open_service(service_name, SC_MANAGER_CONNECT, SERVICE_CHANGE_CONFIG) do |service| |
success = ChangeServiceConfig2W ( |
service, |
change_code, # dwInfoLevel |
change_ptr # lpInfo |
) |
if success == FFI::WIN32_FALSE |
raise Puppet::Util::Windows::Error.new(_("Failed to update service delayed_auto_start configuration")) |
end |
end |
end |
module_function :set_startup_mode_delayed
|