CmFcManagerQueryFeatureConfigurationSectionInformation
__int64 __fastcall CmFcManagerQueryFeatureConfigurationSectionInformation(
__int64 a1,
_LIST_ENTRY **a2,
_LIST_ENTRY **a3,
CHAR a4){
_ETHREAD *CurrentThread;
_LIST_ENTRY *v8;
_QWORD *v9;
NTSTATUS v10;
unsigned int v11;
__int64 v12;
VOID **v13;
unsigned int i;
__int128 *v15;
_LIST_ENTRY **v16;
__int64 v17;
VOID **v18;
PADAPTER_OBJECT *v19;
_KPROCESSOR_MODE AccessMode;
__int128 v22;
__int64 v23;
_QWORD v24[10];
v23 = 0i64;
v22 = 0i64;
memset(v24, 0i64, 0x48u);
CurrentThread = (_ETHREAD *)KeGetCurrentThread();
--CurrentThread->Tcb.KernelApcDisable;
ExAcquirePushLockSharedEx((_EX_PUSH_LOCK *)&CmpDummyThreadEvent + 137, 0i64);
v8 = (_LIST_ENTRY *)*(&CmpDummyThreadEvent + 139);
v9 = (_QWORD *)((char *)&CmpDummyThreadEvent + 1128);
v10 = 0;
v11 = 0;
v12 = 3i64;
do
{
if( (unsigned __int64)*a2 < *v9 )
CmFcpCopySectionState((__int64)&v24[3 * v11], (__int64)&CmpDummyThreadEvent + 24 * v11 + 1128);
++v11;
++a2;
v9 += 3;
}
while( v11 < 3 );
if( _InterlockedCompareExchange64((_QWORD *)&CmpDummyThreadEvent + 137, 0i64, 17i64) != 17 )
ExfReleasePushLockShared((_EX_PUSH_LOCK *)&CmpDummyThreadEvent + 137);
KeAbPostRelease((char *)&CmpDummyThreadEvent + 1096);
KeLeaveCriticalRegionThread(KeGetCurrentThread());
v13 = (VOID **)&v24[1];
for( i = 0; i < 3; ++i )
{
if( *v13 )
{
LOBYTE(AccessMode) = a4;
v10 = ObOpenObjectByPointer(
*v13,
a4 == 0 ? 0x200 : 0,
0i64,
4,
MmSectionObjectType,
AccessMode,
(VOID **)&v22 + i);
if( v10 < 0 )
goto LABEL_12;
v10 = 0;
}
v13 += 3;
}
memset(a3, 0i64, 0x50u);
*a3 = v8;
v15 = &v22;
v16 = a3 + 3;
v17 = 3i64;
do
{
*(v16 - 2) = *(_LIST_ENTRY **)((char *)v16 + (char *)v24 - (char *)a3 - 24);
*v16 = *(_LIST_ENTRY **)((char *)v16 + (char *)&v24[2] - (char *)a3 - 24);
v16 += 3;
*(v16 - 4) = *(_LIST_ENTRY **)v15;
*(_QWORD *)v15 = 0i64;
v15 = (__int128 *)((char *)v15 + 8);
--v17;
}
while( v17 );
LABEL_12:
v18 = (VOID **)&v22;
v19 = (PADAPTER_OBJECT *)&v24[1];
do
{
if( *v19 )
HalPutDmaAdapter(*v19);
if( *v18 )
ObCloseHandle(*v18, a4);
v19 += 3;
++v18;
--v12;
}
while( v12 );
return(unsigned int)v10;
}Referenced by:
CmQueryFeatureConfigurationSections