HSE_SRV_ID_GET_KEY_INFO service return - HSE_SRV_RSP_NOT_ALLOWED responce

キャンセル
次の結果を表示 
表示  限定  | 次の代わりに検索 
もしかして: 

HSE_SRV_ID_GET_KEY_INFO service return - HSE_SRV_RSP_NOT_ALLOWED responce

113件の閲覧回数
KaleRushikesh
Contributor I

I am working with the HSE on an S32K3 device and have successfully imported an AES-128 key into NVM using the IMPORT_KEY service. The import service completes without error.

To verify the key, I am using the GET_KEY_INFO service descriptor as shown below-

 
static hseSrvResponse_t App_GetKeyInfo
(
    const uint8 u8MuInstance,
    hseKeyInfo_t* pAes128NvmKeyInfo
)
{
    hseSrvDescriptor_t* pHseSrvDescriptor;
    hseGetKeyInfoSrv_t* pHseGetKeyInfo;

    pHseSrvDescriptor = &Hse_aSrvDescriptor[MU_ADMIN_CHANNEL_U8];
    memset(pHseSrvDescriptor, 0, sizeof(hseSrvDescriptor_t));

    pHseGetKeyInfo = &(pHseSrvDescriptor->hseSrv.getKeyInfoReq);

    pHseSrvDescriptor->srvId = HSE_SRV_ID_GET_KEY_INFO;
    pHseGetKeyInfo->keyHandle = GET_KEY_HANDLE(HSE_KEY_CATALOG_ID_NVM, 1U, 0U);
    pHseGetKeyInfo->pKeyInfo = (HOST_ADDR)pAes128NvmKeyInfo;

    HseIp_aRequest[MU_ADMIN_CHANNEL_U8].eReqType   = HSE_IP_REQTYPE_SYNC;
    HseIp_aRequest[MU_ADMIN_CHANNEL_U8].u32Timeout = TIMEOUT_TICKS_U32;

    return Hse_Ip_ServiceRequest(u8MuInstance, MU_ADMIN_CHANNEL_U8,
                                 &HseIp_aRequest[MU_ADMIN_CHANNEL_U8],
                                 pHseSrvDescriptor);}

However, when I call this service, the response is not HSE_SRV_RSP_OK. Instead, the service seems to return HSE_SRV_ID_GET_KEY_INFO.

My device is currently in CUST_DEL lifecycle state.

Here is the Aes import key service descriptor- 

static hseSrvResponse_t App_AesLoadPlainNvmKey(void)
{
hseSrvResponse_t RetVal = HSE_SRV_RSP_GENERAL_ERROR;
hseSrvDescriptor_t *pHseSrvDescriptor;
uint8 u8MuChannel = Hse_Ip_GetFreeChannel(MU0_INSTANCE_U8);
 
keyInfo.keyBitLen = 128;
keyInfo.keyType = HSE_KEY_TYPE_AES;
keyInfo.keyFlags =  ( HSE_KF_USAGE_DECRYPT | HSE_KF_USAGE_ENCRYPT | HSE_KF_USAGE_KEY_PROVISION );
keyInfo.keyCounter = 0; // first time while NVM key importing it should be greater than or equal to 0.
keyInfo.smrFlags = 0;
keyInfo.specific.aesBlockModeMask = HSE_KU_AES_BLOCK_MODE_ANY;
 
if(HSE_IP_INVALID_MU_CHANNEL_U8 != u8MuChannel)
{
pHseSrvDescriptor   = &Hse_aSrvDescriptor[u8MuChannel];
memset(pHseSrvDescriptor, 0, sizeof(hseSrvDescriptor_t));
 
pHseSrvDescriptor->srvId = HSE_SRV_ID_IMPORT_KEY;
pHseSrvDescriptor->hseSrv.importKeyReq.keyLen[2] = 16;
pHseSrvDescriptor->hseSrv.importKeyReq.pKey[2] = HSE_PTR_TO_HOST_ADDR(App_au8AesNvmKey);
pHseSrvDescriptor->hseSrv.importKeyReq.pKeyInfo= HSE_PTR_TO_HOST_ADDR(&keyInfo);
pHseSrvDescriptor->hseSrv.importKeyReq.targetKeyHandle = GET_KEY_HANDLE(1,1,0);
// Both the fields given below must be configured.
pHseSrvDescriptor->hseSrv.importKeyReq.cipher.cipherKeyHandle= HSE_INVALID_KEY_HANDLE;
pHseSrvDescriptor->hseSrv.importKeyReq.keyContainer.authKeyHandle= HSE_INVALID_KEY_HANDLE;
        /* Build the request to be sent to Hse Ip layer */
        HseIp_aRequest[u8MuChannel].eReqType   = HSE_IP_REQTYPE_SYNC;
        HseIp_aRequest[u8MuChannel].u32Timeout = TIMEOUT_TICKS_U32;
 
        /* Send the request to Hse Ip layer */
        RetVal = Hse_Ip_ServiceRequest(MU0_INSTANCE_U8, u8MuChannel, &HseIp_aRequest[u8MuChannel], pHseSrvDescriptor);
}
return RetVal;
}

 

 

 
0 件の賞賛
返信
2 返答(返信)

21件の閲覧回数
lukaszadrapa
NXP TechSupport
NXP TechSupport

Hi @KaleRushikesh 

I can see nothing wrong, HSE_SRV_ID_GET_KEY_INFO is simple service, this should work. 

Isn't that just data cache issue? Could you try to turn off the data cache to see if it makes a difference? All objects used for communication with HSE must be forced to non-cacheable memory. 

Regards,

Lukas

0 件の賞賛
返信

13件の閲覧回数
KaleRushikesh
Contributor I
Hii @lukaszadrapa

1. As you can see in following line, the variable is placed in non-cacheable memory and that is verified.
/* The variables in the section below need to be put in non-cacheable memory area in order to be correctly seen by the HSE */
#define CRYPTO_START_SEC_VAR_CLEARED_UNSPECIFIED_NO_CACHEABLE
#include "Crypto_MemMap.h"

/* Variable where HSE will write (return) the supported capabilities */
static hseAttrCapabilities_t Hse_AttrCapabilities;
static hseAttrSecureLifecycle_t hseAttrSecureLifecycle;
static hseKeyInfo_t aes128NvmKeyInfo;


/* Variable where application will store the request of configuring (enabling/disabling) the MU instances */
static hseAttrMUConfig_t Hse_MuConfig;

#define CRYPTO_STOP_SEC_VAR_CLEARED_UNSPECIFIED_NO_CACHEABLE
#include "Crypto_MemMap.h"

#define CRYPTO_START_SEC_VAR_SHARED_CLEARED_UNSPECIFIED_NO_CACHEABLE
#include "Crypto_MemMap.h"

2. Also tried with disabling cache memory, the result is same.
0 件の賞賛
返信
%3CLINGO-SUB%20id%3D%22lingo-sub-2359672%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3EHSE_SRV_ID_GET_KEY_INFO%20%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E6%88%BB%E3%82%8A%E5%80%A4%20-%20HSE_SRV_RSP_NOT_ALLOWED%20%E5%BF%9C%E7%AD%94%3C%2FLINGO-SUB%3E%3CLINGO-BODY%20id%3D%22lingo-body-2359672%22%20slang%3D%22en-US%22%20mode%3D%22CREATE%22%3E%3CP%3E%3CSPAN%3E%E7%A7%81%E3%81%AFS32K3%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E4%B8%8A%E3%81%A7HSE%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6%E3%81%8A%E3%82%8A%E3%80%81IMPORT_KEY%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%A6AES-128%E3%82%AD%E3%83%BC%E3%82%92NVM%E3%81%AB%E6%AD%A3%E5%B8%B8%E3%81%AB%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AF%E3%82%A8%E3%83%A9%E3%83%BC%E3%81%AA%E3%81%8F%E5%AE%8C%E4%BA%86%E3%81%97%E3%81%BE%E3%81%97%E3%81%9F%E3%80%82%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSPAN%3E%E3%82%AD%E3%83%BC%E3%82%92%E6%A4%9C%E8%A8%BC%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AB%E3%80%81%E4%BB%A5%E4%B8%8B%E3%81%AB%E7%A4%BA%E3%81%99%E3%82%88%E3%81%86%E3%81%ABGET_KEY_INFO%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E8%A8%98%E8%BF%B0%E5%AD%90%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3C%2FSPAN%3E%3C%2FP%3E%3CDIV%3E%3CDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3C%2FDIV%3E%3CDIV%20class%3D%22%22%3E%3CDIV%3E%3CPRE%20translate%3D%22no%22%3E%3CSPAN%3Estatic%3C%2FSPAN%3E%20%3CSPAN%3EhseSrvResponse_t%20%3C%2FSPAN%3E%3CSPAN%3EApp_GetKeyInfo%3C%2FSPAN%3E%0A%3CSPAN%3E(%0A%20%20%20%20const%20uint8%20u8MuInstance%2C%0A%20%20%20%20hseKeyInfo_t*%20pAes128NvmKeyInfo%0A)%3C%2FSPAN%3E%0A%3CSPAN%3E%7B%0A%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3EhseSrvDescriptor_t*%20%3C%2FSPAN%3E%3CSPAN%3EpHseSrvDescriptor%3B%0A%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3EhseGetKeyInfoSrv_t*%20%3C%2FSPAN%3E%3CSPAN%3EpHseGetKeyInfo%3B%0A%0A%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3EpHseSrvDescriptor%20%3C%2FSPAN%3E%3CSPAN%3E%3D%20%3C%2FSPAN%3E%3CSPAN%3E%26amp%3BHse_aSrvDescriptor%5BMU_ADMIN_CHANNEL_U8%5D%3B%0A%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3Ememset%3C%2FSPAN%3E%3CSPAN%3E(pHseSrvDescriptor%2C%20%3C%2FSPAN%3E%3CSPAN%3E0%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3Esizeof%3C%2FSPAN%3E%3CSPAN%3E(hseSrvDescriptor_t))%3B%0A%0A%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3EpHseGetKeyInfo%20%3C%2FSPAN%3E%3CSPAN%3E%3D%20%3C%2FSPAN%3E%3CSPAN%3E%26amp%3B(pHseSrvDescriptor-%26gt%3BhseSrv.getKeyInfoReq)%3B%0A%0A%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3EpHseSrvDescriptor-%26gt%3BsrvId%20%3C%2FSPAN%3E%3CSPAN%3E%3D%20%3C%2FSPAN%3E%3CSPAN%3EHSE_SRV_ID_GET_KEY_INFO%3B%0A%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3EpHseGetKeyInfo-%26gt%3BkeyHandle%20%3C%2FSPAN%3E%3CSPAN%3E%3D%20%3C%2FSPAN%3E%3CSPAN%3EGET_KEY_HANDLE(HSE_KEY_CATALOG_ID_NVM%2C%20%3C%2FSPAN%3E%3CSPAN%3E1U%3C%2FSPAN%3E%3CSPAN%3E%2C%20%3C%2FSPAN%3E%3CSPAN%3E0U%3C%2FSPAN%3E%3CSPAN%3E)%3B%0A%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3EpHseGetKeyInfo-%26gt%3BpKeyInfo%20%3C%2FSPAN%3E%3CSPAN%3E%3D%20%3C%2FSPAN%3E%3CSPAN%3E(HOST_ADDR)pAes128NvmKeyInfo%3B%0A%0A%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3EHseIp_aRequest%5BMU_ADMIN_CHANNEL_U8%5D.eReqType%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%3D%20%3C%2FSPAN%3E%3CSPAN%3EHSE_IP_REQTYPE_SYNC%3B%0A%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3EHseIp_aRequest%5BMU_ADMIN_CHANNEL_U8%5D.u32Timeout%20%3C%2FSPAN%3E%3CSPAN%3E%3D%20%3C%2FSPAN%3E%3CSPAN%3ETIMEOUT_TICKS_U32%3B%0A%0A%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3Ereturn%3C%2FSPAN%3E%20%3CSPAN%3EHse_Ip_ServiceRequest(u8MuInstance%2C%20%3C%2FSPAN%3E%3CSPAN%3EMU_ADMIN_CHANNEL_U8%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3E%26amp%3BHseIp_aRequest%5BMU_ADMIN_CHANNEL_U8%5D%2C%0A%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%20%3C%2FSPAN%3E%3CSPAN%3EpHseSrvDescriptor)%3B%3C%2FSPAN%3E%3CSPAN%3E%7D%3C%2FSPAN%3E%3C%2FPRE%3E%3C%2FDIV%3E%3C%2FDIV%3E%3C%2FDIV%3E%3CP%3E%3CSPAN%3E%E3%81%97%E3%81%8B%E3%81%97%E3%80%81%E3%81%93%E3%81%AE%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%82%92%E5%91%BC%E3%81%B3%E5%87%BA%E3%81%97%E3%81%A6%E3%82%82%E3%80%81%E5%BF%9C%E7%AD%94%E3%81%AFHSE_SRV_RSP_OK%E3%81%A7%E3%81%AF%E3%81%82%E3%82%8A%E3%81%BE%E3%81%9B%E3%82%93%E3%80%82%E3%81%9D%E3%81%AE%E4%BB%A3%E3%82%8F%E3%82%8A%E3%81%AB%E3%80%81%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AF%20HSE_SRV_ID_GET_KEY_INFO%20%E3%82%92%E8%BF%94%E3%81%99%E3%82%88%E3%81%86%E3%81%A7%E3%81%99%E3%80%82%3C%2FSPAN%3E%3C%2FP%3E%3CP%3E%3CSPAN%3E%E7%A7%81%E3%81%AE%E3%83%87%E3%83%90%E3%82%A4%E3%82%B9%E3%81%AF%E7%8F%BE%E5%9C%A8%E3%80%81%20%3CSTRONG%3ECUST_DEL%E3%83%A9%E3%82%A4%E3%83%95%E3%82%B5%E3%82%A4%E3%82%AF%E3%83%AB%E7%8A%B6%E6%85%8B%3C%2FSTRONG%3E%E3%81%AB%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%3CBR%20%2F%3E%3CBR%20%2F%3E%E4%BB%A5%E4%B8%8B%E3%81%AFAES%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88%E3%82%AD%E3%83%BC%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E8%A8%98%E8%BF%B0%E5%AD%90%E3%81%A7%E3%81%99%E3%80%82%3CBR%20%2F%3E%3C%2FSPAN%3E%3C%2FP%3E%3CDIV%3Estatic%20hseSrvResponse_t%20App_AesLoadPlainNvmKey(void)%3C%2FDIV%3E%3CDIV%3E%7B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3EhseSrvResponse_t%20RetVal%20%3D%20HSE_SRV_RSP_GENERAL_ERROR%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3EhseSrvDescriptor_t%20*pHseSrvDescriptor%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Euint8%20u8MuChannel%20%3D%20Hse_Ip_GetFreeChannel(MU0_INSTANCE_U8)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3EkeyInfo.keyBitLen%20%3D%20128%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3EkeyInfo.keyType%20%3D%20HSE_KEY_TYPE_AES%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3EkeyInfo.keyFlags%20%3D%20(%20HSE_KF_USAGE_DECRYPT%20%7C%20HSE_KF_USAGE_ENCRYPT%20%7C%20HSE_KF_USAGE_KEY_PROVISION%20)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3EkeyInfo.keyCounter%20%3D%200%3B%20%2F%2F%20NVM%E3%82%AD%E3%83%BC%E3%82%92%E3%82%A4%E3%83%B3%E3%83%9D%E3%83%BC%E3%83%88%E3%81%99%E3%82%8B%E9%9A%9B%E3%80%81%E5%88%9D%E5%9B%9E%E3%81%AF0%E4%BB%A5%E4%B8%8A%E3%81%A7%E3%81%82%E3%82%8B%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3EkeyInfo.smrFlags%20%3D%200%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3EkeyInfo.specific.aesBlockModeMask%3D%20HSE_KU_AES_BLOCK_MODE_ANY%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Eif(HSE_IP_INVALID_MU_CHANNEL_U8%20!%3D%20u8MuChannel)%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3EpHseSrvDescriptor%20%3D%20%26amp%3BHse_aSrvDescriptor%5Bu8MuChannel%5D%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3Ememset(pHseSrvDescriptor%2C%200%2C%20sizeof(hseSrvDescriptor_t))%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3EpHseSrvDescriptor-%26gt%3BsrvId%20%3D%20HSE_SRV_ID_IMPORT_KEY%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3EpHseSrvDescriptor-%26gt%3BhseSrv.importKeyReq.keyLen%5B2%5D%3D%2016%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3EpHseSrvDescriptor-%26gt%3BhseSrv.importKeyReq.pKey%5B2%5D%3D%20HSE_PTR_TO_HOST_ADDR(App_au8AesNvmKey)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3EpHseSrvDescriptor-%26gt%3BhseSrv.importKeyReq.pKeyInfo%3DHSE_PTR_TO_HOST_ADDR(%26amp%3BkeyInfo)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3EpHseSrvDescriptor-%26gt%3BhseSrv.importKeyReq.targetKeyHandle%3D%20GET_KEY_HANDLE(1%2C1%2C0)%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%2F%2F%20%E4%BB%A5%E4%B8%8B%E3%81%AE%E4%B8%A1%E6%96%B9%E3%81%AE%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%82%92%E8%A8%AD%E5%AE%9A%E3%81%99%E3%82%8B%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3EpHseSrvDescriptor-%26gt%3BhseSrv.importKeyReq.cipher.cipherKeyHandle%3DHSE_INVALID_KEY_HANDLE%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3EpHseSrvDescriptor-%26gt%3BhseSrv.importKeyReq.keyContainer.authKeyHandle%3DHSE_INVALID_KEY_HANDLE%3B%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%2F*%20HSE%20IP%E3%83%AC%E3%82%A4%E3%83%A4%E3%83%BC%E3%81%AB%E9%80%81%E4%BF%A1%E3%81%99%E3%82%8B%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%82%92%E4%BD%9C%E6%88%90%E3%81%97%E3%81%BE%E3%81%99%20*%2F%3C%2FDIV%3E%3CDIV%3EHseIp_aRequest%5Bu8MuChannel%5D.eReqType%20%3D%20HSE_IP_REQTYPE_SYNC%3B%3C%2FDIV%3E%3CDIV%3EHseIp_aRequest%5Bu8MuChannel%5D.u32Timeout%20%3D%20TIMEOUT_TICKS_U32%3B%3C%2FDIV%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3CDIV%3E%2F*%20%E3%83%AA%E3%82%AF%E3%82%A8%E3%82%B9%E3%83%88%E3%82%92Hse%20IP%E3%83%AC%E3%82%A4%E3%83%A4%E3%83%BC%E3%81%AB%E9%80%81%E4%BF%A1%E3%81%97%E3%81%BE%E3%81%99%20*%2F%3C%2FDIV%3E%3CDIV%3ERetVal%20%3D%20Hse_Ip_ServiceRequest(MU0_INSTANCE_U8%2C%20u8MuChannel%2C%20%26amp%3BHseIp_aRequest%5Bu8MuChannel%5D%2C%20pHseSrvDescriptor)%3B%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3E%7D%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%3CSPAN%3ERetVal%20%E3%82%92%E8%BF%94%E3%81%97%E3%81%BE%E3%81%99%E3%80%82%3C%2FSPAN%3E%3C%2FDIV%3E%3CDIV%3E%7D%3C%2FDIV%3E%3CBR%20%2F%3E%3CP%3E%3CSPAN%3E%26nbsp%3B%3C%2FSPAN%3E%3C%2FP%3E%3CDIV%3E%26nbsp%3B%3C%2FDIV%3E%3C%2FLINGO-BODY%3E