Sha256: de29b6d2cf8ff6d971016e29a4d32357ba3b6e582226aa1eab199456b20f3d0f
Contents?: true
Size: 1.42 KB
Versions: 1
Compression:
Stored size: 1.42 KB
Contents
require 'ffi' module Windows module TaskSchedulerHelper extend FFI::Library FORMAT_MESSAGE_IGNORE_INSERTS = 0x00000200 FORMAT_MESSAGE_FROM_SYSTEM = 0x00001000 FORMAT_MESSAGE_MAX_WIDTH_MASK = 0x000000FF ffi_lib :kernel32, :advapi32 attach_function :FormatMessage, :FormatMessageA, [:ulong, :pointer, :ulong, :ulong, :pointer, :ulong, :pointer], :ulong attach_function :ConvertStringSidToSidW, [ :pointer, :pointer ], :bool attach_function :LookupAccountSidW, [ :pointer, :pointer, :pointer, :pointer, :pointer, :pointer, :pointer ], :bool attach_function :LocalFree, [ :pointer ], :pointer def win_error(function, err=FFI.errno) err_msg = '' flags = FORMAT_MESSAGE_IGNORE_INSERTS | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_MAX_WIDTH_MASK # 0x0409 == MAKELANGID(LANG_ENGLISH, SUBLANG_ENGLISH_US) # We use English for errors because Ruby uses English for errors. FFI::MemoryPointer.new(:char, 1024) do |buf| len = FormatMessage(flags, nil, err , 0x0409, buf, buf.size, nil) err_msg = function + ': ' + buf.read_string(len).strip end err_msg end def ole_error(function, err) regex = /OLE error code:(.*?)\sin/ match = regex.match(err.to_s) if match error = match.captures.first.hex win_error(function, error) else "#{function}: #{err.to_s}" end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
win32-taskscheduler-1.0.12 | lib/win32/windows/helper.rb |