ALLOCATE

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 手册 () 。

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

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

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

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

    reserv3
    一个保留字段。

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

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

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

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

  • AP_WHEN_CONWINNER_ALLOCATED指定 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 指定其他值并且 AP_OK primary_rc 时,这是返回的值。

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 的名称。 ALLOCATE 在调用 TP 中指定的tp_name的值必须与调用的 TP 中RECEIVE_ALLOCATE指定的tp_name的值匹配。

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

  • 大写和小写字母

  • 数字 0 到 9

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

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

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

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

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

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

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

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

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

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

  • AP_PROXY_STRONG使用会话安全性的特权代理调用的 TP,因此需要特权代理机制提供的用户标识符和密码。 必须为 proxy_user 设置指针, proxy_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 C 的 LU 发送来自 TP A 的用户标识符和已验证的指示器。 如果 TP C 配置为接受已验证的指示器) ,则此指示器告知 TP C 不需要密码 (。

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

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

  2. 如果 LU 协商了“持久验证”安全性,则 SNA 服务器发送的附加将包括 VCB 中指定的 pwd 参数,但仅当 Attach 是自 LU-LU 会话开始以来指定 user_id 参数的第一个时,并且会在应用程序或使用此 LU-LU 模式三元) 发出的所有后续附加 (上省略 pwd 参数。

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

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

    有关持久验证和已验证安全性的详细信息,请参阅 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

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

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

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

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

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

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

  • 大写和小写字母

  • 数字 0 到 9

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

    如果 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
    提供的参数。 指定指向 Unicode 字符串的 LPWSTR,该字符串包含要使用特权代理功能模拟的用户名。 仅当 opext 字段上设置了AP_EXTD_VCB位(指示扩展的 VCB)时,才能使用此字段。

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

    reserv9
    一个保留字段。

返回代码

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

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

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

AP_BAD_RETURN_CONTROL

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

AP_BAD_SECURITY

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

AP_BAD_SYNC_LEVEL

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

AP_BAD_TP_ID

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

AP_PIP_LEN_INCORRECT

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

AP_UNKNOWN_PARTNER_MODE

辅助返回代码;为 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

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

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

  • 未配置本地 LU。

    AP_INVALID_VERB_SEGMENT
    主要返回代码;VCB 超出了数据段的末尾。

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

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

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

    AP_UNEXPECTED_DOS_ERROR
    主要返回代码;操作系统在处理来自本地 TP 的 APPC 调用时向 APPC 返回了错误。 已通过 secondary_rc 返回了操作系统返回代码。 此返回代码是以 Intel 字节交换顺序显示的。 如果问题持续出现,请咨询系统管理员。

备注

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

当 TP 发出此谓词时,会话状态为 RESET。 AP_OK) 成功 执行 (primary_rc 后,状态将更改为 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 之间建立的会话将是隐式模式。

主机集成服务器支持一项称为密码替换的功能。 这是 IBM i 操作系统支持的一项安全功能,可加密附加消息上两个节点之间流动的任何密码。 每当有人调用指定用户标识符和密码的 APPC 事务程序时,就会出现密码。 例如,每当有人登录到 IBM i 时,就会发生这种情况。

通过将 BIND 请求的第 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 交换中协商是否支持此功能。 主机集成服务器在 BIND 中设置一个位,并在 BIND 上添加一些随机数据进行加密。 如果远程节点支持密码替换,它会在 BIND 响应中设置相同的位,并添加一些 (不同的) 随机数据进行解密。

Host Integration Server 支持 APPC 应用程序的自动登录。 此功能需要网络管理员的特定配置:必须在 LAN 端从 Host Integration Server 的客户端调用 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:是

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

    已对 Host Integration Server 进行了多项更新,以允许特权 APPC 应用程序代表任何定义的 Windows 用户使用单 Sign-On 功能打开 APPC 对话。 这称为特权代理功能。 APPC ALLOCATE 谓词中添加了一个扩展来调用此功能。

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

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

    主机集成服务器管理员创建名为 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 附加 (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 和密码字段。