Получение имени устройства по указателю PDEVICE_OBJECT
От: eight Россия  
Дата: 31.08.14 15:01
Оценка:
Добрый день. Столкнулся со следующими вопросами, ответить на которые сам не могу.

1. Как получить имя устройства если известен указатель PDEVICE_OBJECT?
2. Каким образом в ядре можно перечислить все устройства(DEVICE_OBJECT) или драйвера (DRIVER_OBJECT)?
3. Нужно получить указатель на device_object но он не всегда тот что нужен. см. ниже.

PDEVICE_OBJECT DeviceObject = GetDeviceObject(dev_name, &pfile);
    
if (DeviceObject)
{
    // 2. Get pointer to the lowest device in stack
    DeviceObject = GetLowestDevice(DeviceObject);
    // for( move_to device with flag DO_DEVICE_HAS_NAME)
}
// ...

PDEVICE_OBJECT GetLowestDevice(__in PDEVICE_OBJECT DeviceObject)
{
    PDEVICE_OBJECT pLowestDevice = DeviceObject;
    PDEVOBJ_EXTENSION deviceExtension = pLowestDevice->DeviceObjectExtension;
    while (deviceExtension->AttachedTo)
    {
        /* Gets the lowest device and its extension */
        pLowestDevice = deviceExtension->AttachedTo;
        deviceExtension = pLowestDevice->DeviceObjectExtension;
    }

    return pLowestDevice;
}


GetDeviceName возвращает указатель на устройство с использованием IoGetDeviceObjectPointer, а в таком случае это самый верхний девайс и не всегда тот который нужен. Поэтому использую GetLowestDevice чтобы пропустить все приаттаченные устройства. Но опять же и тут тоже не всё так классно так как нижнее устройство может быть не тем, что ожидалось. Вот тут то мне и требуется дополнительная проверка с именем устройства по указателю на PDEVICE_OBJECT.. I have no idea как это решить.
Отредактировано 31.08.2014 20:02 eight . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.