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_admin = Facter::Util::Windows::FFI.read_win32_bool(ismember_pointer)
end
end
is_admin
end