Пример #1
0
        public void SetProperty(WM_ATTR attr)
        {
            object obj;
            uint   size;

            Logger.WriteLogMessage("Set property[" + attr.Name + "].");

            switch (attr.DataType)
            {
            case WMT_ATTR_DATATYPE.WMT_TYPE_STRING:
                byte[] arr = Encoding.Unicode.GetBytes((string)attr.Value + (char)0);
                obj  = arr;
                size = (ushort)arr.Length;
                break;

            case WMT_ATTR_DATATYPE.WMT_TYPE_BOOL:
                obj  = (uint)((bool)attr ? 1 : 0);
                size = 4;
                break;

            case WMT_ATTR_DATATYPE.WMT_TYPE_BINARY:
                obj  = (byte[])attr.Value;
                size = (ushort)((byte[])obj).Length;
                break;

            case WMT_ATTR_DATATYPE.WMT_TYPE_DWORD:
                obj  = (uint)attr;
                size = 4;
                break;

            case WMT_ATTR_DATATYPE.WMT_TYPE_QWORD:
                obj  = (ulong)attr;
                size = 8;
                break;

            case WMT_ATTR_DATATYPE.WMT_TYPE_WORD:
                obj  = (ushort)attr;
                size = 2;
                break;

            case WMT_ATTR_DATATYPE.WMT_TYPE_GUID:
                obj  = (Guid)attr;
                size = (ushort)Marshal.SizeOf(typeof(Guid));
                break;

            default:
                throw new ArgumentException("Invalid data type.", "attr");
            }

            GCHandle h = GCHandle.Alloc(obj, GCHandleType.Pinned);

            try
            {
                _propertyVault.SetProperty(attr.Name, attr.DataType, h.AddrOfPinnedObject(), size);
            }
            finally
            {
                h.Free();
            }
        }
Пример #2
0
        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);
        }