Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: кратность Irp->MdlAddress->ByteOffset  (Прочитано 8657 раз)
0 Пользователей и 1 Гость смотрят эту тему.
maaaaaad
Гость
« : 04-08-2006 09:00 » 

Кто знает можно ли надеяться хотябы на то, что Irp->MdlAddress->ByteOffset было кратно 4 (выровненно по двойному слову) Не понял

Где бы раздобыть инфу о кратности ByteOffset....Мне желательно чтобы ByteOffset был кратен 2^N как можно большей степени N

судя по всему N<4 (проскакивал ByteOffset 0xBE8)
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 04-08-2006 10:11 » 

PVOID
  ExAllocatePool(
    IN POOL_TYPE  PoolType,
    IN SIZE_T  NumberOfBytes
    );
If the NumberOfBytes requested is PAGE_SIZE or greater, a page-aligned buffer is allocated. Memory allocations of PAGE_SIZE or less do not cross page boundaries. Memory allocations of less than PAGE_SIZE are not necessarily page-aligned but are aligned on an 8-byte boundary.

надежда есть)

Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #2 : 14-08-2006 12:22 » 

нет нельзя, это смещение до буфера от начала страницы, а буфера имеют право быть выровнены на один байт(ExAllocatePool тут не при чем, я могу смещать указатель внутри буфера и его передать для создания MDL ), если устройство не сообщило иначе, как пример дисковые устройства требуют выравнивание на границу сектора.
 DeviceObject->AlignmentRequirement может помочь, но юзерское приложение должно следовать правилам.
« Последнее редактирование: 14-08-2006 12:26 от SlavaI » Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 14-08-2006 13:38 » 

с другой стороны... может то он может... но кому это надо? размещать MDL для невыровненных данных?
« Последнее редактирование: 14-08-2006 13:41 от Ochkarik » Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
SlavaI
Главный специалист

ru
Offline Offline

« Ответ #4 : 15-08-2006 09:56 » 

с другой стороны... может то он может... но кому это надо? размещать MDL для невыровненных данных?

а ты что думаешь, MDL только для выровненных используют? Да системе все равно выровнен там буффер или нет.
Записан
maaaaaad
Гость
« Ответ #5 : 18-08-2006 16:51 » 

я пока не наблюдал byteoffset, невыровненных по dword,
это при передаче в Read-Write указателя (char *)pt полученного от LocalAlloc.
Если туда передать например pt+1 то byteoffset не думаю что будет выровнен по dword.
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #6 : 21-08-2006 07:43 » 

maaaaaad,
от хорошей жизни невыровненные данные передавать не станут) ты откуда MDL-ы получаешь?
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
maaaaaad
Гость
« Ответ #7 : 21-08-2006 08:17 » 

От своего приложения. Read-Write методы небуферизированные и формируется MDL по буферу. Буфер передающийся в read-write я выделяю localalloc
Записан
Ochkarik
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #8 : 21-08-2006 16:21 » 

тогда выравнивание только от localalloc зависит я думаю? как она из кучи выделяет не знаю...
а вот если GlobalAlloc - 8 байт гарантированно.
а вообще - я память выделяю в драйвере, выровненную на 4к и отдаю приложению... мне так удобнее, да и надежнее это...за глюки приложений можно не отвечать)
Записан

RTFM уже хоть раз наконец!  RTFM :[ ну или хотя бы STFW...
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines