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()); }
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); }