[笔记]深入解析Windows操作系统《四》管理机制

news2024/11/28 6:30:07

文章目录

  • 前言
  • 4.1注册表
    • 查看和修改注册表
    • 注册表用法
    • 注册表数据类型
    • 注册表逻辑结构
      • HKEY_CURRENT_USER
      • HKEY_USERS
    • 实验:观察轮廓加载和卸载
    • HKEY_CLASSES_ROOT
      • HKEY_LOCAL_MACHINE
    • 实验:离线方式或远程编辑BCD
      • HKEY_CURRENT_CONFIG
      • HKEY_PERFORMANCE_DATA


前言

本章讲述了Microsoft Windows操作系统中四种基本的机制,它们对于系统的管理和配置至关重要,它们是:

  • 注册表服务
  • 统一的背景进程管理器Windows管理设施
  • Windows诊断基础设施

4.1注册表

注册表在Windows系统的配置和控制方面扮演了一个非常关键的角色。它既是系统全局设置的存储仓库,也是每个用户的设置信息的存储仓库。虽然大多数人都把注册表想象成存储在磁盘上的静态数据,但是,在这一节中你将会看到,注册表也是Windows执行体和内核所维护的各种内存中数据结构的一个窗口。
我们首先从总体上介绍注册表的结构,并讨论一下它所支持的数据类型,简要地浏览一下Windows在注册表中维护的关键信息。然后,我们进一步讨论配置管理器( configurationmanager)的内部机理。这里的配置管理器是负责实现注册表数据库的执行体组件。我们将会涉及的话题有:注册表在磁盘上的内部结构、当一个应用程序请求配置信息时Windows如何获得相应的信息,以及Windows采用了哪些手段来保护这一关键的系统数据库。

查看和修改注册表

一般来说,你应该永远不需要直接编辑注册表:如果存储在注册表中的应用程序设置和系统设置需要手工修改,那么,它们应该有一个对应的用户界面来控制其修改。然而,正如你在本书中已经多次看到过的那样,有些高级设置和调试设置并没有相应的编辑用户界面。因此,Windows中包含了图形用户界面(GUI)和命令行工具,用于查看和修改注册表。

注册表用法

配置数据主要在四个时间点上被读取:

  • 在初始的引导过程中,引导加载器读入配置数据和引导设备驱动程序的列表,以便
    在初始化内核以前将它们加载到内存中。因为BCD(引导配置数据库,BootConfiguration Database)实际上存放在注册表储巢中,有人可能会争辩说,对注册表的访问发生在更早的时候(当引导管理器显示操作系统列表的时候)。
  • 在内核引导过程中,内核读取有关的设置信息,这些设置信息指定了应该加载哪些设备驱动程序,以及各个系统部件(比如内存管理器和进程管理器(process manager))该如何配置以及该如何调整系统的行为。
  • 在登录过程中,Explorer和其他的Windows组件从注册表中读取到每个用户的参数选择,包括网络驱动器字母映射、桌面墙纸、屏幕保护程序、菜单行为和图标的摆放,以及可能更重要的是,哪些启动程序需要激发起来,以及哪些文件最近被访问过。
  • 在应用程序启动过程中,它们读取系统全局范围的设置,比如所有可选安装的组件列表和许可数据,还读取一些针对每个用户的设置信息,可能包括菜单和工具栏的摆放,以及最近访问过的文档的列表。

然而,在其他时间点上也可以读取注册表,比如在响应注册表值或键的修改的时候。注册表提供了异步回调机制,这是优先采用的接收注册表变化通知的方法,尽管如此,仍然有些应用程序会通过不停查询的做法,来监视它们存放在注册表中的设置信息,以便自动地让更新过的设置信息起作用。然而,一般来说,在一个空闲的系统上,注册表不应该有任何活动,显然这样的应用程序违反了注册表的最佳实践原则。(Sysinternals的Process Monitor是一个追查这种活动和错误应用程序的极佳工具。)

在下面的情形下,注册表通常会被修改:

  • 虽然算不上是修改,但是,注册表的初始结构和许多默认设置是由一个原型版本的
    注册表来定义的,此原型版本随Windows的安装介质一起发行,在安装的时候被拷贝到一个新的系统中。
  • 应用安装工具创建了默认的应用程序设置,以及一些可反映出安装配置选项的设置信息。
  • 在设备驱动程序的安装过程中,即插即用系统在注册表中创建了一些设置,告诉I/O
    管理器如何启动此驱动程序;还创建了其他一些用于配置该驱动程序如何操作的设置(有关设备驱动程序如何被安装到系统中的更多信息,参见本书下册第8章“I/O系统”)。
  • 当你通过用户界面改变了应用程序或者系统设置时,这些改变通常被保存在注册表
    中。

注册表数据类型

注册表是一个数据库,其结构类似于磁盘卷的结构。注册表包含了键(key)和值( value)。键类似于磁盘的目录,而值则好比是磁盘上的文件。键是一个容器,可以包含其他的键(子键)或值。而值存储的是数据。最顶级的键是根键(root key)。在本节中,我们将相互交换着使用子键和键这两个词。

键和值两者都借用了文件系统的命名规范。因此,可以用名称“trade\mark”唯一标识一个存储在名为“trade”的键下面的、名为“mark”的值。此命名方案的一个例外是,每个键都有一个未命名的值。Regedit将未命名的值显示为“(默认)”。
注册表的值存储了不同种类的数据,它们可以是表4.1中所列出的12种类型之一。大多数注册表值是REG_DWORD、REG_BINARY或REG_Sz。REG_DWORD类型的值可以存储整数或者布尔值(开/关值);REG_BINARY值可以存储超过32位的整数值,或者诸如加密后的口令之类的原始数据;REG_Sz值存储字符串(当然是Unicode),可以表达诸如名称、文件名、路径和类型等元素。

REG_LINK类型特别值得注意,因为它让一个键可以透明地指向另一个键。当你搜索注册表而碰到一个链接时,路经搜索过程会在此链接的目标处继续进行。例如,如果\Root1\Link是一个指向\Root2\RegKey的REG_LINK值,并且RegKey包含了值RegValue,那么,可以有两条路径标识RegValue:\Root1\Link\RegValue和\Root2(RegKey\RegValue。正如下一小节将要解释的那样,Windows自己也显式地使用了注册表链接:六个注册表根键中有三个其实是链接,它们指向另三个非链接的根键中的子键。
在这里插入图片描述

注册表逻辑结构

利用注册表中存储的数据,你可以画出注册表的组织结构。总共有6个根键(你不能加入新的根键,也不能删除已有的根键)可以存储信息,如表4.2所示。
在这里插入图片描述
为什么根键的名称都以“H”开头?因为根键的名称代表了指向键(KEY)的Windows句柄(H)。正如第1章“”中所提及的那样,HKLM是用于HKEY_LOCAL_MACHINE的缩写。表4.3列出了所有的根键以及它们的缩写。下面的几小节详细地解释了这六个根键中每一个根键的内容和用途。
在这里插入图片描述

HKEY_CURRENT_USER

HKCU根键包含了与当前本地登录用户的参数和软件配置有关的数据。它指向当前登录用户的用户轮廓,位于硬盘上的\Users<用户名>\Ntuser.dat中(要想知道根键是如何被映射到硬盘文件的,请参见本章后面的“注册表的内部机理”一节)。无论何时当一个用户的轮廓信息被加载的时候(比如在登录时候,或者当一个服务进程运行在某个特定用户名的环境中时),HKCU就会被创建出来,映射到HKEY_USERS下该用户的键上。表4.4列出了HKCU下面的一些子键。

在这里插入图片描述在这里插入图片描述

HKEY_USERS

HKU为系统中每个加载的用户轮廓和用户类注册数据库包含了一个子键。它也包含一个名为HKU.DEFAULT的子键;这是一个链接,指向该系统的轮廓(对于那些运行在本地系统账户下的进程,它们会用到该轮廓信息;本章后面的“服务”一节中更加详细地讲述了有关该轮廓的信息)。譬如,这是Winlogon使用的轮廓,所以,改变了该轮廓中的桌面背景设置,就可以在登录屏幕上体现出来。当一个用户第一次登录到一个系统中,并且她的账户不依赖于一个漫游域轮廓(也就是说,用户的轮廓是在域控制器的指示下,从一个中心网络位置上获得的)的时候,系统以%SystemDrive%\Users\Default下存放的轮廓为基础,为她的账户创建一个轮廓。
系统将这些轮廓存储在哪里呢?此位置是由注册表值HKLM\Software\Microsoft\WindowsNT\CurrentVersion\ProfileList\ProfilesDirectory来定义的,其默认设置是%SystemDrive%\Users。ProfileList键也存放了一个系统上所有出现过的轮廓的列表。针对每个轮廓的信息存放在一个对应的子键下面,其名称反映了该轮廓所对应账户的安全标识符(SID,Security ldentifier)(有关SID的更多信息,参见第6章“安全性”)。在每个轮廓的键所存储的数据中,sid值中存放的是该账户SID的二进制表示,而在ProfilelmagePath目录中存放的则是该轮廓所对应的储巢( hive,参见本章后面的“储巢”一节中的介绍)的硬盘路径。Windows在用户轮廓管理对话框中显示了一个系统中存储的轮廓列表,如图4.1所示。你只需在控制面板的System小程序的AdvancedSystem Settings中的Advanced标签视图的User Profiles部分单击Setting,就可以看到该对话框。

在这里插入图片描述

实验:观察轮廓加载和卸载

通过Runas命令,用一个当前并未登录到机器上的账户来激发一个进程,就可以看到一个轮廓先被加载到注册表中,然后又被卸载出去的过程。当新进程正在运行的时候,运行Regedit,你可在HKEY_USERS下注意到加载进来的轮廓键。在终止了此进程以后,在Regedit中按一下FS键以便刷新视图,此轮廓应该已经不在了。

HKEY_CLASSES_ROOT

HKCR包含了三种类型的信息:文件扩展名关联、COM类注册信息,以及UAC(User AccountControl)虚拟化注册表根。(关于UAC的更多信息,请参见第6章。)针对每个已注册的文件扩展名,都有一个对应的键。大多数键中包含一个REG_Sz值,指向HKCR中的另一个键,此键中包含了与该扩展名所代表的文件类相关联的信息。
例如,HKCR.xls指向了在另一个键(比如HKCU.xls\Excel.Sheet.8)中包含的有关MicrosoftExcel文件的信息。HKCR中其他的键包含了已注册到当前系统上的COM对象的详细配置信息。UAC虚拟化注册表位于VirtualStore键下,它与HKCR中保存的其他种类的数据没有关系。

HKEY_CLASSES_ROOT下的数据有以下两个来源途径:

  • 针对每个用户的类注册数据:位于HKCU\SOFTWARE\Classes下(被映射至磁盘文件
    \Users<username>\AppData\Local\Microsoft\Windows\Usrclass.dat)。
  • 整个系统范围的类注册数据:位于HKLM\SOFTWARE\Classes下。

针对每个用户的注册数据为什么要与系统全局范围的注册数据分开呢,其原因在于,这样做以后,可漫游的轮廓就能够包含这些定制的用户数据。它同时也关闭了一个安全漏洞:非特权用户无法改变或者删除系统全局版本HKEY_CLAsSES_ROOT中的键,因此也就无法影响到系统中应用程序的操作。非特权用户和应用程序可以读取系统全局范围的数据,也可以在系统全局数据中增加新的键和值(在它们的用户数据中这些键和值也被镜像过来了),但是它们只能修改其私有数据中已有的键和值。

HKEY_LOCAL_MACHINE

根键HKLM包含了所有系统全局范围的配置子键:BCDO0000000、COMPONENTS(根据需要动态加载)、HARDWARE、SAM、SECURITY、SOFTWARE和SYSTEM。

HKLM\BCDO0000000子键包含了引导配置数据库(BCD)信息,这是作为一个注册表储巢被加载进来的。该数据库代替了以前在Windows Vista以前使用的Boot.ini文件,为每次安装Windows的引导配置数据增加了极大的灵活性和隔离性。(有关BCD的更多信息,请参考本书下册第13章“启动和停机”。)

在BCD中的每一项,比如一次安装的Windows,或者针对这一次安装的命令行设置,都保存在Objects子键下,它或者是一个可通过GUID来引用的对象(针对引导项的情形),或者是一个称为元素(element)的数值子键。这些原始元素,绝大多数在MSDN Library的BCD参考材料部分有文档描述,它们定义了各种命令行设置或者引导参数。与每个元素子键相关联的值对应于相应的命令行标记或者引导参数的值。

BCDEdit命令行工具使得你可以通过元素和对象的符号名称来修改BCD。它也提供了关于所有可用的引导选项的大量帮助信息;不幸的是,它只能工作在本地系统环境中。因为注册表可以被远程打开,也可以从储巢文件中导入进来,所以,你可以利用注册表编辑器来修改或读取一台远程计算机的BCD。下面的实验显示了你可以利用注册表编辑器来打开内核调试功能。

实验:离线方式或远程编辑BCD


子键HKLM\COMPONENTS包含的信息与CBS(Component Based Servicing,基于组件的服务)栈有关。此CBSs栈包含了各种文件和资源,它们是Windows安装映像(用于自动化的安装包或者OEM预安装包)的一部分,或者是一次活动的Windows安装的一部分。为了服务目的而定义的CBS AP利用此注册表键中的信息来标识出已安装的组件和它们的配置信息。无论何时当单独地或者成组地安装、更新或者移除组件(分别称为单元unit或包package)时,这些信息都会被用到。因为该键可能会非常大,所以,为了优化系统资源,如果CBs栈在服务一个请求时,它只是被动态地加载到系统中,然后根据需要被卸载。

子键HKLM\HARDWARE维护了有关当前系统中的遗留硬件,以及一些从硬件设备至驱动程序的映射关系的描述信息。在现代系统上,只有一些外设,比如键盘、鼠标和ACPIBIOS数据,有可能在这里能找得到。设备管理器工具(从控制面板中运行System小程序,然后单击DeviceManager〉使你可以查看注册表硬件信息,这些信息只是简单地从HARDWARE键中读取出来的值(尽管它主要使用了HKLM\SYSTEM\CurrentControlSet\Enum树)。

HKLM\SAM存放了本地账户和组的信息,比如用户口令、组定义和域关联信息。作为域控制器运行的Windows Server系统将域账户和组的信息存放在活动目录(Active Directory)中。所谓活动目录,是一个用于存放域范围的各种设置和信息的数据库(本书并没有介绍活动目录)。在默认情况下,SAM键上的安全描述符被配置成:即使管理员账户也不能访问。
HKLM\SECURITY存放了系统全局范围的安全策略和用户权限分配。HKLM\SAM被链接到HKLM\SECURITY\SAM下的SECURITY子键。在默认情况下,你不能查看HKLM\SECURITY或者HKLM\SAM\SAM键的内容,因为这些键的安全设置只允许System账户才能访问(本章后面将会极其详细地讨论System账户)。如果你想要检查这些键的话,你可以改变此安全描述符,以便允许管理员组中的用户可以读访问这些键,或者,你可以利用PsExec,在本地系统账户中运行Regedit。然而,仅仅看一眼这些数据是不会有多大用处的,因为这些数据是没有文档说明的,其中的口令已经通过一个单向映射关系加了密,也就是说,你是无法从加密形式得到一个口令的。

HKLM\SOFTWARE是Windows存储系统全局配置信息的地方,这些配置信息在系统引导的时候并不需要。而且,第三方应用程序也将它们的系统全局范围的设置存放在这里,比如应用程序文件和目录的路径、授权许可信息和过期日期信息。
HKLM\SYSTEM包含了引导系统所需要的全局配置信息,比如该加载哪些设备驱动程序、该启动哪些服务。因为这些信息对于启动系统是至关重要的,所以,Windows也在该键下维护了这份信息的一份拷贝,称为“last known good control set(最后已知的好控制集)”。由于维护了这样一份拷贝,因此,万一对当前控制集做了修改以后,系统无法正常引导了,管理员可以选择以前的一份正常工作的控制集。关于Windows何时声明当前控制集是“好”的,更详细的信息请参见本章“接受当前引导和最后已知的好控制集”一节。

HKEY_CURRENT_CONFIG

HKEY_CURRENT_CONFIG只是一个链接,指向HKLM\SYSTEM\CurrentControlSet\ HardwareProfiles\Current下的当前硬件轮廓。Windows不再支持硬件轮廓,但是该键仍然存在,以便支持那些遗留下来的、可能依赖于该键的应用程序。

HKEY_PERFORMANCE_DATA

在Windows上,注册表也是访问性能计数器值的机制,无论这些计数器是从操作系统组件中来的,还是从服务器应用程序中来的。通过注册表来访问性能计数器,一个额外的好处是,远程性能监视工作几乎可以“免费”完成,因为注册表很容易通过常规的注册表API就可以访问到。
只需打开一个名为HKEY_PERFORMANCE_DATA的特殊的键,并且查询该键下面的值,就可以直接访问注册表性能计数器信息。如果在注册表编辑器中查寻此键,是无法找到的;这个键只能通过编程的方式,利用Windows注册表函数,例如RegQueryValueEx,才可以访问到。性能信息实际上并没有存储在注册表中,注册表函数利用该键来获得从性能数据提供者那里提供的信息。
也可以利用性能数据帮助器(PDH,Performance Data Helper)API(Pdh.dIl)中的性能数据帮助器函数来访问性能计数器信息。图4.2显示了在访问性能计数器信息过程中涉及的组件。

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/524498.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

day3_垃圾回收器

文章目录 Serial回收器ParNew回收器Parallel Scavenge回收器Serial Old回收器Parallel Old回收器CMS&#xff08;Concurrent Mark Sweeping)回收器G1 主要有7种垃圾回收器&#xff0c;如下所示&#xff1a; 其中有直线关联的表示&#xff0c;这2种垃圾回收器可以配合使用的。 S…

大模型之PaLM2简介

1 缘起 大模型时代。 时刻关注大模型相关的研究与进展&#xff0c; 以及科技巨头的商业化大模型产品。 作为产品&技术普及类文章&#xff0c;本文将围绕PaLM2是什么、特点、如何使用展开。 想要了解更多信息的可以移步官方网站提供的参考文档&#xff0c;后文会给出相关链…

Oracle11g服务说明

一、服务说明 1.OracleDBConsoleorcl&#xff1a;非必须启动 Oracle数据库控制台服务&#xff0c;orcl是Oracle的实例标识&#xff0c;默认的实例为orcl。在运行Enterprise Manager&#xff08;企业管理器OEM&#xff09;的时候&#xff0c;需要启动这个服务。 2.OracleJobS…

一文了解异步编程

promise 什么是promise promise是异步编程的一种解决方案&#xff0c;从语法上来说&#xff0c;Promise是一个对象&#xff0c;从它可以获取异步操作的消息 ES6规定&#xff0c;Promise对象是一个构造函数&#xff0c;接受一个函数作为参数&#xff0c;这个函数会立即执行&a…

Long类型返回前端精度丢失

【1】给前端返回Long会出现精度丢失问题 在《阿里巴巴Java开发手册》中&#xff0c;有一条关于前后端超大整数返回的规约&#xff0c;具体内容如下&#xff1a; 【2】问题复现 后端直接用postman测试接口&#xff0c;返回数据没有问题。但是前端访问接口的时候&#xff0c;发…

系统化了解Micrometer

本文从官方文档整理出一篇系统化全面了解的文章, 后续可能会慢慢补上源码层面的解析: https://micrometer.io/docs 学习本文的目的在于深入了解中间件的监控模块的设计, 先看看主流的做法于核心思想 本文的引用来的笔者的理解于备注 需要做的是: 先理解功能存在的理由设计模式…

kibana 代码执行 (CVE-2019-7609)

漏洞原理 “原型污染”是一种针对JS语言开发的攻击方法。JS语言中&#xff0c;每一个对象都是有其原型&#xff08;proto&#xff09;的&#xff0c;而该原型又有其自己的原型对象&#xff0c;直到某个对象的原型为null。而如果JS对其中定义的对象原型的属性读写缺乏控制&…

进程程序替换+简易版shell实现

索引 进程程序替换如何进行程序替换不同程序替换函数之间的区别系统接口调用其他语言的函数替换函数execle 简易版shell实现 进程程序替换 什么是进程程序替换&#xff1f; 指在一个正在运行的进程中&#xff0c;将原来的程序替换成新的程序的过程。 eg&#xff1a;如果我们想…

I IntelliJ IDEA 2023.1 最新解锁方式,支持java20,让Coding飞一会儿

IntelliJ IDEA 2023.1 最新变化 在 IntelliJ IDEA 2023.1 中&#xff0c;我们根据用户的宝贵反馈对新 UI 做出了大量改进。 我们还实现了性能增强&#xff0c;从而更快导入 Maven&#xff0c;以及在打开项目时更早提供 IDE 功能。 新版本通过后台提交检查提供了简化的提交流程…

Android不基于第三发依赖包解析shp文件(2)

接着上篇文章继续 2)Point (点)   一个 Point 由一对双精度坐标组成,存储顺序为 X,Y。    /*** PointGeometry记录读取* */static Geometry renderPointGeometry(byte[] recordContent,GeometryFactory geometryFactory) {int shapetype2

N轴机械臂的MDH正向建模,及python算法

目录 一、前言二、三维空间的坐标系变换三、MDH建模要点四、MDH的变换矩阵推导五、机械臂MDH的python模型六、python源码 一、前言 如果机器人工程师缺乏机器人学理论的支撑和足够的认识&#xff0c;那么随着机器人项目的深入推进&#xff0c;可能会越走越艰难&#xff0c;所谓…

【Lambda】集合的Lambda表达式

【Lambda】集合的Lambda表达式 【一】Stream的方法介绍【1】Stream里常用的方法【2】collect(toList()) & filter【3】map【4】flatMap【5】max&min【6】reduce 【二】常用案例总结【1】准备方法查询数据库获取List结果【2】取值【3】分组【4】去重【5】排序【6】list的…

uniapp制作水印相机给图片添加水印并且保存图片至本地

uniapp保存文件的三种方式 文件主要分为两大类&#xff1a; 1.代码包文件&#xff1a;代码包文件指的是在项目目录中添加的文件。 2.本地文件&#xff1a;通过调用接口本地产生&#xff0c;或通过网络下载下来&#xff0c;存储到本地的文件。 其中本地文件又分为三种&#…

【K8s】Service详解

文章目录 一、Service介绍1、认识Service2、kube-proxy的三种工作模式3、Service的类型 二、Service的使用1、实验数据准备2、Service类型为ClusterIP补充&#xff1a;Endpoints补充&#xff1a;负载分发策略 3、Service类型为HeadLiness3、Service类型为NodePort4、Service的类…

Ovito渲染技巧之体系边界识别

关注 M r . m a t e r i a l , \color{Violet} \rm Mr.material\ , Mr.material , 更 \color{red}{更} 更 多 \color{blue}{多} 多 精 \color{orange}{精} 精 彩 \color{green}{彩} 彩&#xff01; 主要专栏内容包括&#xff1a; †《LAMMPS小技巧》&#xff1a; ‾ \textbf…

性能、性能还是性能---下一代Android性能框架分析

性能优化的重要性和难度毋庸置疑&#xff0c;事实上&#xff0c;性能优化也是一个永无止境的游戏&#xff0c;总会发现有一些东西需要优化。但是不可避免的是&#xff0c;这也是一个边际效益递减的事情&#xff0c;项目或应用获得的收益在一定程度上也会逐渐降低。What’s new …

ReentrantLock 原理

目录 ReentrantLock 概述 ReentrantLock 的原理 什么是 AQS ? 获取锁资源(以⾮公平锁为例) tryAcquire addWaiter acquireQueued 释放锁资源 ⾮公平锁体现在哪⾥&#xff1f; 调试代码 总结 ReentrantLock 概述 ReentrantLock是Lock接⼝的默认实现&#xff0c;是⼀…

【Linux】-关于Linux的指令(下)

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树 ❤️‍&#x1fa79;作者宣言&#xff1a;认真写好每一篇博客 &#x1f4a8;作者gitee:gitee &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 文章目录 前言一、时间相关的指令二、cal指令三、find -name指…

Centos7 经典模式安装GBase 8s 图文教程

Centos7安装GBase 8s 图文教程 前言1.1 硬件要求1.2 系统要求1.3 虚拟 PC 软件1.4 安装及配置数据库服务器1.4.1 创建 gbasedbt 组和用户1.4.2 创建 GBase 8s 数据库安装目录1.4.3 上传并解压安装包1.4.4 执行安装 参考文献 前言 本篇博文分享如何在Centos7 x86架构的系统中安…

第2章-Selenium-API操作

目标&#xff1a; 1. 熟练应用八种元素定位方式 2. 掌握对元素和浏览器的操作方法 3. 掌握键盘鼠标的操作 4. 掌握元素等待的操作 5. 掌握下拉选择框、 警告框和滚动条的操作 6. 掌握如何切换frame框架和多窗口 7. 掌握如何实现窗口截图 1.元素定位 1. 掌握id、 name、 cla…