# 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
        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

        # Extract the string
        begin
          return buffer.read_pointer.read_wstring(num_chars)
        ensure
          Chef::ReservedNames::Win32::Memory.local_free(buffer.read_pointer)
        end
      end