分配

动词 ALLOCATE 由调用事务程序(TP) 发出。 它分配本地逻辑单元(LU)与伙伴 LU 之间的会话,并且(与 RECEIVE_ALLOCATE结合使用)在调用的 TP 和调用的 TP 之间建立会话。 成功执行此谓词后,APPC 将生成会话标识符(conv_id)。 conv_id是所有其他 APPC 对话谓词的必需参数。

以下结构描述了 ALLOCATE 谓词使用的谓词控制块。

语法

  
struct allocate {  
    unsigned short   opcode;  
    unsigned char    opext;  
    unsigned char    reserv2;  
    unsigned short   primary_rc;  
    unsigned long    secondary_rc;  
    unsigned char    tp_id[8];  
    unsigned long    conv_id;  
    unsigned char    conv_type;  
    unsigned char    synclevel;  
    unsigned char    reserv3[2];  
    unsigned char    rtn_ctl;  
    unsigned char    reserv4;  
    unsigned long    conv_group_id;  
    unsigned long    sense_data;  
    unsigned char    plu_alias[8];  
    unsigned char    mode_name[8];  
    unsigned char    tp_name[64];  
    unsigned char    security;  
    unsigned char    reserv5[11];  
    unsigned char    pwd[10];  
    unsigned char    user_id[10];  
    unsigned short   pip_dlen;  
    unsigned char FAR * pip_dptr;  
    unsigned char    reserv7;  
    unsigned char    fqplu_name[17];  
    unsigned char    reserv8[8];  
    unsigned long    proxy_user;  
    unsigned long    proxy_domain;  
    unsigned char    reserv9[16];  
};   

成员

opcode
提供的参数。 指定动词操作代码,AP_B_ALLOCATE。

opext
提供的参数。 指定谓词作扩展,AP_BASIC_CONVERSATION。 如果设置了AP_EXTD_VCB位,则表示使用了谓词控制块的扩展版本。 在这种情况下, ALLOCATE 结构包括同步点支持或特权代理功能支持。

reserv2
保留字段。

primary_rc
返回的参数。 指定 APPC 在谓词完成时设置的主要返回代码。 有效的返回代码因发布的 APPC 谓词而异。 有关此谓词的有效错误代码,请参阅返回代码。

secondary_rc
返回的参数。 指定 APPC 在谓词完成时设置的辅助返回代码。 有效的返回代码因发布的 APPC 谓词而异。 有关此谓词的有效错误代码,请参阅返回代码。

tp_id
提供的参数。 标识本地 TP。 此参数的值由 TP_STARTED返回。

conv_id
返回的参数。 标识在两个 TP 之间建立的对话。

conv_type
提供的参数。 仅被 ALLOCATE 用于指定要分配的对话类型,其值是 AP_BASIC_CONVERSATION 或 AP_MAPPED_CONVERSATION。

如果 ALLOCATE 建立映射会话,则本地 TP 必须发出基本对话谓词并提供自己的映射层,以便将数据记录转换为逻辑记录,并将逻辑记录转换为数据记录。 合作伙伴 TP 可以发出基本对话谓词并提供映射层,也可以使用映射对话谓词(如果合作伙伴 TP 正在使用支持映射对话谓词的 APPC 实现)。 有关详细信息,请参阅 IBM SNA 手册(s)。

synclevel
提供的参数。 指定会话的同步级别。 它确定 TP 是否可以请求确认接收数据并确认接收数据。

  • AP_NONE指定不会在此会话中使用确认处理。

  • AP_CONFIRM_SYNC_LEVEL指定 TP 可以在此会话中使用确认处理。

  • AP_SYNCPT指定 TP 可以在此会话中使用同步点级别 2 确认处理。

    reserv3
    保留字段。

    rtn_ctl
    提供的参数。 指定本地 LU 何时根据来自本地 TP 的会话请求执行作,应将控制权返回到本地 TP。 有关会话的信息,请参阅 “关于事务程序”。

  • AP_IMMEDIATE指定 LU 分配争用胜者会话(如果立即可用),并将控制权返回到 TP。

  • AP_WHEN_SESSION_ALLOCATED指定 LU 在分配会话或遇到本主题的返回代码中记录的错误之一之前,LU 不会将控制权返回到 TP。 (如果会话限制为零,LU 将立即返回控件。如果会话不可用,TP 将等待一个会话。

  • AP_WHEN_SESSION_FREE指定 LU 分配争用胜者或争用失败者会话(如果可用或能够激活会话),并将控制权返回到 TP。 如果发生错误(如本主题中的返回代码中所述),调用将立即返回, 并在primary_rcsecondary_rc 字段中返回错误。

  • AP_WHEN_CONWINNER_ALLOCATED指定 LU 在分配争用胜者会话或遇到本主题的返回代码中记录的错误之一之前,LU 不会返回控件。 (如果会话限制为零,LU 将立即返回控件。如果会话不可用,TP 将等待一个会话。

  • AP_WHEN_CONV_GROUP_ALLOCATED指定LU在分配conv_group_id指定的会话之前或遇到本主题记录的返回代码中提到的错误之一时,不会将控制权返回给TP。 如果会话不可用,TP 将等待它变为免费状态。

注释

AP_IMMEDIATE是从未导致新会话启动 的rtn_ctl 的唯一值。 对于除AP_IMMEDIATE以外的值,如果适当的会话未立即可用,Host Integration Server会尝试启动一个符合要求的会话。 这会导致按需连接被激活。

reserv4
保留字段。

conv_group_id
提供/返回的参数。 指定应从中分配会话的会话组的标识符。 仅当rtn_ctl设置为WHEN_CONV_GROUP_ALLOC时,才需要conv_group_id当rtn_ctl指定其他值并且primary_rc AP_OK时,这是返回的值。

sense_data
返回的参数。 指示分配错误(重试或无重试),并包含感知数据。

plu_alias
提供的参数。 指定本地 TP 已知合作伙伴 LU 的别名。

plu_alias必须与在配置过程中建立的合作伙伴 LU 的名称匹配。

该参数是一个 8 字节 ASCII 字符串。 它可以包含以下 ASCII 字符:

  • 大写字母

  • 数字 0 到 9

  • 空格

  • 特殊字符 $、#、%和@

    此字符串的第一个字符不能是空格。

    如果此参数的值小于 8 个字节,请用 ASCII 空格(0x20)将其放在右侧。

    如果要使用 fqplu_name 参数指定合作伙伴 LU,请使用二进制零填充此参数。

    对于使用 TP、5250 仿真器和/或 APPC 应用程序的用户或组,系统管理员可以分配默认的本地和远程 LU。 在这种情况下,字段留空或为 null,当用户或组成员启动 APPC 程序时,将访问默认 LU。 有关默认 LU 的详细信息,请参阅Microsoft Host Integration Server 帮助。

    mode_name
    提供的参数。 指定配置期间定义的一组网络特征的名称。

    mode_name的值必须与配置过程中与合作伙伴 LU 关联的模式的名称匹配。

    该参数是一个 8 字节 EBCDIC 字符串。 它可以由类型 A EBCDIC 字符集中的字符组成:

  • 大写字母

  • 数字 0 到 9

  • 特殊字符 $、#和@

    字符串中的第一个字符必须是大写字母或特殊字符。

    不要在映射的对话中使用 SNASVCMG。 SNASVCMG 是 APPC 内部使用的保留 mode_name 。 不建议在基本对话中使用此名称。

    tp_name
    提供的参数。 指定已调用的 TP 的名称。 在调用 TP 中由 ALLOCATE 指定的tp_name值必须与调用的 TP 中由RECEIVE_ALLOCATE指定的tp_name的值匹配。

    该参数是 64 字节 EBCDIC 字符串,区分大小写。 tp_name参数可以包含以下 EBCDIC 字符:

  • 大写和小写字母

  • 数字 0 到 9

  • 特殊字符 $、#、@和 period (.)

    如果 tp_name 小于 64 个字节,请使用 EBCDIC 空格(0x40)将其放在右侧。

    SNA 约定是服务 TP 名称最多可以有四个字符。 第一个字符是0x00和0x3F之间的十六进制字节。 其他字符来自 AE EBCDIC 字符集的类型。

    安全
    提供的参数。 提供合作伙伴 LU 验证对已调用的 TP 的访问权限所需的信息。

    根据为配置期间已调用的 TP 建立的对话安全性,使用以下值之一:

  • 对于不使用会话安全性的已调用的 TP,AP_NONE。

  • AP_PGM使用会话安全性的已调用的 TP,因此需要用户标识符和密码。 通过 user_idpwd 参数提供此信息。

  • AP_PROXY_PGM使用会话安全性的特权代理调用的 TP,因此需要用户标识符和密码。 必须为 proxy_userproxy_domain 设置指针,以指向包含要模拟的用户的用户名和域名的 Unicode 字符串。 应用程序不需要设置 user_idpwd 字段。

  • AP_PROXY_SAME已使用特权代理调用的 TP,以及代理提供的有效用户标识符和密码,后者又调用另一个 TP。 必须为 proxy_userproxy_domain 设置指针,以指向包含要模拟的用户的用户名和域名的 Unicode 字符串。 应用程序不需要设置 user_idpwd 字段。

    例如,假设 TP A 使用特权代理提供的有效用户标识符和密码调用 TP B,而 TP B 又调用 TP C。如果 TP B 指定值AP_PROXY_SAME,APPC 将从 TP A 和已验证的指示器发送 TP C 的用户标识符的 LU。 此指示器告知 TP C 不需要密码(如果 TP C 配置为接受已验证的指示器)。

  • AP_PROXY_STRONG使用会话安全性的特权代理调用的 TP,因此需要特权代理机制提供的用户标识符和密码。 必须为 proxy_userproxy_domain 设置指针,以指向包含要模拟的用户的用户名和域名的 Unicode 字符串。 应用程序不需要设置 user_idpwd 字段。 AP_PROXY_STRONG与AP_PROXY_PGM不同,AP_PROXY_STRONG不允许明文密码。 如果远程系统不支持加密的密码(强对话安全性),则此调用将失败。

  • AP_SAME使用有效的用户标识符和密码调用的 TP,后者又调用另一个 TP。

    例如,假设 TP A 调用具有有效用户标识符和密码的 TP B,而 TP B 又调用 TP C。如果 TP B 指定值AP_SAME,APPC 将从 TP A 和已验证的指示器发送 TP C 的用户标识符的 LU。 此指示器告知 TP C 不需要密码(如果 TP C 配置为接受已验证的指示器)。

    ALLOCATE 谓词中使用AP_SAME时,应用程序必须始终为谓词控制块中的 user_idpwd 参数提供值。 根据 SNA 服务器与对等 LU 之间协商的属性,ALLOCATE 动词将按优先顺序发送以下三种类型之一的 Attach(FMH-5)消息:

  1. 如果 LU 已协商“已验证”安全性,则 SNA 服务器发送的 Attach 不会包括 VCB 中所指定的 pwd 参数字段的内容。

  2. 如果 LU 协商了“持久验证”安全性,那么由 SNA 服务器发送的 Attach 请求将包括 VCB 中指定的 pwd 参数,但前提条件是这个 Attach 请求是自 LU-LU 会话开始以来针对指定的 user_id 参数的第一次。在所有后续的 Attach 请求中(无论是由您的应用程序还是使用此 LU-LU 模式三元组的任何其他应用程序发出的),pwd 参数都将被省略。

  3. 如果 LUs 尚未协商上述任一项,则 SNA 服务器发送的 Attach 将在所有 Attach 上省略 user_idpwd 参数。

    应用程序无法判断在 LU 之间协商了哪个安全模式,也无法判断它正在发出的 ALLOCATE 动词是否为该 LU-LU 模式三元组中的第一个。 因此,当安全性设置为AP_SAME时,应用程序必须始终在 VCB 中设置user_idpwd 参数字段。

    有关持久验证和已验证安全性的详细信息,请参阅 SNA 格式指南,部分“FM 标头 5:附加(LU 6.2)”。

  • AP_STRONG使用会话安全性的已调用的 TP,因此需要用户标识符和密码。 通过 user_idpwd 参数提供此信息。 AP_STRONG不同于AP_PGM,AP_STRONG不允许明文密码。 如果远程系统不支持加密的密码(强对话安全性),则此调用将失败。

    如果要使用 APPC 自动登录功能, 则必须将安全性 设置为AP_PGM。 有关详细信息,请参阅“备注”部分。

    reserv5
    保留字段。

    pwd
    提供的参数。 指定与 user_id关联的密码。

    仅当安全性设置为AP_PGM或AP_SAME时,才需要 pwd 参数。 它必须与配置期间建立 user_id 的密码匹配。

    pwd 参数是一个 10 字节 EBCDIC 字符串,区分大小写。 它可以包含以下 EBCDIC 字符:

  • 大写和小写字母

  • 数字 0 到 9

  • 特殊字符 $、#、@和 period (.)

    如果密码少于 10 个字节,请使用 EBCDIC 空格(0x40)将其填充在右侧。

    如果要使用 APPC 自动登录功能, pwd 字符串必须硬编码为 MS$SAME。 有关详细信息,请参阅“备注”部分。

    user_id
    提供的参数。 指定访问合作伙伴 TP 所需的用户标识符。 仅当安全参数设置为AP_PGM或AP_SAME时才需要此参数。

    user_id参数是一个 10 字节 EBCDIC 字符串,区分大小写。 它必须与为合作伙伴 TP 配置的用户标识符之一匹配。

    该参数可以包含以下 EBCDIC 字符:

  • 大写和小写字母

  • 数字 0 到 9

  • 特殊字符 $、#、@和 period (.)

    如果 user_id 小于 10 个字节,请使用 EBCDIC 空格(0x40)将其放在右侧。

    如果要使用 APPC 自动登录功能, 则必须将user_id 字符串硬编码为 MS$SAME。 有关详细信息,请参阅“备注”部分。

    pip_dlen
    提供的参数。 指定要传递给合作伙伴 TP 的程序初始化参数(PIP)的长度。 范围为 0 到 32767。

    pip_dptr
    提供的参数。 指定包含 PIP 数据的缓冲区的地址。 仅当 pip_dlen 大于零时,才使用此参数。

    PIP 数据可以包含合作伙伴 TP 或远程作系统所需的初始化参数或环境设置信息。 PIP 数据必须遵循常规数据流(GDS)格式。 有关详细信息,请参阅 SNA LU6.2 参考:IBM 发布的对等协议

    对于 Windows,数据缓冲区可以驻留在静态数据区域或全局分配的区域。 数据缓冲区必须完全适合此区域。

    reserv7
    保留字段。

    fqplu_name
    提供的参数。 指定伙伴 LU 的完全限定名称。 这必须与远程节点中定义的本地 LU 的完全限定名称匹配。 该参数由 NETID 的两个类型 A EBCDIC 字符串和伙伴 LU 的 LU 名称组成。 名称由 EBCDIC 句点(.)分隔。

    如果未指定 plu_alias, 则必须提供此名称。 它可以包含以下 EBCDIC 字符:

  • 大写字母

  • 数字 0 到 9

  • 特殊字符 $、#和@

    如果此参数的值小于 17 个字节,请使用 EBCDIC 空格(0x40)将其放在右侧。

    reserv8
    保留字段。

    proxy_user
    提供的参数。 指定一个 LPWSTR,指向一个 Unicode 字符串,该字符串包含使用特权代理功能模拟的用户名。 仅当在 opext 字段上设置AP_EXTD_VCB位时,才能使用此字段,指示扩展的 VCB。

    proxy_domain
    提供的参数。 指定一个 LPWSTR,它指向一个 Unicode 字符串,该字符串包含使用特权代理功能模拟的用户的域名。 仅当在 opext 字段上设置AP_EXTD_VCB位时,才能使用此字段,指示扩展的 VCB。

    reserv9
    保留字段。

返回代码

AP_OK
主要返回代码;已成功执行谓词。

AP_UNSUCCESSFUL
主要返回代码;提供的参数 rtn_ctl 指定的直接 (AP_IMMEDIATE) 控制权返回到 TP,并且本地 LU 没有可用的争用胜者会话。

参数检查
主要返回代码;由于参数错误,谓词未执行。

AP_BAD_RETURN_CONTROL(返回控制错误)

辅助返回代码;为 rtn_ctl 指定的值无效。

AP_安全性差

辅助返回代码;为 安全 指定的值无效。

AP_BAD_SYNC_LEVEL

辅助返回代码;为 sync_level 指定的值无效。

AP_BAD_TP_ID

辅助返回代码;为 tp_id 指定的值无效。

接入点管道长度不正确

辅助返回代码; pip_dlen 的值大于 32767。

AP_未知合作伙伴模式

辅助返回代码;为 mode_name 指定的值无效。

AP_BAD_PARTNER_LU_ALIAS

辅助返回代码;APPC 无法识别提供的 partner_lu_alias

AP_BAD_CONV_TYPE(基本对话)

辅助返回代码;为 conv_type 指定的值无效。

AP_NO_USE_OF_SNASVCMG(用于映射的对话)

辅助返回代码;SNASVCMG 不是 mode_name的有效值。

AP_INVALID_DATA_SEGMENT

辅助返回代码;PIP 数据比分配的数据段长,或者 PIP 数据缓冲区的地址不正确。

AP_ALLOCATION_ERROR
主要返回代码;APPC 未能分配会话。 会话状态设置为 RESET。

可以通过 ALLOCATE 后颁发的谓词返回此代码。

AP_ALLOCATION_FAILURE_NO_RETRY

辅助返回代码;由于永久条件(例如配置错误或会话协议错误),无法分配会话。 若要确定错误,系统管理员应检查错误日志文件。 在更正错误之前,不要重试分配。

AP_ALLOCATION_FAILURE_RETRY (接入点分配失败重试)

辅助返回代码;由于临时条件(如链接失败),无法分配会话。 失败的原因记录在系统错误日志中。 重试分配。

AP_COMM_SUBSYSTEM_ABENDED (错误代码或信息)
主要返回代码;指示以下条件之一:

  • 此会话使用的节点遇到 ABEND。

  • TP 与 PU 2.1 节点之间的连接已中断(LAN 错误)。

  • TP 计算机上的 SnaBase 遇到 ABEND。

    系统管理员应检查错误日志以确定 ABEND 的原因。

    AP_COMM_SUBSYSTEM_NOT_LOADED
    主要返回代码;处理谓词时,无法加载或终止所需的组件。 因此,无法进行通信。 请联系系统管理员以采取纠正措施。

    当此返回代码与 ALLOCATE 一起使用时,它可以指示找不到任何通信系统来支持本地 LU。 (例如,使用 TP_STARTED 指定的本地 LU 别名不正确或尚未配置。请注意,如果 lu_aliasmode_name 少于 8 个字符,则必须确保这些字段填充右侧的空格。 如果这些参数未填充空格,则返回此错误,因为没有节点可以满足 ALLOCATE 请求。

    ALLOCATE 为使用 Host Integration Server 配置了多个节点的系统生成此返回代码时,有两个辅助返回代码,如下所示:

    0xF0000001

    辅助返回代码;尚未启动任何节点。

    0xF0000002

    辅助返回代码;至少有一个节点已启动,但未在任何活动节点上配置本地 LU (TP_STARTED颁发 时)。 问题可能是以下任一问题:

  • 未启动具有本地 LU 的节点。

  • 未配置本地 LU。

    AP_INVALID_VERB_SEGMENT (无效的动词段)
    主要返回代码;VCB 超出了数据段的末尾。

    AP_STACK_TOO_SMALL
    主要返回代码;应用程序的堆栈大小太小,无法执行谓词。 增加应用程序的堆栈大小。

    AP_CONV_BUSY
    主要返回代码;在任何对话中,一次只能有一个未完成的对话谓词。 如果本地 TP 有多个线程,并且多个线程使用相同的 conv_id发出 APPC 调用,则可能会出现这种情况。

    AP_THREAD_BLOCKING
    主要返回代码;调用线程已在阻塞调用中。

    未知DOS错误
    主要返回代码;作系统在处理来自本地 TP 的 APPC 调用时,已将错误返回到 APPC。 作系统返回代码通过 secondary_rc返回。 它以 Intel 字节交换的顺序显示。 如果问题仍然存在,请咨询系统管理员。

注解

ALLOCATE 可以建立基本对话或映射对话。

当 TP 发出此谓词时,会话状态为 RESET。 成功执行(primary_rc 为AP_OK),状态更改为 SEND。 如果未执行谓词,状态保持不变。

ALLOCATE 的多个参数是 EBCDIC 或 ASCII 字符串。 TP 可以使用通用服务谓词 (CSV) CONVERT 将字符串从一个字符集转换为另一个字符。

若要立即发送 ALLOCATE 请求,调用 TP 可以在 ALLOCATE 后立即发出 FLUSHCONFIRM。 否则, ALLOCATE 请求会与其他数据一起累积在本地 LU 的发送缓冲区中,直到缓冲区已满。

通过在 ALLOCATE 后发出 CONFIRM,调用 TP 可以立即确定分配是否成功(如果 synclevel 设置为AP_CONFIRM_SYNC_LEVEL)。

通常, ALLOCATE 谓词 的mode_name 参数的值必须与为调用的 TP 节点配置的模式的名称匹配,并在配置过程中与伙伴 LU 相关联。

如果与调用的 TP 节点上的伙伴 LU 关联的模式之一是隐式模式,则当没有与合作伙伴 LU 关联的模式名称与 mode_name的值匹配时,在两个 LU 之间建立的会话将是隐式模式。

Host Integration Server 支持一项称为密码替换的功能。 这是 IBM i 作系统支持的一项安全功能,用于加密在连接消息上传输的两个节点之间的任何密码。 每当有人调用指定用户标识符和密码的 APPC 事务程序时,Attach 上的密码将流。 例如,每当任何人登录到 IBM i 时,就会发生这种情况。

通过将 BIND 请求的第 5 个字节 23 中的位 5 设置为 1 来指示对密码替换的支持(这表示支持密码替换)。 如果远程系统在 BIND 响应中设置此位,SNA 服务器会自动加密 FMH-5 附加消息中包含的 LU 6.2 会话安全密码。 使用 Host Integration Server 的 APPC 应用程序通过将 VCB 的安全字段设置为 在 ALLOCATE 请求中AP_PGM或AP_STRONG来自动利用此功能。

如果 APPC 应用程序想要强制加密密码流,应用程序可以在 ALLOCATE 请求中为 VCB 中的安全字段指定AP_STRONG。 此选项在 IBM i V3R1 中实现,在 IBM i CPI-C 程序员参考中记录为 CM_SECURITY_PROGRAM_STRONG,其中 LU 6.2 pwd (密码)字段在物理网络中流动之前对其进行加密。

密码替换功能目前仅受 IBM i V3R1 或更高版本的支持。 如果远程系统不支持此功能,SNA 服务器将使用10060006感知代码取消绑定会话。 这两个节点协商它们是否在 BIND 交换中支持此功能。 Host Integration Server 在 BIND 中设置一个位,还会在 BIND 上添加一些随机数据进行加密。 如果远程节点支持密码替换,则会在 BIND 响应中设置相同的位,并添加一些用于解密的随机数据。

Host Integration Server 支持 APPC 应用程序的自动登录。 此功能需要网络管理员的特定配置:必须在 HOST Integration Server 客户端的 LAN 端调用 APPC 应用程序。 客户端必须登录到 Windows 域,但客户端可以在 Host Integration Server APPC API 支持的任何作系统上运行。

客户端应用程序编码为使用“程序”级别安全性,具有特殊的硬编码 APPC 用户名 MS$SAME 和密码 MS$SAME。 当此会话分配从客户端流向 SNA 服务器时,服务器将查找与登录客户端所依据的 Windows 帐户对应的主机帐户和密码,并将主机帐户信息替换为它发送到主机的 APPC 附加消息。

注释

远程节点设置指定密码替换的位而不是添加随机数据是非法的。

根据 IBM 的说法,LU 6.2 密码替换的实现不支持密码替换,但确实将密码替换位回显到 Host Integration Server,而无需指定任何随机数据。 执行此作时,SNA 服务器将使用感知代码 10060006 取消绑定会话。此感知代码被解释为:

  • 1006 = 缺少必填字段或参数。

  • 0006 = 省略了控制向量的必需子字段。

    主机集成服务器还应记录事件 17(APPC 会话激活失败:发送的 BIND 负响应)。

    正确的解决方案是修复失败的实现。 但是,作为短期解决方法,可以设置以下 Host Integration Server 服务注册表设置:

    HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\snaservr\parameters\NOPWDSUB: REG_SZ: 是

    在注册表中指定此参数时,将禁用密码替换支持。

    主机集成服务器进行了多项更新,允许特权 APPC 应用程序代表任何定义的 Windows 用户使用单 Sign-On 功能打开 APPC 对话。 这称为特权代理功能。 已将扩展添加到 APPC ALLOCATE 谓词以调用此功能。

    APPC 应用程序通过作为特殊 Windows 组成员的 Windows 用户帐户启动来获得特权。 配置主机安全域后,SNA 管理器将定义第二个 Windows 组,用于 Host Integration Server 的主机安全功能。 如果运行实际客户端的用户帐户是第二个 Windows 组的成员,则客户端有权代表主机帐户缓存中定义的任何用户帐户启动 APPC 对话。

    下面说明了特权代理功能的工作原理:

    Host Integration Server 管理员创建名为 APP 的主机安全域。 SNA 管理器现在创建两个 Windows 组。 第一个组称为 APP,第二个组称为此示例APP_PROXY。 为应用组分配的用户启用了单一登录。 分配给APP_PROXY组的用户是特权代理。 管理员使用 SNA Manager 中主机安全域属性对话框中的“用户”按钮将 Windows 用户 AppcUser 添加到APP_PROXY组。

    然后,管理员在 Host Integration Server 上设置 APPC 应用程序,以作为名为 APPCAPP 的 Windows 服务运行,并且该服务已设置为在 AppcUser 用户帐户下运行。 APPCAPP 运行时,它使用扩展的 VCB 格式通过 ALLOCATE 谓词打开 APPC 会话,并指定所需用户的 Windows 用户名 UserA(例如)。

    SNA 服务看到来自作为主机安全域应用成员的连接的会话请求。 客户端/服务器接口告知 SNA 服务实际客户端是 AppcUser。

    SNA 服务会检查 AppcUser 是否是APP_PROXY组的成员。 由于 AppcUser 是 APP_PROXY 的成员,SNA 服务会在 APPC Attach (FMH-5) 命令中插入 UserA 的用户名/密码,并将其发送到合作伙伴 TP。

    为了支持特权代理功能,APPC 应用程序必须实现以下程序逻辑:

    APPC 应用程序必须确定它希望模拟的 Windows 用户 ID 和域名。

    在调用 ALLOCATE 谓词之前,APPC 应用程序必须设置以下参数:

    通过在 opext 字段中设置AP_EXTD_VCB标志,启用扩展 ALLOCATE 谓词控制块结构的使用。

    将安全性设置为AP_PROXY_SAME、AP_PROXY_PGM或AP_PROXY_STRONG。

    设置 用于proxy_userproxy_domain 的指针以指向包含要模拟的用户的用户名和域名的 Unicode 字符串。

注释

应用程序不需要在 ALLOCATE VCB 中设置user_idpwd 字段。

当 APPC 应用程序执行上述步骤并发出 ALLOCATE 谓词时,Host Integration Server 服务器将在指定的 Windows 用户的主机安全域中执行查找,并在发送到远程系统的 FMH-5 附加消息中设置用户 ID 和密码字段。