FsFilterGetCallbacks
VOID __stdcall FsFilterGetCallbacks(
UINT8 Operation,
PDEVICE_OBJECT DeviceObject,
PFS_FILTER_CALLBACK *PreOperationCallback,
PFS_FILTER_COMPLETION_CALLBACK *PostOperationCallback){
__int64 v4;
unsigned int v5;
NTSTATUS(__stdcall *v6)(PFS_FILTER_CALLBACK_DATA, PVOID *);
void(__stdcall *v7)(PFS_FILTER_CALLBACK_DATA, NTSTATUS, PVOID);
unsigned int v8;
NTSTATUS(__stdcall *v9)(PFS_FILTER_CALLBACK_DATA, PVOID *);
void(__stdcall *v10)(PFS_FILTER_CALLBACK_DATA, NTSTATUS, PVOID);
unsigned int v11;
NTSTATUS(__stdcall *v12)(PFS_FILTER_CALLBACK_DATA, PVOID *);
void(__stdcall *v13)(PFS_FILTER_CALLBACK_DATA, NTSTATUS, PVOID);
unsigned int v14;
NTSTATUS(__stdcall *v15)(PFS_FILTER_CALLBACK_DATA, PVOID *);
void(__stdcall *v16)(PFS_FILTER_CALLBACK_DATA, NTSTATUS, PVOID);
unsigned int v17;
NTSTATUS(__stdcall *v18)(PFS_FILTER_CALLBACK_DATA, PVOID *);
void(__stdcall *v19)(PFS_FILTER_CALLBACK_DATA, NTSTATUS, PVOID);
unsigned int v20;
NTSTATUS(__stdcall *v21)(PFS_FILTER_CALLBACK_DATA, PVOID *);
void(__stdcall *v22)(PFS_FILTER_CALLBACK_DATA, NTSTATUS, PVOID);
unsigned int v23;
NTSTATUS(__stdcall *v24)(PFS_FILTER_CALLBACK_DATA, PVOID *);
void(__stdcall *v25)(PFS_FILTER_CALLBACK_DATA, NTSTATUS, PVOID);
*PreOperationCallback = 0i64;
*PostOperationCallback = 0i64;
v4 = *(_QWORD *)(*(_QWORD *)(*((_QWORD *)DeviceObject + 1) + 48i64) + 48i64);
if( v4 )
{
switch( Operation )
{
case 0xFFu:
v8 = *(_DWORD *)v4;
if( *(_DWORD *)v4 >= 0x10u )
{
v9 = *(NTSTATUS(__stdcall **)(PFS_FILTER_CALLBACK_DATA, PVOID *))(v4 + 8);
if( v9 )
*PreOperationCallback = v9;
}
if( v8 >= 0x18 )
{
v10 = *PostOperationCallback;
if( *(_QWORD *)(v4 + 16) )
v10 = *(void(__stdcall **)(PFS_FILTER_CALLBACK_DATA, NTSTATUS, PVOID))(v4 + 16);
*PostOperationCallback = v10;
}
break;
case 0xFEu:
v5 = *(_DWORD *)v4;
if( *(_DWORD *)v4 >= 0x20u )
{
v6 = *PreOperationCallback;
if( *(_QWORD *)(v4 + 24) )
v6 = *(NTSTATUS(__stdcall **)(PFS_FILTER_CALLBACK_DATA, PVOID *))(v4 + 24);
*PreOperationCallback = v6;
}
if( v5 >= 0x28 )
{
v7 = *(void(__stdcall **)(PFS_FILTER_CALLBACK_DATA, NTSTATUS, PVOID))(v4 + 32);
if( v7 )
*PostOperationCallback = v7;
}
break;
case 0xF9u:
v23 = *(_DWORD *)v4;
if( *(_DWORD *)v4 >= 0x70u )
{
v24 = *(NTSTATUS(__stdcall **)(PFS_FILTER_CALLBACK_DATA, PVOID *))(v4 + 104);
if( v24 )
*PreOperationCallback = v24;
}
if( v23 >= 0x78 )
{
v25 = *(void(__stdcall **)(PFS_FILTER_CALLBACK_DATA, NTSTATUS, PVOID))(v4 + 112);
if( v25 )
*PostOperationCallback = v25;
}
break;
case 0xFAu:
v17 = *(_DWORD *)v4;
if( *(_DWORD *)v4 >= 0x40u )
{
v18 = *PreOperationCallback;
if( *(_QWORD *)(v4 + 56) )
v18 = *(NTSTATUS(__stdcall **)(PFS_FILTER_CALLBACK_DATA, PVOID *))(v4 + 56);
*PreOperationCallback = v18;
}
if( v17 >= 0x48 )
{
v19 = *(void(__stdcall **)(PFS_FILTER_CALLBACK_DATA, NTSTATUS, PVOID))(v4 + 64);
if( v19 )
*PostOperationCallback = v19;
}
break;
case 0xFBu:
v14 = *(_DWORD *)v4;
if( *(_DWORD *)v4 >= 0x30u )
{
v15 = *PreOperationCallback;
if( *(_QWORD *)(v4 + 40) )
v15 = *(NTSTATUS(__stdcall **)(PFS_FILTER_CALLBACK_DATA, PVOID *))(v4 + 40);
*PreOperationCallback = v15;
}
if( v14 >= 0x38 )
{
v16 = *(void(__stdcall **)(PFS_FILTER_CALLBACK_DATA, NTSTATUS, PVOID))(v4 + 48);
if( v16 )
*PostOperationCallback = v16;
}
break;
case 0xFCu:
v20 = *(_DWORD *)v4;
if( *(_DWORD *)v4 >= 0x60u )
{
v21 = *PreOperationCallback;
if( *(_QWORD *)(v4 + 88) )
v21 = *(NTSTATUS(__stdcall **)(PFS_FILTER_CALLBACK_DATA, PVOID *))(v4 + 88);
*PreOperationCallback = v21;
}
if( v20 >= 0x68 )
{
v22 = *(void(__stdcall **)(PFS_FILTER_CALLBACK_DATA, NTSTATUS, PVOID))(v4 + 96);
if( v22 )
*PostOperationCallback = v22;
}
break;
case 0xFDu:
v11 = *(_DWORD *)v4;
if( *(_DWORD *)v4 >= 0x50u )
{
v12 = *PreOperationCallback;
if( *(_QWORD *)(v4 + 72) )
v12 = *(NTSTATUS(__stdcall **)(PFS_FILTER_CALLBACK_DATA, PVOID *))(v4 + 72);
*PreOperationCallback = v12;
}
if( v11 >= 0x58 )
{
v13 = *(void(__stdcall **)(PFS_FILTER_CALLBACK_DATA, NTSTATUS, PVOID))(v4 + 80);
if( v13 )
*PostOperationCallback = v13;
}
break;
}
}
}Referenced by:
FsFilterPerformCallbacks