Модераторы: feodorv, GremlinProg, xvr, Fixin

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запрет доступа к каталогу 
V
    Опции темы
bra1ny
Дата 26.11.2009, 02:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



FltCancelFileOpen?
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
KAlex1
Дата 30.11.2009, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



Спасибо за подсказку. В ВДК написано что команда FltCancelFileOpen используется в PostOperationCallBack процедурах. Во всяком случае она мне не пригодилась, ошибка оказалась в сравнении имен каталогов. Это я уже исправил. Разработка продвигается)  smile 
Подскажите пожалуйста какую фунцкию использовать для динамического выделения памяти, под массив переменных определенного типа, в режиме ядра. Необходимо динамически выделить память под массив UNICODE_STRING-ов. И затем также выделить память под массив buffer каждой из структур UNICODE_STRING.

Это сообщение отредактировал(а) KAlex1 - 30.11.2009, 23:46
PM MAIL   Вверх
bra1ny
Дата 1.12.2009, 00:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



ExAllocatePool().
Выбирать тип пула надо в зависимости от irql.
Если работаете на уровне < DISPATCH_LEVEL тогда можно paged pool. 
С nonpaged пулом можно работать на любом irql, но надо помнить что это очень ценный ресурс  smile 
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
KAlex1
Дата 3.12.2009, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



Благодаря документации и Вам, bra1ny, мне стало ясно что необходимо использовать ExAllocatePoolWithTag. 
Но у меня возникла очередная проблема: выделяется всего 4 байта, при том что мне нужно 5120 байт.
Из DriverEntry вызываю свою процедуру, и в ней уже происходит вызов ExAllocatePoolWithTag.
Вначале подумал что IRQL не тот, попробовал вызвать ExAllocatePoolWithTag их самой DriverEntry, но всеравно выделяются только 4 байта, вместо желаемых 5120. Выделяю из PagedPool. IRQL DriverEntry является PASSIVE_LEVEL. 
Вот он код:
Код

    PVOID buffer;
    
    buffer = ExAllocatePoolWithTag(PagedPool, 5120,'ffuB');
    resultLength=sizeof(buffer);


Буду рад, если у вас есть какие-нибудь идеи по этому поводу)
PM MAIL   Вверх
xvr
Дата 3.12.2009, 20:38 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Цитата

Буду рад, если у вас есть какие-нибудь идеи по этому поводу) 
Есть идея, что sizeof(buffer); - это размер указателя buffer, а не выделенного буфера, на который он указывает. Так что спите спокойно - ваши 5120 байтов скорее всего выделились. Что бы стать совсем спокойным рекомендуется проверить этот самый buffer на NULL

PM MAIL   Вверх
bra1ny
Дата 3.12.2009, 22:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



Цитата(xvr @ 3.12.2009,  20:38)
Цитата

Буду рад, если у вас есть какие-нибудь идеи по этому поводу) 
Есть идея, что sizeof(buffer); - это размер указателя buffer, а не выделенного буфера, на который он указывает. Так что спите спокойно - ваши 5120 байтов скорее всего выделились. Что бы стать совсем спокойным рекомендуется проверить этот самый buffer на NULL

Вы совершенно правы. 

Цитата

мне стало ясно что необходимо использовать ExAllocatePoolWithTag. 


ExAllocatePool это "обертка" которая в свою очередь вызывает ExAllocatePoolWithTag с тэгом None. Ну это так для справки))
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
KAlex1
Дата 3.12.2009, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



Я бы спал спокойно если бы мне функция ZwQueryValueKey не возвращала BufferTooSmall, при том что проверку я перед этим тоже делаю)) И дебаггер показывает  в buffer не нулевой адрес.
Код

...
    PVOID buffer;
    ULONG resultLength
    
    buffer = ExAllocatePoolWithTag(PagedPool, 5120,'ffuB');
    resultLength=sizeof(buffer);
    RtlZeroMemory(buffer,DIRECTORIES_LENGTH);
    resultLength=sizeof(buffer);

    if (buffer == NULL) 
    {
        return;
    }


    InitializeObjectAttributes( &attributes,
                                RegistryPath,
                                OBJ_CASE_INSENSITIVE | OBJ_KERNEL_HANDLE,
                                NULL,
                                NULL );

    status = ZwOpenKey( &driverRegKey,
                        KEY_READ,
                        &attributes );

    if (!NT_SUCCESS( status )) {
        return;
    }

     RtlInitUnicodeString( &valueName, DIRECTORY_TOBECLOSED );

    pValuePartialInfo = (PKEY_VALUE_PARTIAL_INFORMATION) buffer;

    status = ZwQueryValueKey( driverRegKey,
        &valueName,
        KeyValuePartialInformation,  // Specifies that a KEY_VALUE_PARTIAL_INFORMATION structure is supplied. 
        buffer,
        sizeof(buffer),
        &resultLength );
...


Это сообщение отредактировал(а) KAlex1 - 3.12.2009, 22:47
PM MAIL   Вверх
xvr
Дата 3.12.2009, 22:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 40
Всего: 223



Код

ZwQueryValueKey( driverRegKey,
        &valueName,
        KeyValuePartialInformation,  // Specifies that a KEY_VALUE_PARTIAL_INFORMATION structure is supplied. 
        buffer,
        sizeof(buffer),
        &resultLength );
Не надо сюда подавать sizeof(buffer),, это всего лишь 4, так что BufferTooSmall вполне оправданно. Подайте туда ваши 5120

PM MAIL   Вверх
KAlex1
Дата 9.12.2009, 22:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



Скажите пожалуйста, драйвера откомпилированные в Windows XP x86 build Enviroment будут работать на Win Xp x64, и на Windows 7?
Я думал что должно быть какое-нибудь Windows XP x64 build Enviroment, но его нету, поэтому драйвера получается будут 32х-битные.
PM MAIL   Вверх
bra1ny
Дата 9.12.2009, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



Цитата

Я думал что должно быть какое-нибудь Windows XP x64 build Enviroment

на сколько помню можно 2003 x64 использовать , схожие архитектуры. 


Это сообщение отредактировал(а) bra1ny - 9.12.2009, 23:12
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
KAlex1
Дата 9.12.2009, 23:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



А вообще, драйвера откомпилированные в Windows XP x86 build Enviroment будут работать на Win Xp x64, и на Windows 7?
PM MAIL   Вверх
bra1ny
Дата 10.12.2009, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 26.12.2008

Репутация: 2
Всего: 3



Цитата

А вообще, драйвера откомпилированные в Windows XP x86 build Enviroment будут работать на Win Xp x64

Вообще-то тоскают с собой драйвера для разных платформ. Для x86 отдельно , для x64 отдельно. 
--------------------
Что вас манит сюдаИз заморзких широт?Там гораздо сытней и красивей.Или воля не та, или воздух не тот -Знать и вам не прожить без России.
PM   Вверх
KAlex1
Дата 20.12.2009, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



Подскажите пожалуйста как настраивать MVS 2005 для создния user-mode application, которые смогли бы взаимодействовать с kernel-mode драйвером? 

PM MAIL   Вверх
smoke_man
Дата 20.12.2009, 18:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 447
Регистрация: 25.1.2007
Где: Рязань

Репутация: 5
Всего: 17



В смысле настраивать? Создаешь приложение, а для работы с драйвером используешь следующие функции:
CreateFile -> IRP_MJ_CREATE 
CloseHandle -> IRP_MJ_CLEANUP & IRP_MJ_CLOSE 
WriteFile -> IRP_MJ_WRITE 
ReadFile-> IRP_MJ_READ 
DeviceIoControl -> IRP_MJ_DEVICE_CONTROL


--------------------
0x2b|~0x2b
PM MAIL ICQ GTalk   Вверх
KAlex1
Дата 20.12.2009, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 40
Регистрация: 18.10.2009
Где: Ukraine, Zaporozh ye

Репутация: нет
Всего: нет



Всмысле какие папки указывать в настройка, типа Additional library directories, возможно какие-нибудь настройки линковщика. ЧТо-то наподобии http://alter.org.ua/ru/docs/nt_kernel/vc8_proj/ вот этого, если такое вообще есть.
Потому что я пробовал подключить .h файл с нужной мне функцией, указыв на него необходимые пути в настройках проекта, но всеравно при линковании ошибки. 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.1442 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.