public void EnumGroups(EnumGroupsDelegate callback) { int enumerationContext = 0; IntPtr buffer; int count; while (true) { Win32.SamEnumerateGroupsInDomain( this, ref enumerationContext, out buffer, 0x100, out count ).ThrowIf(); if (count == 0) { break; } using (SamMemoryAlloc bufferAlloc = new SamMemoryAlloc(buffer)) { for (int i = 0; i < count; i++) { SamRidEnumeration data = bufferAlloc.ReadStruct <SamRidEnumeration>(0, SamRidEnumeration.SizeOf, i); if (!callback(data.Name.Text, data.RelativeId)) { return; } } } } }
public void EnumGroups(EnumGroupsDelegate callback) { NtStatus status; int enumerationContext = 0; IntPtr buffer; int count; while (true) { status = Win32.SamEnumerateGroupsInDomain( this, ref enumerationContext, out buffer, 0x100, out count ); if (status >= NtStatus.Error) { Win32.Throw(status); } if (count == 0) { break; } using (var bufferAlloc = new SamMemoryAlloc(buffer)) { for (int i = 0; i < count; i++) { var data = bufferAlloc.ReadStruct <SamRidEnumeration>(i); if (!callback(data.Name.Read(), data.RelativeId)) { return; } } } } }