MmGetFileNameForSection
NTSTATUS __stdcall MmGetFileNameForSection(_SECTION *SectionObject, _OBJECT_NAME_INFORMATION **FileNameInfo){
union {unsigned int LongFlags;_MMSECTION_FLAGS Flags;} v2;
NTSTATUS v3;
NTSTATUS result;
_OBJECT_NAME_INFORMATION *Pool;
_CONTROL_AREA *v8;
_FILE_OBJECT *v9;
NTSTATUS v10;
int v11;
unsigned int v12;
_OBJECT_NAME_INFORMATION *v13;
UINT64 ReturnLength;
v2.LongFlags = (unsigned int)SectionObject->u;
v3 = 0;
LODWORD(ReturnLength) = 0;
*FileNameInfo = 0i64;
if( (v2.LongFlags & 0x20) == 0 )
return -1073741751;
Pool = (_OBJECT_NAME_INFORMATION *)MiAllocatePool(256i64, 0x400ui64, 0x20206D4Dui64);
*FileNameInfo = Pool;
if( !Pool )
return -1073741801;
v8 = MiSectionControlArea(SectionObject);
v9 = MiReferenceControlAreaFile(v8);
v10 = ObQueryNameStringMode(v9, *FileNameInfo, 0x400ui64, &ReturnLength, 0);
v11 = v10;
if( v10 >= 0 )
goto LABEL_11;
if( v10 == -1073741820 )
{
ExFreePoolWithTag(*FileNameInfo, 0);
v12 = ReturnLength + 1024;
if( (unsigned int)ReturnLength >= 0xFFFFFC00 || (_DWORD)ReturnLength == 0 )
{
*FileNameInfo = 0i64;
MiDereferenceControlAreaFile(v8, v9);
return -1073741801;
}
v13 = (_OBJECT_NAME_INFORMATION *)MiAllocatePool(256i64, v12, 0x20206D4Dui64);
*FileNameInfo = v13;
if( !v13 )
{
v3 = -1073741801;
LABEL_11:
MiDereferenceControlAreaFile(v8, v9);
return v3;
}
v11 = ObQueryNameStringMode(v9, v13, v12, &ReturnLength, 0);
if( v11 >= 0 )
goto LABEL_11;
}
MiDereferenceControlAreaFile(v8, v9);
ExFreePoolWithTag(*FileNameInfo, 0);
result = v11;
*FileNameInfo = 0i64;
return result;
}Referenced by:
DbgkpSectionToFileHandle