class Chef::ReservedNames::Win32::Error
Public Class Methods
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 buffer.read_pointer.read_wstring(num_chars) ensure Chef::ReservedNames::Win32::Memory.local_free(buffer.read_pointer) end end
Source
# File lib/chef/win32/error.rb, line 59 def self.get_last_error FFI::LastError.error end
Source
# 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
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