InboxCryptSIPVerifyIndirectData
BOOL __stdcall InboxCryptSIPVerifyIndirectData(SIP_SUBJECTINFO *pSubjectInfo, SIP_INDIRECT_DATA *pIndirectData)
{
struct SIPObject_ *SubjectObject; // ebx
struct MS_ADDINFO_FLAT_ *psFlat; // eax
_DWORD *cbStruct; // eax
DWORD dwIntVersion; // eax
int v6; // edi
const struct _GUID *v8; // [esp+0h] [ebp-10h]
DWORD pdwPolicyFlags; // [esp+Ch] [ebp-4h] BYREF
if ( pSubjectInfo && pSubjectInfo->cbSize >= 0x34 )
{
SubjectObject = mssip_CreateSubjectObject(v8);
if ( SubjectObject )
{
if ( pSubjectInfo->cbSize >= 0x4C && pSubjectInfo->dwUnionChoice == 2 )
{
psFlat = pSubjectInfo->psFlat;
if ( psFlat )
{
if ( psFlat->cbStruct == 12 )
{
cbStruct = (_DWORD *)psFlat[1].cbStruct;
if ( cbStruct )
{
if ( *cbStruct == 64 )
pSubjectInfo->dwIntVersion = cbStruct[9];
}
}
}
}
dwIntVersion = pSubjectInfo->dwIntVersion;
*((_DWORD *)SubjectObject + 10) = dwIntVersion;
if ( dwIntVersion < 0x100 )
{
*((_DWORD *)SubjectObject + 10) = 512;
LABEL_13:
v6 = (*(int (__thiscall **)(struct SIPObject_ *, SIP_SUBJECTINFO *, SIP_INDIRECT_DATA *))(*(_DWORD *)SubjectObject
+ 28))(
SubjectObject,
pSubjectInfo,
pIndirectData);
(**(void (__thiscall ***)(struct SIPObject_ *, int))SubjectObject)(SubjectObject, 1);
return v6;
}
if ( dwIntVersion >= 0x200 )
goto LABEL_13;
WintrustGetRegPolicyFlags(&pdwPolicyFlags);
if ( (pdwPolicyFlags & 0x10000) == 0 )
goto LABEL_13;
(**(void (__thiscall ***)(struct SIPObject_ *, int))SubjectObject)(SubjectObject, 1);
SetLastError(0x80092026);
}
}
else
{
SetLastError(0x57u);
}
return 0;
}
int __stdcall DbgUiContinue(int a1, int a2)
{
return ZwDebugContinue((int)NtCurrentTeb()->DbgSsReserved[1], a1, a2);
}