    # 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