Цитата(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 класс, то надо смотреть его операторы.