MmGetFileNameForSection
INT64 __fastcall MmGetFileNameForSection(INT64 a1, OBJECT_NAME_INFORMATION **a2){
int v2;
unsigned int v3;
INT64 result;
OBJECT_NAME_INFORMATION *v7;
_CONTROL_AREA *v8;
_FILE_OBJECT *v9;
int v10;
int v11;
unsigned int v12;
OBJECT_NAME_INFORMATION *v13;
UINT64 ReturnLength;
v2 = *(_DWORD *)(a1 + 56);
v3 = 0;
LODWORD(ReturnLength) = 0;
*a2 = 0i64;
if( (v2 & 0x20) == 0 )
return 3221225545i64;
LODWORD(v7) = MiAllocatePool((struct _SLIST_ENTRY *)0x100);
*a2 = v7;
if( !v7 )
return 3221225495i64;
v8 = MiSectionControlArea((_SECTION *)a1);
v9 = MiReferenceControlAreaFile(v8);
v10 = ObQueryNameStringMode(v9, *a2, 0x400ui64, &ReturnLength, 0);
v11 = v10;
if( v10 >= 0 )
goto LABEL_11;
if( v10 == -1073741820 )
{
ExFreePoolWithTag(*a2, 0);
v12 = ReturnLength + 1024;
if( (unsigned int)ReturnLength >= 0xFFFFFC00 || (_DWORD)ReturnLength == 0 )
{
*a2 = 0i64;
MiDereferenceControlAreaFile((__int64)v8, (unsigned __int64)v9);
return 3221225495i64;
}
LODWORD(v13) = MiAllocatePool((struct _SLIST_ENTRY *)0x100);
*a2 = v13;
if( !v13 )
{
v3 = -1073741801;
LABEL_11:
MiDereferenceControlAreaFile((__int64)v8, (unsigned __int64)v9);
return v3;
}
v11 = ObQueryNameStringMode(v9, v13, v12, &ReturnLength, 0);
if( v11 >= 0 )
goto LABEL_11;
}
MiDereferenceControlAreaFile((__int64)v8, (unsigned __int64)v9);
ExFreePoolWithTag(*a2, 0);
result = (unsigned int)v11;
*a2 = 0i64;
return result;
}Referenced by:
DbgkpSectionToFileHandle