private static DsNameResultItem[] CrackNames( SafeDsHandle hDS, DsNameFlags flags, DsNameFormat formatOffered, DsNameFormat formatDesired, string[] names) { PscxArgumentException.ThrowIfIsNullOrEmpty(names); IntPtr ptr = IntPtr.Zero; try { NativeMethods.EnforceSuccess(NativeMethods.DsCrackNames( hDS, flags, formatOffered, formatDesired, names.Length, names, out ptr)); DsNameResult result = Utils.PtrToStructure <DsNameResult>(ptr); IEnumerable <DsNameResultItem> items = Utils.ReadNativeArray <DsNameResultItem>(result.rItems, result.cItems); return(new List <DsNameResultItem>(items).ToArray()); } finally { NativeMethods.DsFreeNameResult(ptr); } }
public static extern int DsCrackNames( SafeDsHandle hDS, DsNameFlags flags, DsNameFormat formatOffered, DsNameFormat formatDesired, int cNames, string[] rpNames, out IntPtr ppResult //pointer to pointer of DS_NAME_RESULT );
private static DsNameResultItem[] CrackNames(IntPtr hds, DsNameFlags flags, DsNameFormat formatOffered, DsNameFormat formatDesired, string[] namesToCrack) { IntPtr pDsNameResult = IntPtr.Zero; DsNameResultItem[] resultItems; try { uint namesToCrackCount = (uint)namesToCrack.Length; int result = NativeMethods.DsCrackNames(hds, flags, formatOffered, formatDesired, namesToCrackCount, namesToCrack, out pDsNameResult); if (result != 0) { throw new DirectoryException("DsCrackNames failed", new Win32Exception(result)); } DsNameResult dsNameResult = (DsNameResult)Marshal.PtrToStructure(pDsNameResult, typeof(DsNameResult)); if (dsNameResult.cItems == 0) { throw new DirectoryException("DsCrackNames returned an unexpected result"); } resultItems = new DsNameResultItem[dsNameResult.cItems]; IntPtr pItem = dsNameResult.rItems; for (int idx = 0; idx < dsNameResult.cItems; idx++) { resultItems[idx] = (DsNameResultItem)Marshal.PtrToStructure(pItem, typeof(DsNameResultItem)); pItem = IntPtr.Add(pItem, Marshal.SizeOf(resultItems[idx])); } } finally { if (pDsNameResult != IntPtr.Zero) { NativeMethods.DsFreeNameResult(pDsNameResult); } } return(resultItems); }
private static DsNameResultItem CrackNames(IntPtr hds, DsNameFlags flags, DsNameFormat formatOffered, DsNameFormat formatDesired, string name) { DsNameResultItem[] resultItems = NativeMethods.CrackNames(hds, flags, formatOffered, formatDesired, new[] { name }); return(resultItems[0]); }
private static extern int DsCrackNames(IntPtr hds, DsNameFlags flags, DsNameFormat formatOffered, DsNameFormat formatDesired, uint cNames, [MarshalAs(UnmanagedType.LPArray, ArraySubType = UnmanagedType.LPTStr, SizeParamIndex = 4)] string[] rpNames, out IntPtr ppResult);
private static DsNameResultItem[] CrackNames( SafeDsHandle hDS, DsNameFlags flags, DsNameFormat formatOffered, DsNameFormat formatDesired, string[] names) { PscxArgumentException.ThrowIfIsNullOrEmpty(names); IntPtr ptr = IntPtr.Zero; try { NativeMethods.EnforceSuccess(NativeMethods.DsCrackNames( hDS, flags, formatOffered, formatDesired, names.Length, names, out ptr)); DsNameResult result = Utils.PtrToStructure<DsNameResult>(ptr); IEnumerable<DsNameResultItem> items = Utils.ReadNativeArray<DsNameResultItem>(result.rItems, result.cItems); return new List<DsNameResultItem>(items).ToArray(); } finally { NativeMethods.DsFreeNameResult(ptr); } }