PiDevCfgSplitDriverConfigurationId

INT64 __stdcall PiDevCfgSplitDriverConfigurationId(VOID *Src, PLARGE_INTEGER Time, INT64 a3){
  unsigned int v4; 
  WCHAR *v6; 
  WCHAR *v7; 
  unsigned __int64 v8; 
  unsigned __int64 v9; 
  UINT64 v10; 
  UINT8 *StringRoutine; 
  WCHAR *v12; 
  WCHAR *v13; 
  WCHAR *v14; 
  __int64 v15; 
  __int64 v16; 
  UINT8 *v17; 
  WCHAR *v18; 
  unsigned __int64 v19; 
  struct _TIME_FIELDS TimeFields; 
  wchar_t Srca[12]; 
  LARGE_INTEGER *Timea; 
  _QWORD *v24; 
  v4 = 0;
  TimeFields = 0i64;
  v6 = wcschr((WCHAR *)Src, 0x3Au);
  v7 = v6;
  if( !v6 )
    return(unsigned int)-1073741823;
  if( Time )
  {
    v8 = 2 * (unsigned int)(((char *)v6 - (_BYTE *)Src) >> 1);
    v9 = v8;
    if( v8 + 2 > 0xFFFE )
      return(unsigned int)-1073741562;
    LOWORD(Time->LowPart) = v8;
    v10 = (unsigned __int16)(v8 + 2);
    HIWORD(Time->u.LowPart) = v10;
    StringRoutine = (UINT8 *)ExpAllocateStringRoutine(v10);
    Time[1].QuadPart = (LONGLONG)StringRoutine;
    if( !StringRoutine )
      return(unsigned int)-1073741670;
    memmove(StringRoutine, (UINT8 *)Src, 2 * (unsigned int)(((char *)v7 - (_BYTE *)Src) >> 1));
    *(_WORD *)(Time[1].QuadPart + 2 * (v9 >> 1)) = 0;
  }
  v12 = wcschr(v7 + 1, 0x2Cu);
  if( !v12 )
    return(unsigned int)-1073741823;
  v13 = v12 + 1;
  v14 = wcschr(v12 + 1, 0x2Cu);
  v15 = -1i64;
  if( !v14 )
  {
    v16 = -1i64;
    do
      ++v16;
    while( v13[v16] );
    v14 = &v13[v16];
  }
  if( *v14 )
  {
    if( Timea || v24 )
    {
      v17 = (UINT8 *)(v14 + 1);
      v18 = wcschr(v14 + 1, 0x2Cu);
      if( !v18 )
      {
        do
          ++v15;
        while( *(_WORD *)&v17[2 * v15] );
        v18 = (WCHAR *)&v17[2 * v15];
      }
      if( Timea )
      {
        v19 = (unsigned int)(((char *)v18 - (char *)v17) >> 1);
        if( v19 * 2 + 2 > 0x16 )
          return(unsigned int)-1073741823;
        memmove((UINT8 *)Srca, v17, (unsigned int)(v19 * 2));
        if( v19 >= 11 )
          _report_rangecheckfailure();
        Srca[v19] = 0;
        if( swscanf_s(Srca, (PWCHAR)L"%hu/%hu/%hu") != 3 || !RtlTimeFieldsToTime(&TimeFields, Timea) )
          return(unsigned int)-1073741823;
      }
      if( !v24 )
        return v4;
      if( *v18 )
      {
        if( swscanf_s(v18 + 1, (PWCHAR)L"%hu.%hu.%hu.%hu") == 4 )
          return v4;
        return(unsigned int)-1073741823;
      }
LABEL_33:
      *v24 = 0i64;
    }
  }
  else
  {
    if( Timea )
      Timea->QuadPart = 0i64;
    if( v24 )
      goto LABEL_33;
  }
  return v4;
}

Referenced by:

PiDevCfgCheckDeviceNeedsUpdate