def self.format_message(message_id = 0, args = {})
flags = args[:flags] || FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_ARGUMENT_ARRAY
source = args[:source]
language_id = args[:language_id] || 0
varargs = args[:varargs] || [:int, 0]
buffer = FFI::MemoryPointer.new :pointer
num_chars = FormatMessageW(flags | FORMAT_MESSAGE_ALLOCATE_BUFFER, source, message_id, language_id, buffer, 0, *varargs)
if num_chars == 0
raise!
end
begin
return buffer.read_pointer.read_wstring(num_chars)
ensure
Chef::ReservedNames::Win32::Memory.local_free(buffer.read_pointer)
end
end