编写变更方法
本文描述了 Change 设备方法的工作方式。 它还建议程序员编写自己的 Change 设备配置方法的准则。
语法
奇格开发 -我 姓名 [ -p 父级 ] [ -w 连接 ] [ -P | -T ] [ 一 阿特尔=值 [ 一 阿特尔=值 ... ] ... ]
描述
"更改" 方法将配置更改应用于设备。 如果设备处于 "已定义" 状态,那么这些更改仅记录在定制数据库中。 如果设备处于 "可用" 状态,那么 Change 方法还必须通过重新配置该设备来将更改应用于实际设备。
Change 方法不需要支持对 Change 方法描述的所有标志。 例如,如果您的设备是没有父设备的伪设备,那么它不需要支持父设备和连接更改。 对于具有父代的设备,可能需要不允许父代和连接更改。 对于打印机来说,这种更改是合乎逻辑的,因为它们很容易从一个端口移到另一个端口。 相反,通常在不首先关闭系统的情况下不会移动适配卡。 然后,在重新引导系统时,会在其新位置自动配置该系统。 因此,可能不需要使用 "更改" 方法来支持父代更改和连接更改。
在将更改应用于处于 "可用" 状态的设备时, "更改" 方法可以从驱动程序终止该设备,使用新信息重建设备从属结构 (DDS) ,并使用新 DDS 将该设备重新定义为该驱动程序。 该方法还可能需要重新装入适配器软件或执行其他特定于设备的操作。 另一种替代方法是调用设备的 Unconfigure 方法,更新 Customized 数据库,以及调用设备的 Configure 方法。
根据约定, Change 方法的名称的前三个字符应该是 奇格。 名称的其余部分 (开发) 可以是任何标识使用该方法的设备或设备组的字符 (受操作系统文件名限制的限制)。
标志
| 项 | 描述 |
|---|---|
| -l 名称 | 指出要更改的设备的逻辑名。 |
| -p 父级 | 标识设备的新父代的逻辑名。 此标志用于将设备从一个父代移动到另一个父代。 |
| -w 连接 | 标识该设备的新连接位置。 此标志标识设备的现有父设备上的新连接位置,或者如果还使用了 -p 标志,那么它将标识新父设备上的连接位置。 |
| -P | 指示要在定制数据库中记录这些更改,而不将这些更改应用于实际设备。 对于通常由系统保持打开的设备而言,这是一个有用的选项,因此无法更改。 稍后,使用此标志对数据库进行的更改将在系统重新引导时对设备进行配置时应用于该设备。 |
| -t | 指示这些更改将仅应用于实际设备,而不会记录在数据库中。 这是允许临时配置更改的有用选项,一旦系统重新引导,这些更改将不适用。 |
| 一 阿特尔=值 | 指定用于更改特定属性值的设备属性值对。 属性 = 值 参数包含一个或多个用于 一 标志的属性值对。 如果将 一 标志与多个属性值对配合使用,那么对列表必须用引号括起来,并在对之间加上空格。 例如,输入 一 属性 = 值 将列示一个属性值对,同时输入 一 "Attr1=Value1 Attr2=Value2" 将列示多个属性值对。 |
编写变更方法的准则
此任务列表旨在作为编写 "变更" 方法的准则。 针对特定设备进行写入时,可能会省略某些任务。 例如,如果设备不支持更改父代或连接,那么不需要包含那些任务。 设备可能具有未包括在这些任务中的特殊需求。
如果将 Change 方法编写为调用 Unconfigure 和 Configure 方法,那么它必须:
- 验证输入参数。 必须提供 -我 标志,以标识要更改的设备。 如果您的方法不支持指定的标志,请退出并返回错误。
- 初始化对象数据管理器 (ODM)。 使用 odm_initialize 子例程并使用 奥德莫洛克 子例程锁定配置数据库。 请参阅 "编写定义方法" 以获取示例。
- 通过获取其 "设备名" 描述符与 -l 标志提供的名称匹配的 CuDv 对象,检索要更改的设备的定制设备 (CuDv) 对象。 如果找不到具有指定名称的对象,请退出并返回错误。
- 验证正在更改的所有属性。 请确保这些属性适用于指定的设备,并且可以由用户设置这些属性,并且这些属性设置为有效值。 可以将 属性 子例程用于此目的。 如果某些属性具有互相依赖的值,请编写代码以交叉检查这些值。 如果找到无效属性,那么该方法需要将信息写入描述这些属性的标准错误。
- 确定是否存在新的父设备。 如果已指定新的父设备,请通过查询 CuDv 对象类以查找其 "设备名" 描述符与新的父名称匹配的对象来确定它是否存在。 如果找不到匹配项,那么该方法将退出并返回错误。
- 如果已指定新连接,请验证此设备是否可以连接到该处。 要执行此操作,请查询预定义连接 (PdCn) 对象类,以获取其唯一类型描述符与父代 CuDv 对象的预定义设备 (PdDv) 对象类描述符的链接相匹配的对象。 CuDv 对象的 "连接键" 描述符必须与要更改的设备的子类名匹配,而 CuDv 对象的 "连接位置" 描述符必须与新的连接值匹配。 如果找不到匹配项,那么该方法将退出并返回错误。
- 如果找到匹配项,那么新连接将有效。 如果设备处于 "可用" 状态,那么它应该在移动到新连接之后仍可用。 由于在特定连接上只能有一个设备可用,因此 Change 方法必须检查该连接上的其他可用设备。 如果找到该方法,那么该方法将退出并返回错误。
- 如果设备状态为 "可用" 并且未指定 -P 标志,请使用 odm_run_method 命令调用设备的 Unconfigure 方法。 如果设备具有 "可用" 子设备,那么此操作将失败,这也是更改方法不需要显式检查子设备的原因。
- 如果更改了任何属性设置,请更新数据库以反映新设置。 如果父设备或连接已更改,请更新设备的 CuDv 对象的 "父设备逻辑名" , "在父设备上连接的位置" 和 "位置码" 描述符。
- 如果在取消配置之前设备状态处于 "可用" 状态,请使用 odm_run_method 命令调用设备的 "配置" 方法。 如果此操作返回错误,并且设备未配置,那么 Change 方法应将定制数据库复原到其更改前状态。
- 关闭所有对象类并终止 ODM。 如果没有错误,那么退出并返回退出代码 0。
处理无效属性
如果 Change 方法检测到有错误的属性,那么它必须将信息写入 斯特德尔 文件以识别这些属性。 这包括编写后跟属性描述的属性名称。 每个行只写一个属性及其描述。 如果某个属性名称输入错误,导致它与任何设备的属性都不匹配,那么请自行编写在行上提供的属性名称。
姆杰夫 和 奇德夫 配置命令拦截通过 "更改" 方法写入标准错误文件的信息。 这些命令将在描述存在无效属性的错误消息后写出信息。 同时需要属性名称和属性描述来标识该属性。 通过直接调用 姆杰夫 或 奇德夫 命令,可以按名称来识别属性。 使用 SMIT 时,可以通过描述来识别这些属性。
属性描述是从相应的消息目录中获取的。 消息由目录名称,集合号和消息号进行标识。 将从设备的 PdDv 对象获取目录名称和集合编号。 从与该属性对应的预定义属性 (PdAt) 或定制属性 (CuAt) 对象中的 NLS 索引描述符获取消息号。