Example #1
0
        unsafe private void ExtractResourceDescriptor(RegResourceItem.ResourceList resourceList, ref IntPtr p)
        {
            try
            {
                RegResourceItem.FULL_RESOURCE_DESCRIPTOR frd = new RegResourceItem.FULL_RESOURCE_DESCRIPTOR();
                Marshal.PtrToStructure(p, frd);
                p = (IntPtr)(p.ToInt32() + Marshal.SizeOf(frd));
                if (frd != null)
                {
                    RegResourceItem.FullResourceDescriptor fullResourceDescriptor = new RegResourceItem.FullResourceDescriptor(frd.InterfaceType, (int)frd.BusNumber);

                    for (int j = 0; j < frd.PartialResourceList.Count; j++)
                    {
                        RegResourceItem.PARTIAL_RESOURCE_DESCRIPTOR prd = new RegResourceItem.PARTIAL_RESOURCE_DESCRIPTOR();
                        Marshal.PtrToStructure(p, prd);

                        p = (IntPtr)(p.ToInt32() + (sizeof(byte) + sizeof(byte) + sizeof(ushort) + LargestStructSizeInUnion));

                        RegResourceItem.PartialResourceDescriptor partialResourceDescriptor = new RegResourceItem.PartialResourceDescriptor((RegResourceItem.ResourceType)prd.Type, prd.ShareDisposition, prd.Flags);

                        #region Parse Resource
                        switch ((RegResourceItem.ResourceType)prd.Type)
                        {
                        case RegResourceItem.ResourceType.Interrupt:
                        {
                            // Interrupt resource type
                            partialResourceDescriptor.Resource =
                                new RegResourceItem.HardwareResource.Interrupt(prd.Interrupt.Level, prd.Interrupt.Vector, prd.Interrupt.Affinity);
                            break;
                        }

                        case RegResourceItem.ResourceType.Memory:
                        {
                            // Memory resource type
                            partialResourceDescriptor.Resource =
                                new RegResourceItem.HardwareResource.Memory(prd.Memory.Start, prd.Memory.Length);
                            break;
                        }

                        case RegResourceItem.ResourceType.BusNumber:
                        {
                            // BusNumber resource type
                            partialResourceDescriptor.Resource =
                                new RegResourceItem.HardwareResource.BusNumber(prd.BusNumber.Start, prd.BusNumber.Length, prd.BusNumber.Reserved);
                            break;
                        }

                        case RegResourceItem.ResourceType.Dma:
                        {
                            // Dma resource type
                            partialResourceDescriptor.Resource =
                                new RegResourceItem.HardwareResource.Dma(prd.Dma.Channel, prd.Dma.Port, prd.Dma.Reserved1);
                            break;
                        }

                        case RegResourceItem.ResourceType.Null:
                        {
                            // Generic resource type
                            partialResourceDescriptor.Resource =
                                new RegResourceItem.HardwareResource.Generic(prd.Generic.Start, prd.Generic.Length);
                            break;
                        }

                        case RegResourceItem.ResourceType.Port:
                        {
                            // Port resource type
                            partialResourceDescriptor.Resource =
                                new RegResourceItem.HardwareResource.Port(prd.Port.Start, prd.Port.Length);
                            break;
                        }

                        case RegResourceItem.ResourceType.DevicePrivate:
                        {
                            // DevicePrivate resource type
                            partialResourceDescriptor.Resource =
                                new RegResourceItem.HardwareResource.DevicePrivate(prd.DevicePrivate.Data);
                            break;
                        }

                        case RegResourceItem.ResourceType.DeviceSpecific:
                        {
                            // DeviceSpecific resource type
                            partialResourceDescriptor.Resource =
                                new RegResourceItem.HardwareResource.DeviceSpecificData(prd.DeviceSpecificData.DataSize, prd.DeviceSpecificData.Reserved1, prd.DeviceSpecificData.Reserved2);
                            break;
                        }
                        }
                        #endregion

                        fullResourceDescriptor.PartialResourceDescriptors.Add(partialResourceDescriptor);
                    }

                    resourceList.FullResourceDescriptors.Add(fullResourceDescriptor);

                    string[] listOfItems = new string[3];
                    listOfItems[0] = ((int)frd.BusNumber).ToString();
                    string sInterface = RegResourceItem.GetInterfaceString(frd.InterfaceType);
                    listOfItems[1] = sInterface;
                    listOfItems[2] = frd.BusNumber.ToString() + sInterface;

                    if (ResourceListTable == null)
                    {
                        ResourceListTable = new Hashtable();
                        ResourceListTable.Add(listOfItems[2], fullResourceDescriptor);
                    }
                    else
                    {
                        ResourceListTable.Add(listOfItems[2], fullResourceDescriptor);
                    }

                    ListViewItem lvItem = new ListViewItem(listOfItems);
                    LWlvResourceList.Items.Add(lvItem);
                }
            }
            finally
            {
            }
        }
Example #2
0
        unsafe private void SetInputData()
        {
            Logger.Log("ResourceListDialog.SetInputData", Logger.RegistryViewerLoglevel);

            string[] sKey = null;
            object   data = null;

            if (ValueInfo != null)
            {
                sKey = ValueInfo.sParentKey.ToString().Split(new char[] { '\\' }, 2);
                data = RegistryInteropWrapperWindows.RegGetValue(RegistryInteropWrapperWindows.GetRegistryHive(ValueInfo.hKey), sKey[1], ValueInfo.sValue, out ValueInfo.intDataType);
            }
            else
            {
                sKey = regValueInfo.sKeyname.ToString().Split(new char[] { '\\' }, 2);
                data = regValueInfo.bDataBuf;
            }

            if (data == null)
            {
                Logger.Log("ResourceListDialog.SetInputData - RegistryKey.GetValue returns null", Logger.RegistryViewerLoglevel);
                return;
            }

            try
            {
                int    RESOURCE_LIST            = 8;
                int    FULL_RESOURCE_DESCRIPTOR = 9;
                byte[] buffer = data as byte[];
                RegResourceItem.ResourceList resourceList = null;
                fixed(byte *pBuffer = buffer)
                {
                    IntPtr p = (IntPtr)pBuffer;

                    resourceList = new RegResourceItem.ResourceList();
                    if ((ValueInfo != null && ValueInfo.intDataType == RESOURCE_LIST) ||
                        (regValueInfo != null && (int)regValueInfo.pType == RESOURCE_LIST))
                    {
                        RegResourceItem.RESOURCE_LIST_COUNT rCount = new RegResourceItem.RESOURCE_LIST_COUNT();
                        Marshal.PtrToStructure(p, rCount);
                        p = (IntPtr)(p.ToInt32() + Marshal.SizeOf(rCount));
                        for (int i = 0; i < rCount.Count; i++)
                        {
                            ExtractResourceDescriptor(resourceList, ref p);
                        }
                    }
                    else if ((ValueInfo != null && ValueInfo.intDataType == FULL_RESOURCE_DESCRIPTOR) ||
                             (regValueInfo != null && (int)regValueInfo.pType == FULL_RESOURCE_DESCRIPTOR))
                    {
                        ExtractResourceDescriptor(resourceList, ref p);
                    }
                }

                if (LWlvResourceList.Items.Count > 0)
                {
                    btnDisplay.Enabled = true;
                }
            }
            finally
            {
            }
        }
        unsafe private void SetInputData()
        {
            Logger.Log("ResourceListDialog.SetInputData", Logger.RegistryViewerLoglevel);

            string[] sKey = null;
            object data = null;

            if (ValueInfo != null)
            {
                sKey = ValueInfo.sParentKey.ToString().Split(new char[] { '\\' } , 2);
                data = RegistryInteropWrapperWindows.RegGetValue(RegistryInteropWrapperWindows.GetRegistryHive(ValueInfo.hKey), sKey[1], ValueInfo.sValue, out ValueInfo.intDataType);
            }
            else
            {
                sKey = regValueInfo.sKeyname.ToString().Split(new char[] { '\\' } , 2);
                data = regValueInfo.bDataBuf;
            }

            if (data == null)
            {
                Logger.Log("ResourceListDialog.SetInputData - RegistryKey.GetValue returns null", Logger.RegistryViewerLoglevel);
                return;
            }

            try
            {
                int RESOURCE_LIST = 8;
                int FULL_RESOURCE_DESCRIPTOR = 9;
                byte[] buffer = data as byte[];
                RegResourceItem.ResourceList resourceList = null;
                fixed (byte* pBuffer = buffer)
                {
                    IntPtr p = (IntPtr)pBuffer;
                    resourceList = new RegResourceItem.ResourceList();
                    if ((ValueInfo != null && ValueInfo.intDataType == RESOURCE_LIST) ||
                        (regValueInfo != null && (int)regValueInfo.pType == RESOURCE_LIST))
                    {
                        RegResourceItem.RESOURCE_LIST_COUNT rCount = new RegResourceItem.RESOURCE_LIST_COUNT();
                        Marshal.PtrToStructure(p, rCount);
                        p = (IntPtr)(p.ToInt32() + Marshal.SizeOf(rCount));
                        for (int i = 0; i < rCount.Count; i++)
                        {
                            ExtractResourceDescriptor(resourceList, ref p);
                        }
                    }
                    else if ((ValueInfo != null && ValueInfo.intDataType == FULL_RESOURCE_DESCRIPTOR) ||
                        (regValueInfo != null && (int)regValueInfo.pType == FULL_RESOURCE_DESCRIPTOR))
                    {
                        ExtractResourceDescriptor(resourceList, ref p);
                    }
                }

                if (LWlvResourceList.Items.Count > 0)
                    btnDisplay.Enabled = true;
            }
            finally
            {
            }
        }