PspInitializeFullProcessImageName
NTSTATUS __stdcall PspInitializeFullProcessImageName(PSP_CREATE_PROCESS_CONTEXT *CreateContext, _EPROCESS *Process){
_OBJECT_NAME_INFORMATION *v4;
_FILE_OBJECT *v5;
NTSTATUS v6;
int v7;
VOID **v8;
VOID **PoolWithTag;
VOID **v11;
_SECTION *SectionObject;
_CONTROL_AREA *v13;
UINT64 ReturnLength;
_UNICODE_STRING ProcessName;
VOID *Src[34];
memset(Src, 0i64, sizeof(Src));
v4 = 0i64;
if( (Process->Flags3 & 1) != 0 )
goto LABEL_17;
if( CreateContext )
{
v5 = (_FILE_OBJECT *)*((_QWORD *)CreateContext + 22);
}
else
{
SectionObject = (_SECTION *)Process->SectionObject;
if( !SectionObject )
{
v7 = -1073741637;
goto LABEL_11;
}
v13 = MiSectionControlArea(SectionObject);
v5 = MiReferenceControlAreaFile(v13);
}
ProcessName = v5->FileName;
PspSetProcessShortName(Process, &ProcessName);
LODWORD(ReturnLength) = 272;
v6 = ObQueryNameStringMode(v5, (_OBJECT_NAME_INFORMATION *)Src, 0x110ui64, &ReturnLength, 0);
v7 = v6;
if( v6 == -2147483643 || v6 == -1073741789 || v6 == -1073741820 )
{
if( (unsigned int)ReturnLength <= 0x110 )
goto LABEL_17;
PoolWithTag = ExAllocatePoolWithTag(0x200ui64, (unsigned int)ReturnLength, 1850307408i64);
v4 = (_OBJECT_NAME_INFORMATION *)PoolWithTag;
if( !PoolWithTag )
goto LABEL_17;
v7 = ObQueryNameStringMode(
v5,
(_OBJECT_NAME_INFORMATION *)PoolWithTag,
(unsigned int)ReturnLength,
&ReturnLength,
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)(ReturnLength - 17) <= 0xFF )
{
v8 = ExAllocatePoolWithTag(0x200ui64, (unsigned int)ReturnLength, 1850307408i64);
v4 = (_OBJECT_NAME_INFORMATION *)v8;
if( v8 )
{
*(_OWORD *)v8 = *(_OWORD *)Src;
v8[1] = v8 + 2;
memmove(v8 + 2, Src[1], WORD1(Src[0]));
goto LABEL_11;
}
}
LABEL_17:
LODWORD(ReturnLength) = 16;
v11 = ExAllocatePoolWithTag(0x200ui64, 0x10ui64, 1850307408i64);
v4 = (_OBJECT_NAME_INFORMATION *)v11;
if( v11 )
{
memset(v11, 0i64, ReturnLength);
v7 = 0;
}
else
{
v7 = -1073741801;
}
LABEL_12:
Process->SeAuditProcessCreationInfo.ImageFileName = v4;
return v7;
}Referenced by:
PspAllocateProcess