RawMountVolume

NTSTATUS __stdcall RawMountVolume(_IO_STACK_LOCATION *IrpSp){
  __int64 v2; 
  NTSTATUS result; 
  PDEVICE_OBJECT v4; 
  unsigned int v5; 
  int v6; 
  _FILE_OBJECT *v7; 
  _ADAPTER_OBJECT *v8; 
  _KDEVICE_QUEUE *p_DeviceQueue; 
  __int64 v10; 
  INT64 DeviceCharacteristics; 
  PDEVICE_OBJECT DeviceObject; 
  _FILE_OBJECT *v13; 
  char Event[44]; 
  int v15; 
  int v16; 
  int v17; 
  wchar_t v18; 
  int v19; 

  DeviceObject = 0i64;
  RawScanDeletedList();
  v2 = *(_QWORD *)&IrpSp->Parameters.Options;
  if( *(_WORD *)(v2 + 304) > 0x1000u )
    return -1073741489;
  LODWORD(DeviceCharacteristics) = 0;
  result = IoCreateDevice(
             IrpSp->DeviceObject->DriverObject,
             0x150ui64,
             0i64,
             8ui64,
             DeviceCharacteristics,
             0,
             &DeviceObject);
  if( result >= 0 )
  {
    v4 = DeviceObject;
    v5 = *(_DWORD *)(v2 + 152);
    if( v5 > DeviceObject->AlignmentRequirement )
      DeviceObject->AlignmentRequirement = v5;
    v4->SectorSize = *(_WORD *)(v2 + 304);
    v4->Flags |= 0x10u;
    v6 = RawInitializeVcb(
           (_VCB *)&v4[1].Type,
           *(_DEVICE_OBJECT **)&IrpSp->Parameters.Options,
           (_VPB *)IrpSp->Parameters.SecurityContext);
    if( v6 < 0 )
    {
      RawCleanupVcb((_VCB *)&v4[1].Type);
      IoDeleteDevice(v4);
    }
    else
    {
      *(_QWORD *)(v4[1].DeviceQueue.Lock + 8) = v4;
      *(_DWORD *)(v4[1].DeviceQueue.Lock + 24) = -1;
      *(_WORD *)(v4[1].DeviceQueue.Lock + 6) = 0;
      v4->Flags &= ~0x80u;
      v4->StackSize = *(_BYTE *)(v2 + 76) + 1;
      v13 = 0i64;
      memset(&Event[4], 0, 20);
      v19 = 0;
      LODWORD(v7) = IoCreateStreamFileObjectLite(0i64, (INT64)v4);
      v8 = (_ADAPTER_OBJECT *)v7;
      v13 = v7;
      *(_DWORD *)&v4[1].gap4D[31] += 2;
      *(_DWORD *)&v4[1].gap4D[35] += 2;
      *(_DWORD *)Event = 4063233;
      *(_QWORD *)&Event[24] = 0i64;
      *(_DWORD *)&Event[32] = -1;
      *(_QWORD *)&Event[36] = 1i64;
      v15 = 6;
      v16 = 16;
      v17 = *(_DWORD *)L"RAW";
      v18 = aRaw[2];
      FsRtlNotifyVolumeEventEx(v7, 6ui64, (_TARGET_DEVICE_CUSTOM_NOTIFICATION *)Event);
      HalPutDmaAdapter(v8);
      *(_DWORD *)&v4[1].gap4D[31] -= 2;
      *(_DWORD *)&v4[1].gap4D[35] -= 2;
      ExAcquireFastMutex(&RawGlobalLock);
      p_DeviceQueue = &v4[1].DeviceQueue;
      v10 = RawMountedQueue;
      if( *(__int64 **)(RawMountedQueue + 8) != &RawMountedQueue )
        __fastfail(3u);
      *(_QWORD *)&p_DeviceQueue->Type = RawMountedQueue;
      p_DeviceQueue->DeviceListHead.Flink = (_LIST_ENTRY *)&RawMountedQueue;
      *(_QWORD *)(v10 + 8) = p_DeviceQueue;
      RawMountedQueue = (__int64)p_DeviceQueue;
      KeReleaseGuardedMutex(&RawGlobalLock);
    }
    return v6;
  }
  return result;
}

Referenced by:

RawFileSystemControl