module Puppet::Util::Windows::COM::Helpers

Public Instance Methods

QueryInstance(klass) { |instance| ... } click to toggle source
# File lib/puppet/util/windows/com.rb, line 92
def QueryInstance(klass)
  instance = nil

  FFI::MemoryPointer.new(:pointer) do |ppv|
    QueryInterface(klass::IID, ppv)

    instance = klass.new(ppv.read_pointer)
  end

  begin
    yield instance
    return self
  ensure
    instance.Release
  end if block_given?

  instance
end
UseInstance(klass, name, *args) { |instance = klass| ... } click to toggle source
# File lib/puppet/util/windows/com.rb, line 111
def UseInstance(klass, name, *args)
  instance = nil

  FFI::MemoryPointer.new(:pointer) do |ppv|
    send(name, *args, ppv)

    yield instance = klass.new(ppv.read_pointer)
  end

  self
ensure
  instance.Release if instance && ! instance.null?
end