Пример #1
0
        private byte[] GetValueByteArray(IDirectorySearch search, IntPtr searchHandle, string columnName)
        {
            IntPtr name   = Marshal.StringToCoTaskMemUni(columnName);
            IntPtr column = Marshal.AllocHGlobal(Marshal.SizeOf <ADS_SEARCH_COLUMN>());

            search.GetColumn(searchHandle, name, column);
            Marshal.FreeCoTaskMem(name);
            var      col   = (ADS_SEARCH_COLUMN)Marshal.PtrToStructure <ADS_SEARCH_COLUMN>(column);
            ADSVALUE value = Marshal.PtrToStructure <ADSVALUE>(col.pADsValues);

            Marshal.FreeHGlobal(column);
            return((byte[])new AdsValueHelper(value).GetValue());
        }
Пример #2
0
        private List <string> GetValues(IDirectorySearch search, IntPtr searchHandle, string columnName)
        {
            IntPtr name   = Marshal.StringToCoTaskMemUni(columnName);
            IntPtr column = Marshal.AllocHGlobal(Marshal.SizeOf <ADS_SEARCH_COLUMN>());

            search.GetColumn(searchHandle, name, column);
            Marshal.FreeCoTaskMem(name);
            var    col         = Marshal.PtrToStructure <ADS_SEARCH_COLUMN>(column);
            IntPtr placeholder = col.pADsValues;
            var    retVal      = new List <string>();

            for (int i = 0; i < col.dwNumValues; i++)
            {
                ADSVALUE value = Marshal.PtrToStructure <ADSVALUE>(placeholder);
                retVal.Add(Marshal.PtrToStringUni(value.pointer));
                placeholder = IntPtr.Add(placeholder, Marshal.SizeOf <ADSVALUE>());
            }
            Marshal.FreeHGlobal(column);
            return(retVal);
        }