# 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