HdlspSetBlueScreenInformation
INT64 __fastcall HdlspSetBlueScreenInformation(UINT64 *a1, INT64 a2){
PKSPIN_LOCK v2;
unsigned int v5;
unsigned __int64 v6;
__int64 v7;
KSPIN_LOCK v8;
char **v9;
char *v10;
int v11;
int v12;
__int64 v13;
char *v14;
__int64 v15;
CHAR *PoolWithTag;
CHAR *v17;
PKSPIN_LOCK v18;
unsigned __int8 *v19;
KSPIN_LOCK v20;
char *v21;
CHAR *v22;
CHAR *v23;
PKSPIN_LOCK v24;
v2 = HeadlessGlobals;
if( (HeadlessGlobals[6] & 2) != 0 )
return 3221225473i64;
v5 = 0;
if( a1 )
{
v6 = *(unsigned int *)a1;
if( (unsigned int)v6 >= 2 )
{
v7 = (unsigned int)v6;
if( v6 < a2 - 8 && !*((_BYTE *)a1 + (unsigned int)(v6 - 1) + 4) && !*((_BYTE *)a1 + a2 - 4) )
{
v8 = HeadlessGlobals[5];
v9 = (char **)v8;
if( v8 )
{
do
{
v10 = *v9;
do
{
v11 = (unsigned __int8)v10[(char *)a1 + 4 - *v9];
v12 = (unsigned __int8)*v10 - v11;
if( v12 )
break;
++v10;
}
while( v11 );
if( !v12 )
break;
v8 = (KSPIN_LOCK)v9;
v9 = (char **)v9[2];
}
while( v9 );
}
v13 = -1i64;
v14 = (char *)a1 + v7;
v15 = -1i64;
do
++v15;
while( v14[v15 + 4] );
if( v9 )
{
if( v15 )
{
PoolWithTag = (CHAR *)ExAllocatePoolWithTag(NonPagedPoolNx, v15 + 1, 0x736C6448ui64);
v17 = PoolWithTag;
if( PoolWithTag )
{
strcpy_s(PoolWithTag, v15 + 1, v14 + 4);
v18 = HeadlessGlobals;
v19 = (unsigned __int8 *)v9[1];
v9[1] = v17;
if( (v18[6] & 2) == 0 )
goto LABEL_40;
}
else
{
return(unsigned int)-1073741801;
}
return v5;
}
v20 = (KSPIN_LOCK)v9[2];
*(_QWORD *)(v8 + 16) = v20;
if( (char **)v2[5] == v9 )
v2[5] = v20;
if( (v2[6] & 2) != 0 )
return v5;
ExFreePoolWithTag(v9[1], 0);
v21 = *v9;
}
else
{
if( !v15 )
return(unsigned int)-1073741811;
v9 = (char **)ExAllocatePoolWithTag(NonPagedPoolNx, 0x18ui64, 0x736C6448ui64);
if( !v9 )
return v5;
v22 = (CHAR *)ExAllocatePoolWithTag(NonPagedPoolNx, v15 + 1, 0x736C6448ui64);
v9[1] = v22;
if( !v22 )
{
v5 = -1073741801;
goto LABEL_39;
}
strcpy_s(v22, v15 + 1, v14 + 4);
do
++v13;
while( *((_BYTE *)a1 + v13 + 4) );
if( v13 )
{
v23 = (CHAR *)ExAllocatePoolWithTag(NonPagedPoolNx, v13 + 1, 0x736C6448ui64);
*v9 = v23;
if( v23 )
{
strcpy_s(v23, v13 + 1, (PSTR)a1 + 4);
v24 = HeadlessGlobals;
v9[2] = (char *)HeadlessGlobals[5];
v24[5] = (KSPIN_LOCK)v9;
return v5;
}
v5 = -1073741801;
}
else
{
v5 = -1073741811;
}
v21 = v9[1];
}
ExFreePoolWithTag(v21, 0);
LABEL_39:
v19 = (unsigned __int8 *)v9;
LABEL_40:
ExFreePoolWithTag(v19, 0);
return v5;
}
}
}
return 3221225485i64;
}Referenced by:
HdlspDispatch