PspInitializeFullProcessImageName
INT64 __fastcall PspInitializeFullProcessImageName(INT64 a1, INT64 a2){
OBJECT_NAME_INFORMATION *v4;
_FILE_OBJECT *v5;
int v6;
int v7;
UINT8 *v8;
OBJECT_NAME_INFORMATION *PoolWithTag;
OBJECT_NAME_INFORMATION *v11;
_SECTION *v12;
_CONTROL_AREA *v13;
SIZE_T NumberOfBytes;
__int128 FileName;
OBJECT_NAME_INFORMATION Src;
memset((INT64)&Src, 0i64);
v4 = 0i64;
if( (*(_DWORD *)(a2 + 2172) & 1) != 0 )
goto LABEL_17;
if( a1 )
{
v5 = *(_FILE_OBJECT **)(a1 + 176);
}
else
{
v12 = *(_SECTION **)(a2 + 1304);
if( !v12 )
{
v7 = -1073741637;
goto LABEL_11;
}
v13 = MiSectionControlArea(v12);
v5 = MiReferenceControlAreaFile(v13);
}
FileName = (__int128)v5->FileName;
PspSetProcessShortName(a2, (unsigned __int16 *)&FileName);
LODWORD(NumberOfBytes) = 272;
v6 = ObQueryNameStringMode(v5, &Src, 0x110ui64, &NumberOfBytes, 0);
v7 = v6;
if( v6 == -2147483643 || v6 == -1073741789 || v6 == -1073741820 )
{
if( (unsigned int)NumberOfBytes <= 0x110 )
goto LABEL_17;
PoolWithTag = (OBJECT_NAME_INFORMATION *)ExAllocatePoolWithTag(
NonPagedPoolNx,
(unsigned int)NumberOfBytes,
0x6E497350ui64);
v4 = PoolWithTag;
if( !PoolWithTag )
goto LABEL_17;
v7 = ObQueryNameStringMode(v5, PoolWithTag, (unsigned int)NumberOfBytes, &NumberOfBytes, 0);
if( v7 >= 0 )
goto LABEL_12;
ExFreePoolWithTag(v4, 0);
LABEL_11:
if( v7 >= 0 )
goto LABEL_12;
goto LABEL_17;
}
if( v6 >= 0 && (unsigned int)(NumberOfBytes - 17) <= 0xFF )
{
v8 = (UINT8 *)ExAllocatePoolWithTag(NonPagedPoolNx, (unsigned int)NumberOfBytes, 0x6E497350ui64);
v4 = (OBJECT_NAME_INFORMATION *)v8;
if( v8 )
{
*(OBJECT_NAME_INFORMATION *)v8 = Src;
*((_QWORD *)v8 + 1) = v8 + 16;
memmove(v8 + 16, (UINT8 *)Src.Name.Buffer, Src.Name.MaximumLength);
goto LABEL_11;
}
}
LABEL_17:
LODWORD(NumberOfBytes) = 16;
v11 = (OBJECT_NAME_INFORMATION *)ExAllocatePoolWithTag(NonPagedPoolNx, 0x10ui64, 0x6E497350ui64);
v4 = v11;
if( v11 )
{
memset((INT64)v11, 0i64);
v7 = 0;
}
else
{
v7 = -1073741801;
}
LABEL_12:
*(_QWORD *)(a2 + 1472) = v4;
return(unsigned int)v7;
}Referenced by:
PspAllocateProcess