IDebugBreakpointChecksumRequest2::GetChecksumIDebugBreakpointChecksumRequest2::GetChecksum

Récupère la somme de contrôle du document pour une demande de point d’arrêt étant donnée l’identificateur unique de l’algorithme de somme de contrôle à utiliser.Retrieves the document checksum for a breakpoint request given the unique identifier of the checksum algorithm to use.

SyntaxeSyntax

HRESULT GetChecksum(   
   REFGUID        guidAlgorithm,  
   CHECKSUM_DATA *pChecksumData  
);  
public int GetChecksum(   
   ref Guid               guidAlgorithm,  
   out enum_CHECKSUM_DATA pChecksumData  
);  

ParamètresParameters

guidAlgorithm
[in] Identificateur unique de l’algorithme de somme de contrôle.[in] Unique identifier of the checksum algorithm.

pChecksumData
[out] Somme de contrôle de document pour la demande de point d’arrêt.[out] Document checksum for the breakpoint request.

Valeur de retourReturn Value

En cas de réussite, retourne S_OK; sinon, retourne un code d’erreur.If successful, returns S_OK; otherwise, returns an error code.

ExempleExample

L’exemple suivant illustre une fonction qui vérifie si la somme de contrôle d’un document, qui est sur le point d’être lié, correspond à un de l’interface utilisateur.The following example shows a function that checks whether the checksum of a document, which is about to be bound, matches one from the UI.

bool CDebugProgram::DoChecksumsMatch(CDebugPendingBreakpoint *pPending, CDebugCodeContext *pContext)  
{  
    bool fRet = false;  
    HRESULT hRes;  

    // Get the checksum for the document we are about to bind to from the pdb side  
    GUID guidAlgorithmId;  
    BYTE *pChecksum = NULL;  
    ULONG cNumBytes = 0;  

    hRes = pContext->GetDocumentChecksumAndAlgorithmId(&guidAlgorithmId, &pChecksum, &cNumBytes);  

    if ( S_OK == hRes )  
    {  
        // Get checksum data for the document from the UI (request) side  
        CComPtr<IDebugBreakpointChecksumRequest2> pChecksumRequest;  

        hRes = pPending->GetChecksumRequest(&pChecksumRequest);  

        if ( S_OK == hRes )  
        {  
            CHECKSUM_DATA data;  

            hRes = pChecksumRequest->GetChecksum(guidAlgorithmId, &data);  

            if ( S_OK == hRes )  
            {  
                if ( data.ByteCount == cNumBytes && memcmp(data.pBytes, pChecksum, cNumBytes) == 0 )  
                    fRet = true;  
                else  
                    fRet = false;  

                // Free up data allocated for checksum data  
                CoTaskMemFree(data.pBytes);  
            }  
            else  
                fRet = true; // checksums not available - user disabed checksums  
        }  
        else  
            fRet = true; // we couldn't get checksum from UI - default to past behavior  

        // free up space allocated for checksum from pdb  
        CoTaskMemFree(pChecksum);  
    }  
    else  
        fRet = true; // we don't have a checksum to compare with.  

    return ( fRet );  
}  

Voir aussiSee Also

IDebugBreakpointChecksumRequest2IDebugBreakpointChecksumRequest2