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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: управляющий код в/в (макрос CTL_CODE)  (Прочитано 9557 раз)
0 Пользователей и 1 Гость смотрят эту тему.
nike_zp
Гость
« : 24-11-2003 08:48 » 

Управляющий код в/в (макрос CTL_CODE). Это и есть вопрос. Расскажите в двух словах, как он формируется (особо интересует поле <функция>, она задается числовым значением, - как это понимать?).
Записан
Артем
Опытный

nz
Offline Offline
Пол: Мужской
Beware the wolf in sheep's clothing.


« Ответ #1 : 24-11-2003 11:32 » 

Думаю речь идет об этом определении:
// взято из ntddk.h
#define CTL_CODE( DeviceType, Function, Method, Access ) (                 \
    ((DeviceType) << 16) | ((Access) << 14) | ((Function) << 2) | (Method) \
)

где
DeviceType-число больше 0x000080001(здесь не уверен :oops:  )

Function - число (ЛЮБОЕ) больше 0х800 (т.к. коды от 0 до 0х800 зарезервираваны).

 почему тебя смущает что это число? это ведь не указатель на функцию, не ее адрес... просто число

CTL_CODE--просто число (и составляется из чисел), которое кладется в определенное место irp-пакета. и используется для идентификации различных IRP пакетов
 
Обычно используют конструкцию switch для обработки пакетов:
 
switch (irpStack->Parameters.DeviceIoControl.IoControlCode)
  {

    case My_fun:
     .....
      break;
    .....
   }

My_fun может быть сформирована например
#define My_fun         CTL_CODE(0x000080001,  \
                                               0х801,  \
                                               METHOD_BUFFERED,       \
                                               FILE_ANY_ACCESS)
Записан
Краш
Гость
« Ответ #2 : 24-11-2003 12:37 » 

Цитата

DeviceType-число больше 0x000080001(здесь не уверен  )

Function - число (ЛЮБОЕ) больше 0х800 (т.к. коды от 0 до 0х800 зарезервираваны


чисто по логике не разумно разбивать так....дюжина и одно яйцо...

DeviceType-число до 0x00007FFFF
Function - больше 0х7FF

а по правде - см. ctl_code rtfm


найк, номер твоей функции, когда дойдешь до обработки ctl - поймешь. =)
Записан
Краш
Гость
« Ответ #3 : 24-11-2003 12:46 » new

,больше 0x7FFFF
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines