class Chef::ReservedNames::Win32::Error
Public Class Methods
format_message(message_id = 0, args = {})
click to toggle source
# File lib/chef/win32/error.rb, line 30 def self.format_message(message_id = 0, args = {}) flags = args[:flags] || FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ARGUMENT_ARRAY flags |= FORMAT_MESSAGE_ALLOCATE_BUFFER source = args[:source] || 0 language_id = args[:language_id] || 0 varargs = args[:varargs] || [:int, 0] buffer = FFI::MemoryPointer.new :pointer num_chars = FormatMessageW(flags, source, message_id, language_id, buffer, 0, *varargs) if num_chars == 0 source = LoadLibraryExW("netmsg.dll".to_wstring, 0, LOAD_LIBRARY_AS_DATAFILE) begin num_chars = FormatMessageW(flags | FORMAT_MESSAGE_FROM_HMODULE, source, message_id, language_id, buffer, 0, *varargs) ensure FreeLibrary(source) end end if num_chars == 0 raise! end # Extract the string begin return buffer.read_pointer.read_wstring(num_chars) ensure Chef::ReservedNames::Win32::Memory.local_free(buffer.read_pointer) end end
get_last_error()
click to toggle source
# File lib/chef/win32/error.rb, line 59 def self.get_last_error FFI::LastError.error end
raise!(message = nil, code = get_last_error)
click to toggle source
Raises the last error. This should only be called by Win32 API wrapper functions, and then only when wrapped in an if() statement (since it unconditionally exits)
Returns¶ ↑
- nil:
-
always returns nil when it does not raise
Raises¶ ↑
- Chef::Exceptions::Win32APIError:
# File lib/chef/win32/error.rb, line 70 def self.raise!(message = nil, code = get_last_error) msg = format_message(code).strip if code == ERROR_USER_NOT_FOUND raise Chef::Exceptions::UserIDNotFound, msg else formatted_message = "" formatted_message << message if message formatted_message << "---- Begin Win32 API output ----\n" formatted_message << "System Error Code: #{code}\n" formatted_message << "System Error Message: #{msg}\n" formatted_message << "---- End Win32 API output ----\n" raise Chef::Exceptions::Win32APIError, msg + "\n" + formatted_message end end