lib/win32/windows/structs.rb in win32-service-0.8.6 vs lib/win32/windows/structs.rb in win32-service-0.8.7

- old
+ new

@@ -1,121 +1,130 @@ -require 'ffi' - -module Windows - module Structs - extend FFI::Library - - typedef :ulong, :dword - - class SERVICE_STATUS < FFI::Struct - layout( - :dwServiceType, :ulong, - :dwCurrentState, :ulong, - :dwControlsAccepted, :ulong, - :dwWin32ExitCode, :ulong, - :dwServiceSpecificExitCode, :ulong, - :dwCheckPoint, :ulong, - :dwWaitHint, :ulong - ) - end - - class SERVICE_STATUS_PROCESS < FFI::Struct - layout( - :dwServiceType, :dword, - :dwCurrentState, :dword, - :dwControlsAccepted, :dword, - :dwWin32ExitCode, :dword, - :dwServiceSpecificExitCode, :dword, - :dwCheckPoint, :dword, - :dwWaitHint, :dword, - :dwProcessId, :dword, - :dwServiceFlags, :dword - ) - end - - class SERVICE_DESCRIPTION < FFI::Struct - layout(:lpDescription, :pointer) - end - - class SERVICE_DELAYED_AUTO_START_INFO < FFI::Struct - layout(:fDelayedAutostart, :bool) - end - - class QUERY_SERVICE_CONFIG < FFI::Struct - layout( - :dwServiceType, :dword, - :dwStartType, :dword, - :dwErrorControl, :dword, - :lpBinaryPathName, :pointer, - :lpLoadOrderGroup, :pointer, - :dwTagId, :dword, - :lpDependencies, :pointer, - :lpServiceStartName, :pointer, - :lpDisplayName, :pointer - ) - end - - class SERVICE_STATUS_PROCESS < FFI::Struct - layout( - :dwServiceType, :dword, - :dwCurrentState, :dword, - :dwControlsAccepted, :dword, - :dwWin32ExitCode, :dword, - :dwServiceSpecificExitCode, :dword, - :dwCheckPoint, :dword, - :dwWaitHint, :dword, - :dwProcessId, :dword, - :dwServiceFlags, :dword - ) - end - - class ENUM_SERVICE_STATUS_PROCESS < FFI::Struct - layout( - :lpServiceName, :pointer, - :lpDisplayName, :pointer, - :ServiceStatusProcess, SERVICE_STATUS_PROCESS - ) - end - - class SC_ACTION < FFI::Struct - layout(:Type, :int, :Delay, :dword) - end - - class SERVICE_FAILURE_ACTIONS < FFI::Struct - layout( - :dwResetPeriod, :dword, - :lpRebootMsg, :pointer, - :lpCommand, :pointer, - :cActions, :dword, - :lpsaActions, :pointer # Array of SC_ACTION structs - ) - end - - class SERVICE_TABLE_ENTRY < FFI::Struct - layout( - :lpServiceName, :pointer, - :lpServiceProc, :pointer - ) - end - - class LUID < FFI::Struct - layout( - :LowPart, :ulong, - :HighPart, :long - ) - end - - class LUID_AND_ATTRIBUTES < FFI::Struct - layout( - :Luid, LUID, - :Attributes, :ulong - ) - end - - class TOKEN_PRIVILEGES < FFI::Struct - layout( - :PrivilegeCount, :dword, - :Privileges, [LUID_AND_ATTRIBUTES, 1] - ) - end - end -end +require 'ffi' + +module Windows + module Structs + extend FFI::Library + + typedef :ulong, :dword + + class SERVICE_STATUS < FFI::Struct + layout( + :dwServiceType, :ulong, + :dwCurrentState, :ulong, + :dwControlsAccepted, :ulong, + :dwWin32ExitCode, :ulong, + :dwServiceSpecificExitCode, :ulong, + :dwCheckPoint, :ulong, + :dwWaitHint, :ulong + ) + end + + class SERVICE_STATUS_PROCESS < FFI::Struct + layout( + :dwServiceType, :dword, + :dwCurrentState, :dword, + :dwControlsAccepted, :dword, + :dwWin32ExitCode, :dword, + :dwServiceSpecificExitCode, :dword, + :dwCheckPoint, :dword, + :dwWaitHint, :dword, + :dwProcessId, :dword, + :dwServiceFlags, :dword + ) + end + + class SERVICE_DESCRIPTION < FFI::Struct + layout(:lpDescription, :pointer) + end + + class SERVICE_DELAYED_AUTO_START_INFO < FFI::Struct + layout(:fDelayedAutostart, :int) # BOOL + + alias aset []= + + # Intercept the accessor so that we can handle either true/false or 1/0. + # Since there is only one member, there's no need to check the key name. + # + def []=(key, value) + [0, false].include?(value) ? aset(key, 0) : aset(key, 1) + end + end + + class QUERY_SERVICE_CONFIG < FFI::Struct + layout( + :dwServiceType, :dword, + :dwStartType, :dword, + :dwErrorControl, :dword, + :lpBinaryPathName, :pointer, + :lpLoadOrderGroup, :pointer, + :dwTagId, :dword, + :lpDependencies, :pointer, + :lpServiceStartName, :pointer, + :lpDisplayName, :pointer + ) + end + + class SERVICE_STATUS_PROCESS < FFI::Struct + layout( + :dwServiceType, :dword, + :dwCurrentState, :dword, + :dwControlsAccepted, :dword, + :dwWin32ExitCode, :dword, + :dwServiceSpecificExitCode, :dword, + :dwCheckPoint, :dword, + :dwWaitHint, :dword, + :dwProcessId, :dword, + :dwServiceFlags, :dword + ) + end + + class ENUM_SERVICE_STATUS_PROCESS < FFI::Struct + layout( + :lpServiceName, :pointer, + :lpDisplayName, :pointer, + :ServiceStatusProcess, SERVICE_STATUS_PROCESS + ) + end + + class SC_ACTION < FFI::Struct + layout(:Type, :int, :Delay, :dword) + end + + class SERVICE_FAILURE_ACTIONS < FFI::Struct + layout( + :dwResetPeriod, :dword, + :lpRebootMsg, :pointer, + :lpCommand, :pointer, + :cActions, :dword, + :lpsaActions, :pointer # Array of SC_ACTION structs + ) + end + + class SERVICE_TABLE_ENTRY < FFI::Struct + layout( + :lpServiceName, :pointer, + :lpServiceProc, :pointer + ) + end + + class LUID < FFI::Struct + layout( + :LowPart, :ulong, + :HighPart, :long + ) + end + + class LUID_AND_ATTRIBUTES < FFI::Struct + layout( + :Luid, LUID, + :Attributes, :ulong + ) + end + + class TOKEN_PRIVILEGES < FFI::Struct + layout( + :PrivilegeCount, :dword, + :Privileges, [LUID_AND_ATTRIBUTES, 1] + ) + end + end +end