purebasic.info

PureBasic forum
Текущее время: Вс июн 24, 2018 1:47 pm

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 54 ]  На страницу Пред.  1, 2, 3, 4  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Вс фев 12, 2012 4:12 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11194
Благодарил (а): 4 раз.
Поблагодарили: 417 раз.
puremaster писал(а):
Procedure IoGetCurrentIrpStackLocation(*irp)   ;(*irp._IRP)
   ;ProcedureReturn *irp\Tail\Overlay\CurrentStackLocation
   ProcedureReturn PeekL(*irp+$60)
EndProcedure
PeekL() в ядре не работает.

С этим макросом вышла запара. Есть код.
Код:
1
2
3
4
5
6
7
8
9
10
11
    stkloc = IoGetCurrentIrpStackLocation( pIrp );
    inBuffersize = stkloc->Parameters.DeviceIoControl.InputBufferLength;
    outBuffersize = stkloc->Parameters.DeviceIoControl.OutputBufferLength;
 
    CtrlBuff    = pIrp->AssociatedIrp.SystemBuffer;
 
    data  = (PUCHAR) CtrlBuff;
    address = (PUSHORT) CtrlBuff;
 
 
    switch ( stkloc->Parameters.DeviceIoControl.IoControlCode )

На пурике написал так:
Код:
1
2
3
4
5
6
7
  *stkloc.IO_STACK_LOCATION = *pIrp\Tail\Overlay\CurrentStackLocation
  inBuffersize = *stkloc\InputBufferLength02
  outBuffersize = *stkloc\OutputBufferLength02
  CtrlBuff   = *pIrp\SystemBuffer
  address = CtrlBuff & $FFFF
  Infa    = (CtrlBuff>>16)&255
  Select *stkloc\IoControlCode

Но не пашет. В *stkloc\IoControlCode хз что, не то, что передали через DeviceIoControl_().

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс фев 12, 2012 5:53 pm 
Не в сети
профессор

Зарегистрирован: Вт май 04, 2010 12:19 pm
Сообщений: 352
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
Цитата:
PeekL() в ядре не работает.
Не верю :) !extrn PB_PeekL !extrn PB_PeekW точно есть?

Цитата:
Но не пашет. В *stkloc\IoControlCode хз что
В инклуде fox'а структура IO_STACK_LOCATION в union объединяет .q (8байт), в оригинале 4 .l (16байт). Нестыковка на 8 байт решает.


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс фев 12, 2012 6:04 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11194
Благодарил (а): 4 раз.
Поблагодарили: 417 раз.
puremaster писал(а):
структура IO_STACK_LOCATION в union объединяет .q (8байт), в оригинале 4 .l (16байт). Нестыковка на 8 байт решает.
Не понял что там нужно исправить....

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс фев 12, 2012 6:18 pm 
Не в сети
профессор

Зарегистрирован: Вт май 04, 2010 12:19 pm
Сообщений: 352
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
сейчас там:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
a1.b
a2.b
a3.b
a4.b
 
structureunion
b1.q
b2.q
b3.q
b4.d
b5.b
b6.d
..............
endstructureunion
 
d1.d
d2.d
d3.d
d4.d
 

Объединяются в .q (в самый большой итем в union) - sizeof(IO_STACK_LOCATION) = 28 байт.


Должно быть:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
a1.b
a2.b
a3.b
a4.b
 
structureunion
  structure
    b1.d
    b2.d
    b3.d
    b4.d
  endstructure
  b5.d
  b6.q
..............
endstructureunion
 
d1.d
d2.d
d3.d
d4.d
 

Объединяются в структуру 4 .d (так как структура 16 байт больший айтем)
sizeof(IO_STACK_LOCATION) = 36 байт


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс фев 12, 2012 8:49 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11194
Благодарил (а): 4 раз.
Поблагодарили: 417 раз.
Написал таки рабочий драйвер для ХРюши. http://purebasic.info/phpBB2/viewtopic.php?t=2113

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Ср апр 04, 2012 9:48 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Сб май 21, 2011 10:27 pm
Сообщений: 246
Откуда: Брест , Беларусь
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
Парни!Большое спасибо всем,кто принял участие в написании и реализации создания драйверов в Purebasic . В жизни я встречал много ''программистов" которые просто знали сотни разных языков,и я никогда этим людям не завидовал лишь потому,что просто знаю Пурик,не знаю всего языка,просто знаю что есть такой! Единственным недостатком я счетал отсутствие создания полноценных драйверов. Спасибо вам!

p.s. никогда не кому не завидуйте, не Cишникам, не Паскалистам, не бойтесь того,что вы и я используем Basic, это тоже не плохо. Не нужно думать что Бейсик вымер, лучше посмейтесь над этим несчастьем,которое это вам скажет. Здесь , на форуме ,всегда найдется ответ ... со временем :)

_________________
Выпьем ещё раз - чтобы выпить в следущий раз! (С) Иван Пашкевич


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вт апр 10, 2012 9:55 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Сб май 21, 2011 10:27 pm
Сообщений: 246
Откуда: Брест , Беларусь
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Пункты репутации: 0
еще пожалуй вопрос,скажите,как полноценно можно работать с строками.

ну знаю что через @"Строка" можно получить память,но как бы сравнивать.знаю что в ядре есть функции со строками,но я их плохо пониманию.

Например,в приложеном драйвере SST_NtOpenProcess можно ли сделать защиту процессов от открытия через OpenProcess по имени процесса?

_________________
Выпьем ещё раз - чтобы выпить в следущий раз! (С) Иван Пашкевич


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб апр 21, 2012 1:38 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11194
Благодарил (а): 4 раз.
Поблагодарили: 417 раз.
puremaster, можешь выложить исходник проги-фильтра между транслятором и фасмом?
Она не возвращает ошибки фасма и не работает на x64 системе, поэтому нужно немного подредактировать прогу.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Вс апр 22, 2012 10:26 pm 
Не в сети
профессор

Зарегистрирован: Ср янв 14, 2009 4:12 pm
Сообщений: 2002
Благодарил (а): 12 раз.
Поблагодарили: 101 раз.
Пункты репутации: 43
puremaster писал(а):
Пора сваливать из вашего общества мудаков и конформистов.

Сдается мне, он это сделал.

_________________
Всё должно быть просто, настолько просто, насколько возможно, но не проще. (c) Альберт Эйнштейн
Изображение


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Чт июн 07, 2012 12:14 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11194
Благодарил (а): 4 раз.
Поблагодарили: 417 раз.
Неужели никого не заинтересовала эта тема?

kirill2000d писал(а):
ну знаю что через @"Строка" можно получить память,но как бы сравнивать
К примеру, такой код компилируется.
Код:
1
2
3
  If CompareMemory(@"1", @"1", 1)
   
  EndIf

Только нужно не забыть объявить функцию.
Код:
1
!extrn _PB_CompareMemory@12


_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб июн 09, 2012 2:09 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11194
Благодарил (а): 4 раз.
Поблагодарили: 417 раз.
Не могу понять почему некоторые функции ядра (например, DbgPrint(), memset()) можно вызвать только через cdecl? Если вызывать через stdcal, то драйвер собирается, но при его запуске - BSoD! :shock: :?
При этом другие функции (например, IoCreateDevice(), RtlInitUnicodeString()) нормально вызываются через stdcal.

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб июн 09, 2012 3:03 pm 
Не в сети
профессор

Зарегистрирован: Вт янв 13, 2009 2:41 pm
Сообщений: 370
Благодарил (а): 3 раз.
Поблагодарили: 17 раз.
Пункты репутации: 8
memset - сишная функа, потому и cdecl
DbgPrint имеет переменное число параметров, по этому тоже cdecl


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб июн 09, 2012 3:31 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11194
Благодарил (а): 4 раз.
Поблагодарили: 417 раз.
Fox писал(а):
memset - сишная функа
Она импортируется из ntoskrnl.exe, а не из MSVCRT.dll
И к тому же обе эти функции нормально импортируются и по stdcal (по крайней мере, линкер не ругается и все собирает).

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб июн 09, 2012 4:25 pm 
Не в сети
МОДЕРАТОР
Аватар пользователя

Зарегистрирован: Пн апр 09, 2007 4:53 pm
Сообщений: 11194
Благодарил (а): 4 раз.
Поблагодарили: 417 раз.
Иногда дров некомпилируется, без видимой причины на это.
Если посмотреть асм. файл, передаваемый FASM'у, то можно увидеть такую бяку (самая нижняя строка).

Изображение

_________________
Компьютер позволяет решать все те проблемы, которые до его изобретения не существовали. :) :)


Вернуться наверх
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Сб июн 09, 2012 8:54 pm 
Не в сети
профессор
Аватар пользователя

Зарегистрирован: Вт май 24, 2011 7:01 pm
Сообщений: 505
Благодарил (а): 0 раз.
Поблагодарили: 2 раз.
Пункты репутации: 0
на правах оффтопа: где-то, что-то, краем уха слышал (приснилось?), что в kernel-mode нельзя вызывать функции реализованные в user-modе. Должен быть посредник, например сервис. Хз насколько это истинно, утверждать не буду. Просто где-то в недрах мозга такая инфа всплыла.

_________________
Я спокоен! Я Спокоен вашу мать! И АДЕКВАТЕН... КОРАБЛЬ!!! ложись!! *уснул*


Вернуться наверх
 Профиль  
 
Показать сообщения за:  Сортировать по:  
Начать новую тему Ответить на тему  [ Сообщений: 54 ]  На страницу Пред.  1, 2, 3, 4  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на форуме

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group (блог о phpBB)
Сборка создана CMSart Studio
Русская поддержка phpBB