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