CmGetMatchingCommonClassList

NTSTATUS __stdcall CmGetMatchingCommonClassList(
        HPNPCTX *hPnpCtx,
        _CM_OBJECT_TYPE CmObjectType,
        UINT8 *MatchCallbackRoutine,
        HPNPCTX *a4,
        const WCHAR *a5,
        _CM_OBJECT_TYPE a6,
        VOID *a7,
        VOID *MatchCallbackContext,
        WCHAR *Buffer,
        INT64 BufferLength,
        UINT64 *RequiredLength,
        UINT64 Flags){
  __int64(__fastcall *v16)(HPNPCTX *, _QWORD, _QWORD, __int64, int, WCHAR **); 
  int v17; 
  NTSTATUS MatchingCommonClassListWorker; 
  NTSTATUS v19; 
  int v21; 
  int v22; 
  NTSTATUS v23; 
  VOID *v24; 
  WCHAR *v25[12]; 

  memset(v25, 0i64, 0x58u);
  v16 = (__int64(__fastcall *)(HPNPCTX *, _QWORD, _QWORD, __int64, int, WCHAR **))*((_QWORD *)hPnpCtx + 63);
  LODWORD(v25[5]) = a6;
  v25[2] = (WCHAR *)MatchCallbackRoutine;
  v25[3] = (WCHAR *)a4;
  v25[6] = (WCHAR *)a7;
  LODWORD(v25[7]) = (_DWORD)MatchCallbackContext;
  v25[4] = (WCHAR *)a5;
  if( v16 )
  {
    v17 = v16(hPnpCtx, 0i64, (unsigned int)CmObjectType, 4i64, 1, v25);
    if( v17 == -1073741822 )
    {
      v16 = 0i64;
    }
    else
    {
      if( v17 == -1073741536 )
        return(NTSTATUS)v25[0];
      if( v17 )
        return -1073741595;
    }
  }
  MatchingCommonClassListWorker = CmGetMatchingCommonClassListWorker(
                                    hPnpCtx,
                                    CmObjectType,
                                    (UINT8 *)v25[2],
                                    (HPNPCTX *)v25[3],
                                    v25[4],
                                    (_CM_OBJECT_TYPE)v25[5],
                                    v25[6],
                                    v24,
                                    v25[0],
                                    (INT64)v25[1],
                                    (UINT64 *)v25[2],
                                    (UINT64)v25[3]);
  v19 = MatchingCommonClassListWorker;
  if( !v16 )
    return v19;
  LODWORD(v25[0]) = MatchingCommonClassListWorker;
  v21 = v16(hPnpCtx, 0i64, (unsigned int)CmObjectType, 4i64, 2, v25);
  v22 = v21;
  if( v21 == -1073741822 )
    return v19;
  if( v21 == -1073741536 )
    return(NTSTATUS)v25[0];
  v23 = v19;
  if( v22 )
    return -1073741595;
  return v23;
}

Referenced by:

PnpDispatchInstallerClass
PnpDispatchInterfaceClass