Method: Chef::ReservedNames::Win32::Security.logon_user

Defined in:
lib/chef/win32/security.rb

.logon_user(username, domain, password, logon_type, logon_provider) ⇒ Object



724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
# File 'lib/chef/win32/security.rb', line 724

def self.logon_user(username, domain, password, logon_type, logon_provider)
  username = wstring(username)
  domain = wstring(domain)
  password = wstring(password)

  token = FFI::Buffer.new(:pointer)
  unless LogonUserW(username, domain, password, logon_type, logon_provider, token)
    Chef::ReservedNames::Win32::Error.raise!
  end

  # originally this was .read_pointer, but that is interpreted as a non-primitive
  # class (FFI::Pointer) and causes an ArgumentError (Invalid Memory Object) when
  # compared to GetCurrentProcess(), which returns a HANDLE (void *). Since a
  # HANDLE is not a pointer to allocated memory that Ruby C extensions can understand,
  # the Invalid Memory Object error is raised.
  Token.new(Handle.new(token.read_ulong))
end