예제 #1
0
        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);
            }
        }
예제 #2
0
 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
 );
예제 #3
0
파일: DsCrackNames.cs 프로젝트: zyonet/Pscx
 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
     );
예제 #4
0
        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);
        }
예제 #5
0
 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]);
 }
예제 #6
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);
예제 #7
0
        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);
            }
        }