IoSetLinkShareAccess

VOID __stdcall IoSetLinkShareAccess(
        ACCESS_MASK DesiredAccess,
        UINT32 DesiredShareAccess,
        PFILE_OBJECT FileObject,
        PSHARE_ACCESS ShareAccess,
        PLINK_SHARE_ACCESS LinkShareAccess,
        UINT32 IoShareAccessFlags){
  ACCESS_MASK v6; 
  char v7; 
  ACCESS_MASK v8; 
  ACCESS_MASK v9; 
  _DWORD *FileObjectExtension; 
  bool v11; 
  ULONG SharedDelete; 
  v6 = DesiredAccess & 0x21;
  v7 = DesiredShareAccess;
  v8 = DesiredAccess & 6;
  FileObject->ReadAccess = v6 != 0;
  v9 = DesiredAccess & 0x10000;
  FileObject->WriteAccess = v8 != 0;
  FileObject->DeleteAccess = v9 != 0;
  FileObjectExtension = FileObject->FileObjectExtension;
  v11 = FileObjectExtension && (*FileObjectExtension & 1) != 0;
  if( v6 || v8 || v9 )
  {
    FileObject->SharedWrite = (v7 & 2) != 0;
    FileObject->SharedRead = v7 & 1;
    FileObject->SharedDelete = (v7 & 4) != 0;
    if( (IoShareAccessFlags & 0x80000000) != 0 && (v7 & 1) == 0 )
      FileObject->SharedRead = 1;
    if( v11 )
    {
      SharedDelete = 0;
      *(_QWORD *)&ShareAccess->OpenCount = 0i64;
      *(_QWORD *)&ShareAccess->Writers = 0i64;
      *(_QWORD *)&ShareAccess->SharedRead = 0i64;
    }
    else
    {
      ShareAccess->OpenCount = 1;
      ShareAccess->Readers = FileObject->ReadAccess;
      ShareAccess->Writers = FileObject->WriteAccess;
      ShareAccess->Deleters = FileObject->DeleteAccess;
      ShareAccess->SharedRead = FileObject->SharedRead;
      ShareAccess->SharedWrite = FileObject->SharedWrite;
      SharedDelete = FileObject->SharedDelete;
    }
    ShareAccess->SharedDelete = SharedDelete;
    if( LinkShareAccess && !v11 )
    {
      ++LinkShareAccess->OpenCount;
      if( (IoShareAccessFlags & 0x80u) == 0 )
        LinkShareAccess->Deleters += FileObject->DeleteAccess;
      LinkShareAccess->SharedDelete += FileObject->SharedDelete;
    }
  }
  else
  {
    *(_QWORD *)&ShareAccess->OpenCount = 0i64;
    *(_QWORD *)&ShareAccess->Writers = 0i64;
    *(_QWORD *)&ShareAccess->SharedRead = 0i64;
    ShareAccess->SharedDelete = 0;
  }
}

Referenced by:

IoSetShareAccess
IoSetShareAccessEx
RawCreate