| File: System\DirectoryServices\ActiveDirectory\ReplicationCursorCollection.cs | Web Access |
| Project: src\runtime\src\libraries\System.DirectoryServices\src\System.DirectoryServices.csproj (System.DirectoryServices) |
// Licensed to the .NET Foundation under one or more agreements. // The .NET Foundation licenses this file to you under the MIT license. using System.Collections; using System.Runtime.InteropServices; namespace System.DirectoryServices.ActiveDirectory { public class ReplicationCursorCollection : ReadOnlyCollectionBase { private readonly DirectoryServer _server; internal ReplicationCursorCollection(DirectoryServer server) { _server = server; } public ReplicationCursor this[int index] => (ReplicationCursor)InnerList[index]!; public bool Contains(ReplicationCursor cursor) { if (cursor == null) throw new ArgumentNullException(nameof(cursor)); return InnerList.Contains(cursor); } public int IndexOf(ReplicationCursor cursor) { if (cursor == null) throw new ArgumentNullException(nameof(cursor)); return InnerList.IndexOf(cursor); } public void CopyTo(ReplicationCursor[] values, int index) { InnerList.CopyTo(values, index); } private int Add(ReplicationCursor cursor) => InnerList.Add(cursor); internal void AddHelper(string partition, object cursors, bool advanced, IntPtr info) { // get the count int count = 0; if (advanced) count = ((DS_REPL_CURSORS_3)cursors).cNumCursors; else count = ((DS_REPL_CURSORS)cursors).cNumCursors; IntPtr addr = 0; for (int i = 0; i < count; i++) { if (advanced) { addr = IntPtr.Add(info, sizeof(int) * 2 + i * Marshal.SizeOf<DS_REPL_CURSOR_3>()); DS_REPL_CURSOR_3 cursor = new DS_REPL_CURSOR_3(); Marshal.PtrToStructure(addr, cursor); ReplicationCursor managedCursor = new ReplicationCursor(_server, partition, cursor.uuidSourceDsaInvocationID, cursor.usnAttributeFilter, cursor.ftimeLastSyncSuccess, cursor.pszSourceDsaDN); Add(managedCursor); } else { addr = IntPtr.Add(info, sizeof(int) * 2 + i * Marshal.SizeOf<DS_REPL_CURSOR>()); DS_REPL_CURSOR cursor = new DS_REPL_CURSOR(); Marshal.PtrToStructure(addr, cursor); ReplicationCursor managedCursor = new ReplicationCursor(_server, partition, cursor.uuidSourceDsaInvocationID, cursor.usnAttributeFilter); Add(managedCursor); } } } } }