private void TestProp() { int i, iLen = 0; AttrDataType pType; byte[] b = null; m_pv.GetPropertyCount(out i); Debug.Assert(i == 0); m_pv.SetProperty("foo", AttrDataType.DWORD, BitConverter.GetBytes(14), 4); m_pv.GetPropertyByName("foo", out pType, b, ref iLen); Debug.Assert(iLen == 4); b = new byte[iLen]; m_pv.GetPropertyByName("foo", out pType, b, ref iLen); Debug.Assert(BitConverter.ToInt32(b, 0) == 14); int isb = 0; b = null; iLen = 0; StringBuilder sb = null; m_pv.GetPropertyByIndex(0, sb, ref isb, out pType, b, ref iLen); Debug.Assert(isb == 4); Debug.Assert(iLen == 4); sb = new StringBuilder(isb); b = new byte[iLen]; m_pv.GetPropertyByIndex(0, sb, ref isb, out pType, b, ref iLen); Debug.Assert(BitConverter.ToInt32(b, 0) == 14); Debug.Assert(sb.ToString() == "foo"); m_pv.Clear(); m_pv.GetPropertyCount(out i); Debug.Assert(i == 0); }
public WM_ATTR GetProperty(int index) { WMT_ATTR_DATATYPE type; StringBuilder name; object obj; uint namelen = 0; uint datalen = 0; Logger.WriteLogMessage("Get property[" + index + "]."); _propertyVault.GetPropertyByIndex((uint)index, null, ref namelen, out type, IntPtr.Zero, ref datalen); name = new StringBuilder((int)namelen); switch (type) { case WMT_ATTR_DATATYPE.WMT_TYPE_BOOL: case WMT_ATTR_DATATYPE.WMT_TYPE_DWORD: obj = (uint)0; break; case WMT_ATTR_DATATYPE.WMT_TYPE_GUID: obj = Guid.NewGuid(); break; case WMT_ATTR_DATATYPE.WMT_TYPE_QWORD: obj = (ulong)0; break; case WMT_ATTR_DATATYPE.WMT_TYPE_WORD: obj = (ushort)0; break; case WMT_ATTR_DATATYPE.WMT_TYPE_STRING: case WMT_ATTR_DATATYPE.WMT_TYPE_BINARY: obj = new byte[datalen]; break; default: throw new InvalidOperationException(String.Format("Not supported data type: {0}.", type.ToString())); } GCHandle h = GCHandle.Alloc(obj, GCHandleType.Pinned); try { IntPtr ptr = h.AddrOfPinnedObject(); _propertyVault.GetPropertyByIndex((uint)index, name, ref namelen, out type, ptr, ref datalen); switch (type) { case WMT_ATTR_DATATYPE.WMT_TYPE_STRING: obj = Marshal.PtrToStringUni(ptr); break; case WMT_ATTR_DATATYPE.WMT_TYPE_BOOL: obj = ((uint)obj != 0); break; } } finally { h.Free(); } return(new WM_ATTR(name.ToString(), type, obj)); }