RawCreate

NTSTATUS __stdcall RawCreate(PFSRTL_ADVANCED_FCB_HEADER AdvancedHeader, PIRP Irp){
  __int64 v2; 
  _FAST_MUTEX *p_PagingIoResource; 
  __int64 v5; 
  _FILE_OBJECT *v7; 
  int v8; 
  int v9; 
  UINT32 v10; 
  ACCESS_MASK v11; 
  int v12; 
  int v13; 
  p_PagingIoResource = (_FAST_MUTEX *)&AdvancedHeader[2].PagingIoResource;
  v5 = v2;
  ExAcquireFastMutex((FAST_MUTEX *)&AdvancedHeader[2].PagingIoResource);
  v7 = *(_FILE_OBJECT **)(v5 + 48);
  if( v7 && (v7->FileName.Length || v7->RelatedFileObject)
    || (v8 = *(_DWORD *)(v5 + 16), (v8 & 0xFF000000) != 0x1000000)
    || (v8 & 1) != 0 )
  {
    v13 = -1073741811;
    goto LABEL_15;
  }
  v9 = *(_DWORD *)&AdvancedHeader[1].NodeTypeCode;
  if( (v9 & 1) != 0 )
  {
    v13 = -1073741790;
    goto LABEL_15;
  }
  if( (v9 & 2) != 0 )
  {
    v13 = -1073741202;
    goto LABEL_15;
  }
  v10 = *(unsigned __int16 *)(v5 + 26);
  v11 = *(_DWORD *)(*(_QWORD *)(v5 + 8) + 16i64);
  if( *(_DWORD *)&AdvancedHeader[1].Flags )
  {
    v13 = IoCheckLinkShareAccess(v11, v10, v7, (PSHARE_ACCESS)((char *)&AdvancedHeader[1].Resource + 4), 0i64, 1u);
    if( v13 >= 0 )
    {
      v12 = *(_DWORD *)&AdvancedHeader[1].Flags;
      if( v12 )
        goto LABEL_10;
      goto LABEL_9;
    }
LABEL_15:
    *((_QWORD *)Irp + 7) = 0i64;
    goto LABEL_11;
  }
LABEL_9:
  IoSetLinkShareAccess(
    v11,
    v10,
    *(PFILE_OBJECT *)(v5 + 48),
    (PSHARE_ACCESS)((char *)&AdvancedHeader[1].Resource + 4),
    0i64,
    0);
  v12 = *(_DWORD *)&AdvancedHeader[1].Flags;
LABEL_10:
  ++LODWORD(AdvancedHeader[1].Resource);
  *(_DWORD *)&AdvancedHeader[1].Flags = v12 + 1;
  v13 = 0;
  *(_QWORD *)(*(_QWORD *)(v5 + 48) + 16i64) = AdvancedHeader[1].FileContextSupportPointer;
  *((_QWORD *)Irp + 7) = 1i64;
  *(_DWORD *)(*(_QWORD *)(v5 + 48) + 80i64) |= 8u;
  *(_QWORD *)(*(_QWORD *)(v5 + 48) + 24i64) = AdvancedHeader;
LABEL_11:
  if( *(_DWORD *)&AdvancedHeader[1].Flags || !RawInitiateDeleteVolume((INT64)AdvancedHeader, 0i64, 1i64) )
    KeReleaseGuardedMutex(p_PagingIoResource);
  *((_DWORD *)Irp + 12) = v13;
  IofCompleteRequest(Irp, 1);
  return v13;
}

Referenced by:

RawDispatch