RawReadWriteDeviceControl

NTSTATUS __stdcall RawReadWriteDeviceControl(PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader, INT64 Irp, PSTR a3){
  BOOLEAN v6; 
  CHAR v7; 
  NTSTATUS v8; 
  __int64 v9; 
  __int64 v10; 
  v6 = RawBeginOperation((INT64)AdvancedHeader, *((_QWORD *)a3 + 6));
  v7 = *a3;
  v8 = 0;
  if( v6 )
  {
    if( (unsigned __int8)(v7 - 3) > 1u || *((_DWORD *)a3 + 2) )
    {
      v9 = *(_QWORD *)(Irp + 184);
      *(_OWORD *)(v9 - 72) = *(_OWORD *)a3;
      *(_OWORD *)(v9 - 56) = *((_OWORD *)a3 + 1);
      *(_OWORD *)(v9 - 40) = *((_OWORD *)a3 + 2);
      *(_OWORD *)(v9 - 24) = *((_OWORD *)a3 + 3);
      *(_QWORD *)(v9 - 8) = *((_QWORD *)a3 + 8);
      *(_BYTE *)(v9 - 70) |= 2u;
      v10 = *(_QWORD *)(Irp + 184);
      *(_QWORD *)(v10 - 16) = RawCompletionRoutine;
      *(_QWORD *)(v10 - 8) = AdvancedHeader;
      *(_BYTE *)(v10 - 69) = -32;
      return IofCallDriver((PDEVICE_OBJECT)AdvancedHeader[1].PushLock.Value, (PIRP)Irp);
    }
    RawEndOperation((INT64)AdvancedHeader, *((_QWORD *)a3 + 6));
  }
  else
  {
    if( v7 == 27 )
    {
      ExAcquireFastMutex((FAST_MUTEX *)&AdvancedHeader[2].PagingIoResource);
      --LODWORD(AdvancedHeader[1].Resource);
      if( *(_DWORD *)&AdvancedHeader[1].Flags || !RawInitiateDeleteVolume((INT64)AdvancedHeader, 0i64, 0i64) )
        KeReleaseGuardedMutex((_FAST_MUTEX *)&AdvancedHeader[2].PagingIoResource);
    }
    v8 = -1073741202;
  }
  *(_DWORD *)(Irp + 48) = v8;
  IofCompleteRequest((_IRP *)Irp, 1);
  return v8;
}

Referenced by:

RawDispatch