IopFileUtilWalkDirectoryTreeTopDown

VOID __fastcall IopFileUtilWalkDirectoryTreeTopDown(
        _UNICODE_STRING *Directory,
        UINT64 Flags,
        INT64 a3,
        INT64 *CallbackFunction,
        _UNICODE_STRING *_4A0,
        _UNICODE_STRING *_4A8,
        UINT64 _4B0,
        VOID *_4B8,
        VOID *Context,
        INT64 a5,
        UINT64 a6,
        INT64 a7,
        INT64 a8){
  NTSTATUS v14; 
  INT64 **v15; 
  __int64 v16; 
  INT64 *v17; 
  INT64 v18; 
  INT64 v19; 
  INT64 v20[2]; 
  char FileInformation[1024]; 

  v20[1] = (INT64)v20;
  v20[0] = (INT64)v20;
  v14 = IopFileUtilWalkDirectoryTreeHelper(
          (INT64)Directory,
          13i64,
          (INT64)PiLastGoodRevertCopyCallback,
          (INT64)CallbackFunction,
          FileInformation,
          v18,
          (INT64)v20);
  while( 1 )
  {
    v15 = (INT64 **)v20[0];
    if( (INT64 *)v20[0] == v20 )
      break;
    if( v14 < 0 )
      goto LABEL_8;
    if( *(INT64 **)(v20[0] + 8) != v20 || (v16 = *(_QWORD *)v20[0], *(_QWORD *)(*(_QWORD *)v20[0] + 8i64) != v20[0]) )
LABEL_12:
      __fastfail(3u);
    v20[0] = *(_QWORD *)v20[0];
    *(_QWORD *)(v16 + 8) = v20;
    v14 = IopFileUtilWalkDirectoryTreeHelper(
            (INT64)(v15 + 2),
            13i64,
            (INT64)PiLastGoodRevertCopyCallback,
            (INT64)CallbackFunction,
            FileInformation,
            v19,
            (INT64)v20);
    ExFreePoolWithTag(v15, 0);
  }
  if( v14 < 0 )
  {
LABEL_8:
    while( v15 != (INT64 **)v20 )
    {
      if( v15[1] != v20 )
        goto LABEL_12;
      v17 = *v15;
      if( (INT64 **)(*v15)[1] != v15 )
        goto LABEL_12;
      v20[0] = (INT64)*v15;
      v17[1] = (INT64)v20;
      ExFreePoolWithTag(v15, 0);
      v15 = (INT64 **)v20[0];
    }
  }
}

Referenced by:

PiLastGoodRevertLastKnownDirectory