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