module Facter::Util::Windows::User
Constants
- SECURITY_MAX_SID_SIZE
msdn.microsoft.com/en-us/library/windows/desktop/ee207397(v=vs.85).aspx
- WELL_KNOWN_SID_TYPE
msdn.microsoft.com/en-us/library/windows/desktop/aa379650(v=vs.85).aspx
Public Class Methods
admin?()
click to toggle source
# File lib/facter/util/windows/user.rb, line 7 def admin? elevated_supported = Facter::Util::Windows::Process.supports_elevated_security? # if Vista or later, check for unrestricted process token return Facter::Util::Windows::Process.elevated_security? if elevated_supported # otherwise 2003 or less check_token_membership end
check_token_membership()
click to toggle source
# File lib/facter/util/windows/user.rb, line 22 def check_token_membership is_admin = false FFI::MemoryPointer.new(:byte, SECURITY_MAX_SID_SIZE) do |sid_pointer| FFI::MemoryPointer.new(:dword, 1) do |size_pointer| size_pointer.write_uint32(SECURITY_MAX_SID_SIZE) if CreateWellKnownSid(:WinBuiltinAdministratorsSid, FFI::Pointer::NULL, sid_pointer, size_pointer) == Facter::Util::Windows::FFI::WIN32_FALSE raise Facter::Util::Windows::Error.new("Failed to create administrators SID") end end if IsValidSid(sid_pointer) == Facter::Util::Windows::FFI::WIN32_FALSE raise RuntimeError,"Invalid SID" end FFI::MemoryPointer.new(:win32_bool, 1) do |ismember_pointer| if CheckTokenMembership(Facter::Util::Windows::FFI::NULL_HANDLE, sid_pointer, ismember_pointer) == Facter::Util::Windows::FFI::WIN32_FALSE raise Facter::Util::Windows::Error.new("Failed to check membership") end # Is administrators SID enabled in calling thread's access token? is_admin = Facter::Util::Windows::FFI.read_win32_bool(ismember_pointer) end end is_admin end
Private Instance Methods
admin?()
click to toggle source
# File lib/facter/util/windows/user.rb, line 7 def admin? elevated_supported = Facter::Util::Windows::Process.supports_elevated_security? # if Vista or later, check for unrestricted process token return Facter::Util::Windows::Process.elevated_security? if elevated_supported # otherwise 2003 or less check_token_membership end
check_token_membership()
click to toggle source
# File lib/facter/util/windows/user.rb, line 22 def check_token_membership is_admin = false FFI::MemoryPointer.new(:byte, SECURITY_MAX_SID_SIZE) do |sid_pointer| FFI::MemoryPointer.new(:dword, 1) do |size_pointer| size_pointer.write_uint32(SECURITY_MAX_SID_SIZE) if CreateWellKnownSid(:WinBuiltinAdministratorsSid, FFI::Pointer::NULL, sid_pointer, size_pointer) == Facter::Util::Windows::FFI::WIN32_FALSE raise Facter::Util::Windows::Error.new("Failed to create administrators SID") end end if IsValidSid(sid_pointer) == Facter::Util::Windows::FFI::WIN32_FALSE raise RuntimeError,"Invalid SID" end FFI::MemoryPointer.new(:win32_bool, 1) do |ismember_pointer| if CheckTokenMembership(Facter::Util::Windows::FFI::NULL_HANDLE, sid_pointer, ismember_pointer) == Facter::Util::Windows::FFI::WIN32_FALSE raise Facter::Util::Windows::Error.new("Failed to check membership") end # Is administrators SID enabled in calling thread's access token? is_admin = Facter::Util::Windows::FFI.read_win32_bool(ismember_pointer) end end is_admin end