FsRtlQueryCachedVdl

NTSTATUS __stdcall FsRtlQueryCachedVdl(_FILE_OBJECT *FileObject, INT64 *Vdl){
  _DEVICE_OBJECT *RelatedDeviceObject; 
  PIRP v5; 
  IRP *v6; 
  __int64 v7; 
  NTSTATUS Status; 
  int *v9; 
  __int64 v10; 
  struct _KEVENT Event; 
  struct _IO_STATUS_BLOCK IoStatusBlock; 
  __m128i si128; 
  int v15; 
  memset(&Event, 0, sizeof(Event));
  IoStatusBlock = 0i64;
  KeInitializeEvent(&Event, NotificationEvent, 0);
  RelatedDeviceObject = IoGetRelatedDeviceObject(FileObject);
  v5 = IoBuildDeviceIoControlRequest(0x90284u, RelatedDeviceObject, 0i64, 0, 0i64, 0, 0, &Event, &IoStatusBlock);
  v6 = v5;
  if( !v5 )
    return -1073741670;
  si128 = _mm_load_si128((const __m128i *)&_xmm);
  v15 = 1;
  *((_QWORD *)v5 + 3) = &si128;
  v7 = *((_QWORD *)v5 + 23);
  *(_QWORD *)(v7 - 24) = FileObject;
  *(_BYTE *)(v7 - 72) = 13;
  *(_DWORD *)(v7 - 56) = 24;
  *(_DWORD *)(v7 - 64) = 64;
  Status = IofCallDriver(RelatedDeviceObject, v6);
  if( Status == 259 )
  {
    KeWaitForSingleObject(&Event, Executive, 0, 0, 0i64);
    Status = IoStatusBlock.Status;
  }
  if( (Status & 0xC0000000) != -1073741824 )
  {
    *Vdl = 0i64;
    if( si128.m128i_i32[2] )
    {
      v9 = &v15;
      v10 = si128.m128i_u32[2];
      do
      {
        if( (v9[4] & 1) != 0 )
          *Vdl = *(_QWORD *)v9 + *((_QWORD *)v9 + 1);
        v9 += 6;
        --v10;
      }
      while( v10 );
    }
  }
  return Status;
}

Referenced by:

No references.