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