реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> простой вопрос по структурам
sergey sva
сообщение Oct 18 2008, 12:17
Сообщение #1


Гуру
******

Группа: Свой
Сообщений: 2 546
Регистрация: 23-05-07
Из: Самарская область Сызрань
Пользователь №: 27 923



Вот структура :
Код
typedef struct _DEVICE_EXTENSION
{
    PDEVICE_OBJECT  pDevice;

    UNICODE_STRING  ustrDeviceName;     // внутреннее имя устройства
    UNICODE_STRING  ustrSymLinkName; // внешнее имя (символьная ссылка)

    UCHAR deviceOutBuffer[MAX_BUFFER_SIZE], // для вывода в устройство
          deviceInBuffer [MAX_BUFFER_SIZE]; // для получения из устройства

    ULONG  xferCount, // текущий передаваемый байт
           xferRest;  // остаток непереданных байт (индикатор завершенности)
    //=============================================
    PUCHAR portBase;  // адрес порта ввода/вывода
    ULONG Irq;        // Irq в терминах шины ISA для параллельного порта
    //=============================================
    PKINTERRUPT pIntObj;            // interrupt object
    KDPC        DpcForIsr_Object;   // DPC object

} DEVICE_EXTENSION, *PDEVICE_EXTENSION;


вот код где она работает:
Код
    NTSTATUS status;
    PDEVICE_OBJECT pDevObj;
    PDEVICE_EXTENSION pDevExt;


а вот как эта строчка работает не пойму:
Код
    
pDevExt = (PDEVICE_EXTENSION)pDevObj->DeviceExtension;

pDevExt указатель на PDEVICE_EXTENSION, pDevExt содержит адрес структуры PDEVICE_EXTENSION
pDevObj->DeviceExtension содержимое элемента структуры pDevObj, после выполнения этой строчке что
будет pDevExt = ?
Go to the top of the page
 
+Quote Post
SamHaris
сообщение Oct 20 2008, 05:57
Сообщение #2





Группа: Новичок
Сообщений: 13
Регистрация: 11-08-05
Пользователь №: 7 546



Цитата(sergey sva @ Oct 18 2008, 18:17) *
а вот как эта строчка работает не пойму:
Код
pDevExt = (PDEVICE_EXTENSION)pDevObj->DeviceExtension;

pDevExt указатель на PDEVICE_EXTENSION, pDevExt содержит адрес структуры PDEVICE_EXTENSION
pDevObj->DeviceExtension содержимое элемента структуры pDevObj, после выполнения этой строчке что
будет pDevExt = ?

Это преобразование типа переменной pDevObj->DeviceExtension в переменную pDevExt, которая имеет тип PDEVICE_EXTENSION, соответственно результат будет зависеть от того, что из себя представляет переменная pDevObj->DeviceExtension.

Если pDevObj->DeviceExtension указатель на DEVICE_EXTENSION, то он (указатель) скопируется в pDevExt.
Тогда надо так писать, чтоб не вводить никого в заблеждения:
Код
pDevExt = pDevObj->DeviceExtension;


Если pDevObj->DeviceExtension указатель на что-то другое, то указатель бедет перобразован в PDEVICE_EXTENSION. А контролировать указатли должен сам чел.

Если pDevObj->DeviceExtension структура DEVICE_EXTENSION, то в pDevExt запишется указатель pDevObj->DeviceExtension.pDevice; И скорее это неправильно, так как опять же вводит в заблуждения.
Если надо все же записать указатель на эту структуру, то надо так писать:
Код
pDevExt = &pDevObj->DeviceExtension;


Ну а если pDevObj->DeviceExtension класс, то надо смотреть его операторы.
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 6th July 2025 - 14:19
Рейтинг@Mail.ru


Страница сгенерированна за 0.01441 секунд с 7
ELECTRONIX ©2004-2016