/* Microsoft Reference Implementation for TPM 2.0
 *
 *  The copyright in this software is being made available under the BSD License,
 *  included below. This software may be subject to other third party and
 *  contributor rights, including patent rights, and no such rights are granted
 *  under this license.
 *
 *  Copyright (c) Microsoft Corporation
 *
 *  All rights reserved.
 *
 *  BSD License
 *
 *  Redistribution and use in source and binary forms, with or without modification,
 *  are permitted provided that the following conditions are met:
 *
 *  Redistributions of source code must retain the above copyright notice, this list
 *  of conditions and the following disclaimer.
 *
 *  Redistributions in binary form must reproduce the above copyright notice, this
 *  list of conditions and the following disclaimer in the documentation and/or
 *  other materials provided with the distribution.
 *
 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ""AS IS""
 *  AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 *  IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
 *  DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR
 *  ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
 *  (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
 *  LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
 *  ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
 *  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
/*(Auto-generated)
 *  Created by TpmDispatch; Version 4.0 July 8,2017
 *  Date: Feb 28, 2020  Time: 03:04:48PM
 */

#if CC_Startup
case TPM_CC_Startup:
    break;
#endif // CC_Startup
#if CC_Shutdown
case TPM_CC_Shutdown:
    break;
#endif // CC_Shutdown
#if CC_SelfTest
case TPM_CC_SelfTest:
    break;
#endif // CC_SelfTest
#if CC_IncrementalSelfTest
case TPM_CC_IncrementalSelfTest:
    break;
#endif // CC_IncrementalSelfTest
#if CC_GetTestResult
case TPM_CC_GetTestResult:
    break;
#endif // CC_GetTestResult
#if CC_StartAuthSession
case TPM_CC_StartAuthSession:
    *handleCount = 2;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, TRUE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    result = TPMI_DH_ENTITY_Unmarshal(&handles[1], handleBufferStart,
                                              bufferRemainingSize, TRUE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_2;
    break;
#endif // CC_StartAuthSession
#if CC_PolicyRestart
case TPM_CC_PolicyRestart:
    *handleCount = 1;
    result = TPMI_SH_POLICY_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_PolicyRestart
#if CC_Create
case TPM_CC_Create:
    *handleCount = 1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_Create
#if CC_Load
case TPM_CC_Load:
    *handleCount = 1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_Load
#if CC_LoadExternal
case TPM_CC_LoadExternal:
    break;
#endif // CC_LoadExternal
#if CC_ReadPublic
case TPM_CC_ReadPublic:
    *handleCount = 1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_ReadPublic
#if CC_ActivateCredential
case TPM_CC_ActivateCredential:
    *handleCount = 2;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[1], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_2;
    break;
#endif // CC_ActivateCredential
#if CC_MakeCredential
case TPM_CC_MakeCredential:
    *handleCount = 1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_MakeCredential
#if CC_Unseal
case TPM_CC_Unseal:
    *handleCount = 1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_Unseal
#if CC_ObjectChangeAuth
case TPM_CC_ObjectChangeAuth:
    *handleCount = 2;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[1], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_2;
    break;
#endif // CC_ObjectChangeAuth
#if CC_CreateLoaded
case TPM_CC_CreateLoaded:
    *handleCount = 1;
    result = TPMI_DH_PARENT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, TRUE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_CreateLoaded
#if CC_Duplicate
case TPM_CC_Duplicate:
    *handleCount = 2;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[1], handleBufferStart,
                                              bufferRemainingSize, TRUE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_2;
    break;
#endif // CC_Duplicate
#if CC_Rewrap
case TPM_CC_Rewrap:
    *handleCount = 2;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, TRUE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[1], handleBufferStart,
                                              bufferRemainingSize, TRUE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_2;
    break;
#endif // CC_Rewrap
#if CC_Import
case TPM_CC_Import:
    *handleCount = 1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_Import
#if CC_RSA_Encrypt
case TPM_CC_RSA_Encrypt:
    *handleCount = 1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_RSA_Encrypt
#if CC_RSA_Decrypt
case TPM_CC_RSA_Decrypt:
    *handleCount = 1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_RSA_Decrypt
#if CC_ECDH_KeyGen
case TPM_CC_ECDH_KeyGen:
    *handleCount = 1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_ECDH_KeyGen
#if CC_ECDH_ZGen
case TPM_CC_ECDH_ZGen:
    *handleCount = 1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_ECDH_ZGen
#if CC_ECC_Parameters
case TPM_CC_ECC_Parameters:
    break;
#endif // CC_ECC_Parameters
#if CC_ZGen_2Phase
case TPM_CC_ZGen_2Phase:
    *handleCount = 1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_ZGen_2Phase
#if CC_ECC_Encrypt
case TPM_CC_ECC_Encrypt:
    *handleCount = 1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_ECC_Encrypt
#if CC_ECC_Decrypt
case TPM_CC_ECC_Decrypt:
    *handleCount = 1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_ECC_Decrypt
#if CC_EncryptDecrypt
case TPM_CC_EncryptDecrypt:
    *handleCount = 1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_EncryptDecrypt
#if CC_EncryptDecrypt2
case TPM_CC_EncryptDecrypt2:
    *handleCount = 1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_EncryptDecrypt2
#if CC_Hash
case TPM_CC_Hash:
    break;
#endif // CC_Hash
#if CC_HMAC
case TPM_CC_HMAC:
    *handleCount = 1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_HMAC
#if CC_MAC
case TPM_CC_MAC:
    *handleCount = 1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_MAC
#if CC_GetRandom
case TPM_CC_GetRandom:
    break;
#endif // CC_GetRandom
#if CC_StirRandom
case TPM_CC_StirRandom:
    break;
#endif // CC_StirRandom
#if CC_HMAC_Start
case TPM_CC_HMAC_Start:
    *handleCount = 1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_HMAC_Start
#if CC_MAC_Start
case TPM_CC_MAC_Start:
    *handleCount = 1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_MAC_Start
#if CC_HashSequenceStart
case TPM_CC_HashSequenceStart:
    break;
#endif // CC_HashSequenceStart
#if CC_SequenceUpdate
case TPM_CC_SequenceUpdate:
    *handleCount = 1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_SequenceUpdate
#if CC_SequenceComplete
case TPM_CC_SequenceComplete:
    *handleCount = 1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_SequenceComplete
#if CC_EventSequenceComplete
case TPM_CC_EventSequenceComplete:
    *handleCount = 2;
    result = TPMI_DH_PCR_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, TRUE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[1], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_2;
    break;
#endif // CC_EventSequenceComplete
#if CC_Certify
case TPM_CC_Certify:
    *handleCount = 2;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[1], handleBufferStart,
                                              bufferRemainingSize, TRUE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_2;
    break;
#endif // CC_Certify
#if CC_CertifyCreation
case TPM_CC_CertifyCreation:
    *handleCount = 2;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, TRUE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[1], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_2;
    break;
#endif // CC_CertifyCreation
#if CC_Quote
case TPM_CC_Quote:
    *handleCount = 1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, TRUE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_Quote
#if CC_GetSessionAuditDigest
case TPM_CC_GetSessionAuditDigest:
    *handleCount = 3;
    result = TPMI_RH_ENDORSEMENT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[1], handleBufferStart,
                                              bufferRemainingSize, TRUE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_2;
    result = TPMI_SH_HMAC_Unmarshal(&handles[2], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_3;
    break;
#endif // CC_GetSessionAuditDigest
#if CC_GetCommandAuditDigest
case TPM_CC_GetCommandAuditDigest:
    *handleCount = 2;
    result = TPMI_RH_ENDORSEMENT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[1], handleBufferStart,
                                              bufferRemainingSize, TRUE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_2;
    break;
#endif // CC_GetCommandAuditDigest
#if CC_GetTime
case TPM_CC_GetTime:
    *handleCount = 2;
    result = TPMI_RH_ENDORSEMENT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[1], handleBufferStart,
                                              bufferRemainingSize, TRUE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_2;
    break;
#endif // CC_GetTime
#if CC_CertifyX509
case TPM_CC_CertifyX509:
    *handleCount = 2;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[1], handleBufferStart,
                                              bufferRemainingSize, TRUE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_2;
    break;
#endif // CC_CertifyX509
#if CC_Commit
case TPM_CC_Commit:
    *handleCount = 1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_Commit
#if CC_EC_Ephemeral
case TPM_CC_EC_Ephemeral:
    break;
#endif // CC_EC_Ephemeral
#if CC_VerifySignature
case TPM_CC_VerifySignature:
    *handleCount = 1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_VerifySignature
#if CC_Sign
case TPM_CC_Sign:
    *handleCount = 1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_Sign
#if CC_SetCommandCodeAuditStatus
case TPM_CC_SetCommandCodeAuditStatus:
    *handleCount = 1;
    result = TPMI_RH_PROVISION_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_SetCommandCodeAuditStatus
#if CC_PCR_Extend
case TPM_CC_PCR_Extend:
    *handleCount = 1;
    result = TPMI_DH_PCR_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, TRUE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_PCR_Extend
#if CC_PCR_Event
case TPM_CC_PCR_Event:
    *handleCount = 1;
    result = TPMI_DH_PCR_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, TRUE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_PCR_Event
#if CC_PCR_Read
case TPM_CC_PCR_Read:
    break;
#endif // CC_PCR_Read
#if CC_PCR_Allocate
case TPM_CC_PCR_Allocate:
    *handleCount = 1;
    result = TPMI_RH_PLATFORM_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_PCR_Allocate
#if CC_PCR_SetAuthPolicy
case TPM_CC_PCR_SetAuthPolicy:
    *handleCount = 1;
    result = TPMI_RH_PLATFORM_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_PCR_SetAuthPolicy
#if CC_PCR_SetAuthValue
case TPM_CC_PCR_SetAuthValue:
    *handleCount = 1;
    result = TPMI_DH_PCR_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_PCR_SetAuthValue
#if CC_PCR_Reset
case TPM_CC_PCR_Reset:
    *handleCount = 1;
    result = TPMI_DH_PCR_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_PCR_Reset
#if CC_PolicySigned
case TPM_CC_PolicySigned:
    *handleCount = 2;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    result = TPMI_SH_POLICY_Unmarshal(&handles[1], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_2;
    break;
#endif // CC_PolicySigned
#if CC_PolicySecret
case TPM_CC_PolicySecret:
    *handleCount = 2;
    result = TPMI_DH_ENTITY_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    result = TPMI_SH_POLICY_Unmarshal(&handles[1], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_2;
    break;
#endif // CC_PolicySecret
#if CC_PolicyTicket
case TPM_CC_PolicyTicket:
    *handleCount = 1;
    result = TPMI_SH_POLICY_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_PolicyTicket
#if CC_PolicyOR
case TPM_CC_PolicyOR:
    *handleCount = 1;
    result = TPMI_SH_POLICY_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_PolicyOR
#if CC_PolicyPCR
case TPM_CC_PolicyPCR:
    *handleCount = 1;
    result = TPMI_SH_POLICY_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_PolicyPCR
#if CC_PolicyLocality
case TPM_CC_PolicyLocality:
    *handleCount = 1;
    result = TPMI_SH_POLICY_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_PolicyLocality
#if CC_PolicyNV
case TPM_CC_PolicyNV:
    *handleCount = 3;
    result = TPMI_RH_NV_AUTH_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    result = TPMI_RH_NV_INDEX_Unmarshal(&handles[1], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_2;
    result = TPMI_SH_POLICY_Unmarshal(&handles[2], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_3;
    break;
#endif // CC_PolicyNV
#if CC_PolicyCounterTimer
case TPM_CC_PolicyCounterTimer:
    *handleCount = 1;
    result = TPMI_SH_POLICY_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_PolicyCounterTimer
#if CC_PolicyCommandCode
case TPM_CC_PolicyCommandCode:
    *handleCount = 1;
    result = TPMI_SH_POLICY_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_PolicyCommandCode
#if CC_PolicyPhysicalPresence
case TPM_CC_PolicyPhysicalPresence:
    *handleCount = 1;
    result = TPMI_SH_POLICY_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_PolicyPhysicalPresence
#if CC_PolicyCpHash
case TPM_CC_PolicyCpHash:
    *handleCount = 1;
    result = TPMI_SH_POLICY_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_PolicyCpHash
#if CC_PolicyNameHash
case TPM_CC_PolicyNameHash:
    *handleCount = 1;
    result = TPMI_SH_POLICY_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_PolicyNameHash
#if CC_PolicyDuplicationSelect
case TPM_CC_PolicyDuplicationSelect:
    *handleCount = 1;
    result = TPMI_SH_POLICY_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_PolicyDuplicationSelect
#if CC_PolicyAuthorize
case TPM_CC_PolicyAuthorize:
    *handleCount = 1;
    result = TPMI_SH_POLICY_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_PolicyAuthorize
#if CC_PolicyAuthValue
case TPM_CC_PolicyAuthValue:
    *handleCount = 1;
    result = TPMI_SH_POLICY_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_PolicyAuthValue
#if CC_PolicyPassword
case TPM_CC_PolicyPassword:
    *handleCount = 1;
    result = TPMI_SH_POLICY_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_PolicyPassword
#if CC_PolicyGetDigest
case TPM_CC_PolicyGetDigest:
    *handleCount = 1;
    result = TPMI_SH_POLICY_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_PolicyGetDigest
#if CC_PolicyNvWritten
case TPM_CC_PolicyNvWritten:
    *handleCount = 1;
    result = TPMI_SH_POLICY_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_PolicyNvWritten
#if CC_PolicyTemplate
case TPM_CC_PolicyTemplate:
    *handleCount = 1;
    result = TPMI_SH_POLICY_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_PolicyTemplate
#if CC_PolicyAuthorizeNV
case TPM_CC_PolicyAuthorizeNV:
    *handleCount = 3;
    result = TPMI_RH_NV_AUTH_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    result = TPMI_RH_NV_INDEX_Unmarshal(&handles[1], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_2;
    result = TPMI_SH_POLICY_Unmarshal(&handles[2], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_3;
    break;
#endif // CC_PolicyAuthorizeNV
#if CC_CreatePrimary
case TPM_CC_CreatePrimary:
    *handleCount = 1;
    result = TPMI_RH_HIERARCHY_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, TRUE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_CreatePrimary
#if CC_HierarchyControl
case TPM_CC_HierarchyControl:
    *handleCount = 1;
    result = TPMI_RH_HIERARCHY_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_HierarchyControl
#if CC_SetPrimaryPolicy
case TPM_CC_SetPrimaryPolicy:
    *handleCount = 1;
    result = TPMI_RH_HIERARCHY_POLICY_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_SetPrimaryPolicy
#if CC_ChangePPS
case TPM_CC_ChangePPS:
    *handleCount = 1;
    result = TPMI_RH_PLATFORM_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_ChangePPS
#if CC_ChangeEPS
case TPM_CC_ChangeEPS:
    *handleCount = 1;
    result = TPMI_RH_PLATFORM_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_ChangeEPS
#if CC_Clear
case TPM_CC_Clear:
    *handleCount = 1;
    result = TPMI_RH_CLEAR_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_Clear
#if CC_ClearControl
case TPM_CC_ClearControl:
    *handleCount = 1;
    result = TPMI_RH_CLEAR_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_ClearControl
#if CC_HierarchyChangeAuth
case TPM_CC_HierarchyChangeAuth:
    *handleCount = 1;
    result = TPMI_RH_HIERARCHY_AUTH_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_HierarchyChangeAuth
#if CC_DictionaryAttackLockReset
case TPM_CC_DictionaryAttackLockReset:
    *handleCount = 1;
    result = TPMI_RH_LOCKOUT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_DictionaryAttackLockReset
#if CC_DictionaryAttackParameters
case TPM_CC_DictionaryAttackParameters:
    *handleCount = 1;
    result = TPMI_RH_LOCKOUT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_DictionaryAttackParameters
#if CC_PP_Commands
case TPM_CC_PP_Commands:
    *handleCount = 1;
    result = TPMI_RH_PLATFORM_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_PP_Commands
#if CC_SetAlgorithmSet
case TPM_CC_SetAlgorithmSet:
    *handleCount = 1;
    result = TPMI_RH_PLATFORM_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_SetAlgorithmSet
#if CC_FieldUpgradeStart
case TPM_CC_FieldUpgradeStart:
    *handleCount = 2;
    result = TPMI_RH_PLATFORM_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[1], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_2;
    break;
#endif // CC_FieldUpgradeStart
#if CC_FieldUpgradeData
case TPM_CC_FieldUpgradeData:
    break;
#endif // CC_FieldUpgradeData
#if CC_FirmwareRead
case TPM_CC_FirmwareRead:
    break;
#endif // CC_FirmwareRead
#if CC_ContextSave
case TPM_CC_ContextSave:
    *handleCount = 1;
    result = TPMI_DH_CONTEXT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_ContextSave
#if CC_ContextLoad
case TPM_CC_ContextLoad:
    break;
#endif // CC_ContextLoad
#if CC_FlushContext
case TPM_CC_FlushContext:
    break;
#endif // CC_FlushContext
#if CC_EvictControl
case TPM_CC_EvictControl:
    *handleCount = 2;
    result = TPMI_RH_PROVISION_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[1], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_2;
    break;
#endif // CC_EvictControl
#if CC_ReadClock
case TPM_CC_ReadClock:
    break;
#endif // CC_ReadClock
#if CC_ClockSet
case TPM_CC_ClockSet:
    *handleCount = 1;
    result = TPMI_RH_PROVISION_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_ClockSet
#if CC_ClockRateAdjust
case TPM_CC_ClockRateAdjust:
    *handleCount = 1;
    result = TPMI_RH_PROVISION_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_ClockRateAdjust
#if CC_GetCapability
case TPM_CC_GetCapability:
    break;
#endif // CC_GetCapability
#if CC_TestParms
case TPM_CC_TestParms:
    break;
#endif // CC_TestParms
#if CC_NV_DefineSpace
case TPM_CC_NV_DefineSpace:
    *handleCount = 1;
    result = TPMI_RH_PROVISION_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_NV_DefineSpace
#if CC_NV_UndefineSpace
case TPM_CC_NV_UndefineSpace:
    *handleCount = 2;
    result = TPMI_RH_PROVISION_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    result = TPMI_RH_NV_INDEX_Unmarshal(&handles[1], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_2;
    break;
#endif // CC_NV_UndefineSpace
#if CC_NV_UndefineSpaceSpecial
case TPM_CC_NV_UndefineSpaceSpecial:
    *handleCount = 2;
    result = TPMI_RH_NV_INDEX_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    result = TPMI_RH_PLATFORM_Unmarshal(&handles[1], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_2;
    break;
#endif // CC_NV_UndefineSpaceSpecial
#if CC_NV_ReadPublic
case TPM_CC_NV_ReadPublic:
    *handleCount = 1;
    result = TPMI_RH_NV_INDEX_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_NV_ReadPublic
#if CC_NV_Write
case TPM_CC_NV_Write:
    *handleCount = 2;
    result = TPMI_RH_NV_AUTH_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    result = TPMI_RH_NV_INDEX_Unmarshal(&handles[1], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_2;
    break;
#endif // CC_NV_Write
#if CC_NV_Increment
case TPM_CC_NV_Increment:
    *handleCount = 2;
    result = TPMI_RH_NV_AUTH_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    result = TPMI_RH_NV_INDEX_Unmarshal(&handles[1], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_2;
    break;
#endif // CC_NV_Increment
#if CC_NV_Extend
case TPM_CC_NV_Extend:
    *handleCount = 2;
    result = TPMI_RH_NV_AUTH_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    result = TPMI_RH_NV_INDEX_Unmarshal(&handles[1], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_2;
    break;
#endif // CC_NV_Extend
#if CC_NV_SetBits
case TPM_CC_NV_SetBits:
    *handleCount = 2;
    result = TPMI_RH_NV_AUTH_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    result = TPMI_RH_NV_INDEX_Unmarshal(&handles[1], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_2;
    break;
#endif // CC_NV_SetBits
#if CC_NV_WriteLock
case TPM_CC_NV_WriteLock:
    *handleCount = 2;
    result = TPMI_RH_NV_AUTH_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    result = TPMI_RH_NV_INDEX_Unmarshal(&handles[1], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_2;
    break;
#endif // CC_NV_WriteLock
#if CC_NV_GlobalWriteLock
case TPM_CC_NV_GlobalWriteLock:
    *handleCount = 1;
    result = TPMI_RH_PROVISION_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_NV_GlobalWriteLock
#if CC_NV_Read
case TPM_CC_NV_Read:
    *handleCount = 2;
    result = TPMI_RH_NV_AUTH_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    result = TPMI_RH_NV_INDEX_Unmarshal(&handles[1], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_2;
    break;
#endif // CC_NV_Read
#if CC_NV_ReadLock
case TPM_CC_NV_ReadLock:
    *handleCount = 2;
    result = TPMI_RH_NV_AUTH_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    result = TPMI_RH_NV_INDEX_Unmarshal(&handles[1], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_2;
    break;
#endif // CC_NV_ReadLock
#if CC_NV_ChangeAuth
case TPM_CC_NV_ChangeAuth:
    *handleCount = 1;
    result = TPMI_RH_NV_INDEX_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_NV_ChangeAuth
#if CC_NV_Certify
case TPM_CC_NV_Certify:
    *handleCount = 3;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, TRUE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    result = TPMI_RH_NV_AUTH_Unmarshal(&handles[1], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_2;
    result = TPMI_RH_NV_INDEX_Unmarshal(&handles[2], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_3;
    break;
#endif // CC_NV_Certify
#if CC_AC_GetCapability
case TPM_CC_AC_GetCapability:
    *handleCount = 1;
    result = TPMI_RH_AC_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_AC_GetCapability
#if CC_AC_Send
case TPM_CC_AC_Send:
    *handleCount = 3;
    result = TPMI_DH_OBJECT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize, FALSE);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    result = TPMI_RH_NV_AUTH_Unmarshal(&handles[1], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_2;
    result = TPMI_RH_AC_Unmarshal(&handles[2], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_3;
    break;
#endif // CC_AC_Send
#if CC_Policy_AC_SendSelect
case TPM_CC_Policy_AC_SendSelect:
    *handleCount = 1;
    result = TPMI_SH_POLICY_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_Policy_AC_SendSelect
#if CC_ACT_SetTimeout
case TPM_CC_ACT_SetTimeout:
    *handleCount = 1;
    result = TPMI_RH_ACT_Unmarshal(&handles[0], handleBufferStart,
                                              bufferRemainingSize);
    if(TPM_RC_SUCCESS != result) return result + TPM_RC_H + TPM_RC_1;
    break;
#endif // CC_ACT_SetTimeout
#if CC_Vendor_TCG_Test
case TPM_CC_Vendor_TCG_Test:
    break;
#endif // CC_Vendor_TCG_Test
