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