Ejemplo n.º 1
0
        public override bool QueryActiveEntry(UIntPtr sourceHandle,
                                              int index,
                                              ref QueryBuffer entryBuffer)
        {
            unsafe {
                UInt32  offset;
                UIntPtr type;

                fixed(byte *ptr = &(entryBuffer.GetBuffer()[0]))
                {
                    bool success = DiagnosisService.ReadActiveSourceItem(sourceHandle,
                                                                         index,
                                                                         &type,
                                                                         ptr,
                                                                         entryBuffer.GetBufferSize());


                    entryBuffer.Type = type;

                    // the active entries do not have any header

                    entryBuffer.UserOffset = 0;

                    return(success);
                }
            }
        }
Ejemplo n.º 2
0
        public object GetObject(QueryBuffer buffer)
        {
            unsafe {
                switch (Type)
                {
                case DataType.__int8:
                case DataType.__uint8:
                    fixed(byte *ptrInt = &(buffer.GetBuffer()[buffer.UserOffset + Offset]))
                    {
                        return(*(byte *)ptrInt);
                    }

                case DataType.__int16:
                case DataType.__uint16:
                    fixed(byte *ptrInt = &(buffer.GetBuffer()[buffer.UserOffset + Offset]))
                    {
                        return(*(ushort *)ptrInt);
                    }

                case DataType.__int32:
                case DataType.__uint32:
                    fixed(byte *ptrInt = &(buffer.GetBuffer()[buffer.UserOffset + Offset]))
                    {
                        return(*(Int32 *)ptrInt);
                    }

                case DataType.__UIntPtr:
                    fixed(byte *ptrInt = &(buffer.GetBuffer()[buffer.UserOffset + Offset]))
                    {
                        return(*(UIntPtr *)ptrInt);
                    }

                case DataType.__IntPtr:
                    fixed(byte *ptrInt = &(buffer.GetBuffer()[buffer.UserOffset + Offset]))
                    {
                        return(*(IntPtr *)ptrInt);
                    }

                default:
                    DebugStub.WriteLine("Unknown field type");
                    break;
                }
            }

            return(null);
        }
Ejemplo n.º 3
0
        public bool Initialize(EventingStorage storage,
                               bool forward)
        {
            if (EntryBuffer == null)
            {
                EntryBuffer = new QueryBuffer(256);
                if ((EntryBuffer == null) || (EntryBuffer.GetBuffer() == null))
                {
                    return(false);
                }
            }

            //  Cleanup for the previous states.

            if (QueryHandle != 0)
            {
                QueryStorage.DeleteQueryView(QueryHandle);
                QueryHandle  = 0;
                QueryStorage = null;
            }

            //  Initialize the new query states

            QueryStorage = storage;

            if (QueryStorage == null)
            {
                return(false);
            }

            QueryHandle = QueryStorage.CreateQueryView(forward);

            if (QueryHandle == 0)
            {
                QueryStorage = null;

                return(false);
            }

            return(true);
        }
Ejemplo n.º 4
0
        public override UIntPtr GetNextEntry(UIntPtr queryHandle,
                                             ref QueryBuffer entryBuffer)
        {
            unsafe {
                UInt32  offset;
                UIntPtr type;

                fixed(byte *ptr = &(entryBuffer.GetBuffer()[0]))
                {
                    entryBuffer.EntryHandle = DiagnosisService.GetNextEntry(queryHandle,
                                                                            &type,
                                                                            &offset,
                                                                            ptr,
                                                                            entryBuffer.GetBufferSize());

                    entryBuffer.Type       = type;
                    entryBuffer.UserOffset = offset;

                    return(entryBuffer.EntryHandle);
                }
            }
        }