RawUserFsCtrl
INT64 __fastcall RawUserFsCtrl(INT64 a1, INT64 a2, INT64 a3){
int v3;
unsigned int FileSystemInformation;
_FILE_OBJECT *v5;
char v6;
int v10;
_FAST_MUTEX *v12;
int v13;
UINT64 v14;
UINT64 v15;
int v16;
BOOLEAN v17;
int v18;
int v19;
v3 = *(_DWORD *)(a2 + 24);
FileSystemInformation = 0;
v5 = *(_FILE_OBJECT **)(a2 + 48);
v6 = 0;
if( v3 == 589848 )
{
v15 = 3i64;
goto LABEL_23;
}
if( *(_DWORD *)(a2 + 24) == 589856 )
{
v15 = 1i64;
LABEL_23:
FsRtlNotifyVolumeEvent(v5, v15);
}
switch( v3 )
{
case 589824:
case 589828:
case 589836:
case 589844:
v17 = RawBeginOperation(a3, (INT64)v5);
if( v17 )
{
FileSystemInformation = -1073741822;
LABEL_35:
if( v17 )
RawEndOperation(a3, (INT64)v5);
goto LABEL_18;
}
LABEL_40:
FileSystemInformation = -1073741202;
goto LABEL_12;
case 589848:
v17 = RawBeginOperation(a3, (INT64)v5);
v18 = 0;
if( !v17 )
v18 = -1073741202;
FileSystemInformation = v18;
ExAcquireFastMutex((FAST_MUTEX *)(a3 + 224));
v19 = *(_DWORD *)(a3 + 104);
if( (v19 & 1) != 0 || *(_DWORD *)(a3 + 108) != 1 )
{
FileSystemInformation = -1073741790;
}
else
{
*(_QWORD *)(a3 + 208) = v5;
*(_DWORD *)(a3 + 104) = v19 | 1;
}
KeReleaseGuardedMutex((_FAST_MUTEX *)(a3 + 224));
goto LABEL_35;
case 589852:
v12 = (_FAST_MUTEX *)(a3 + 224);
ExAcquireFastMutex((FAST_MUTEX *)(a3 + 224));
v13 = *(_DWORD *)(a3 + 104);
if( (v13 & 1) != 0 )
{
*(_QWORD *)(a3 + 208) = 0i64;
*(_DWORD *)(a3 + 104) = v13 & 0xFFFFFFFE;
}
else
{
FileSystemInformation = -1073741782;
}
goto LABEL_17;
}
if( v3 != 589856 )
{
if( v3 != 590412 )
{
FileSystemInformation = -1073741811;
goto LABEL_12;
}
v17 = RawBeginOperation(a3, (INT64)v5);
if( v17 )
{
FileSystemInformation = RawQueryFileSystemInformation(a1, a2, a3);
goto LABEL_35;
}
goto LABEL_40;
}
v12 = (_FAST_MUTEX *)(a3 + 224);
ExAcquireFastMutex((FAST_MUTEX *)(a3 + 224));
v16 = *(_DWORD *)(a3 + 104);
if( (v16 & 2) != 0 )
{
FileSystemInformation = -1073741202;
}
else
{
v6 = 1;
*(_DWORD *)(a3 + 104) = v16 | 2;
}
KeReleaseGuardedMutex((_FAST_MUTEX *)(a3 + 224));
if( v6 )
{
ExWaitForRundownProtectionReleaseCacheAware(*(PEX_RUNDOWN_REF_CACHE_AWARE *)(a3 + 216));
ExAcquireFastMutex((FAST_MUTEX *)(a3 + 224));
*(_QWORD *)(a3 + 200) = v5;
LABEL_17:
KeReleaseGuardedMutex(v12);
}
LABEL_18:
if( (FileSystemInformation & 0x80000000) == 0 )
{
if( v3 != 589852 )
return FileSystemInformation;
v14 = 5i64;
LABEL_21:
FsRtlNotifyVolumeEvent(v5, v14);
return FileSystemInformation;
}
LABEL_12:
v10 = v3 - 589848;
if( !v10 )
{
v14 = 4i64;
goto LABEL_21;
}
if( v10 == 8 )
{
v14 = 2i64;
goto LABEL_21;
}
return FileSystemInformation;
}Referenced by:
RawFileSystemControl