VrpShouldOperateOnCall

NTSTATUS __fastcall VrpShouldOperateOnCall(int a1, _QWORD *a2, _QWORD *a3, _VRP_JOB_CONTEXT **a4){
  _VRP_JOB_CONTEXT **v4; 
  __int64 v7; 
  int v8; 
  __int64 v9; 
  NTSTATUS result; 
  _QWORD *v11; 
  _QWORD *v12; 
  _QWORD *v13; 
  int v14; 
  int v15; 
  _VRP_JOB_CONTEXT *v16; 
  __int64 v17; 
  __int64 v18; 
  __int64 v19; 
  _VRP_JOB_CONTEXT *JobContext; 

  v4 = 0i64;
  v18 = 0i64;
  v19 = 0i64;
  JobContext = 0i64;
  VrpGetContextsForNotifyInfo(a1, a2, &v18, &v19);
  v9 = v18;
  if( v18 )
  {
    *a3 = v18;
    *a4 = *(_VRP_JOB_CONTEXT **)(v9 + 40);
    return 1;
  }
  if( v19 )
  {
    v16 = *(_VRP_JOB_CONTEXT **)(v19 + 8);
    *a3 = 0i64;
    *a4 = v16;
    return 1;
  }
  if( v8 == 32 )
  {
    result = VRegEnabledInJob(&JobContext);
    if( result )
    {
      *a4 = JobContext;
      goto LABEL_6;
    }
LABEL_5:
    *a4 = 0i64;
    result = 0;
LABEL_6:
    *a3 = 0i64;
    return result;
  }
  if( ((v8 - 27) & 0xFFFFFFFD) != 0 )
    goto LABEL_5;
  v11 = 0i64;
  v12 = *(_QWORD **)(*(_QWORD *)(v7 + 8) + 16i64);
  v13 = (_QWORD *)*v12;
  if( (_QWORD *)*v12 == v12 )
  {
LABEL_8:
    v14 = -1073741772;
  }
  else
  {
    while( 1 )
    {
      v17 = v13[2] - VRP_ORIGINAL_KEY_NAME_PARAMETER_GUID;
      if( !v17 )
        v17 = v13[3] - *((_QWORD *)&VRP_ORIGINAL_KEY_NAME_PARAMETER_GUID + 1);
      if( !v17 )
        break;
      v13 = (_QWORD *)*v13;
      if( v13 == v12 )
        goto LABEL_8;
    }
    v11 = v13;
    v14 = 0;
  }
  v15 = v14;
  if( v14 >= 0 )
    v15 = 0;
  if( v15 < 0 )
    goto LABEL_5;
  *a3 = 0i64;
  result = 1;
  if( v14 >= 0 )
    v4 = (_VRP_JOB_CONTEXT **)(v11 + 6);
  *a4 = *v4;
  return result;
}

Referenced by:

VrpRegistryCallback