· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› Kernel mode-хорошо, User mode лучше...

Посл.отвђт Сообщенiе


Дата: Апр 9, 2004 20:55:58

Всем привет!!!
Вот после отдыха решил продолжить раскопки :) Сразу же возник следующий вопрос: из User mode, для примера, я могу вызвать MessageBoxA@16, а вот из kernel mode - фига! Всему виной отсутствие спроецированной User32.dll. Ну так как же! Что же теперь создавать EXE-шник и WinEXEc...? Полагаю, что есть и другие пути (не копатся же вечно в kernel driver mode??? собрал инфу и пора домой...). Естественно "внешнего" :) процеса user mode у меня нет, да и ессно, DeviceIoControl вообще недеспособен. Типа драйвер-одиночка. Please help!!!

Заранее благодарен ---===ППС===---


Дата: Апр 10, 2004 16:23:08

Документированного способа вызвать MessageBox точно нет. Есть пара функций, IoRaiseInformationalHardError и IoRaiseHardError, которые то ли мессагу в журнал событий пишут, то ли действительно какой-то попап юзеру показывают. Попробуй покопать.


Дата: Апр 10, 2004 17:43:23

Four-F
Спасибо!!!
попробуем IoRaiseInformationalHardError...
Про MessageBoxA@16 я упомянул для примера. На самом деле, мне требуются стандартные диалоги, GetWindowText?@?? и т.д. Т.е. надо каким-то образом установить контакт с пользователем, который даже и может не подозревает о сущ-ии DRV.Особенно важна возможность двухстороннего общения Конечно же я уже начал склонятся к побуждениям иметь в user mode свой процесс. Сразу же возникнет нужда дополнительной синхронизации, скрывать этот процесс. Так вот мне и ВАЖНО знать: можно ли как-то ухотриься в kernel mode или решать эту задачу в лоб.


Дата: Апр 11, 2004 10:26:40

Сорри, если тут чего натуплю, поскольку в ринг0 сильно не лазил..
Но не лежат ли большинство ф-ций user32/gdi32 в win32k.sys?

Фень Юань говорит, win32k имеет табличку _W32pServiceTable, а там указатели на системные ф-ции с идентификаторами => 1000h,
Названия этих (недокументированных) ф-ций лежат в win32k.dbg: NtGdiXX, NtUserXX.


Дата: Апр 11, 2004 11:30:24

Вот именно, все эти функции недокументированы, и могут различаться в разных версиях, как например структуры ETHREAD и EPROCESS.


Дата: Апр 11, 2004 12:58:55

PavPS, я думаю тебе стоит пересмотреть архитектуру своей программы, т.к. создавать в ring-0 и обрабатывать различные диалоги - некорректно по определению.

Если тебе действительно нужно какое-то взаимодействие с пользователем, то для этого использую ring-3 app. Которая и будет показывать диалоги, и взаимодействовать с драйвером (либо через DeviceIOControl который придется заставить работать, либо посредством, скажем, event-ов, если необходима какая-либо нотификация..)

Если все, что требуется - это вывести на экран значение парочки переменных, то для этого юзают DbgPrint() обычно.


Дата: Апр 11, 2004 15:14:42

Всем спасибо!

2 S_T_A_S_
Только что проверил по поводу win32k: в процесс System эта штука не проецируется, там , как полагается, есть только NtServiceTable, а вот, штука в том, что меня могут вызывать N потоков, т.к. я перехватываю кучу NtCall-ов, и, ксожалению вдобавок Io??? вызовов. И для меня важно по крайней мере хать какая-то документированность, т.к. важно чтобы Call на какие-то диалоги не зациклился и небыло бы StackOverflowError. Пожалуй да, придется use-ать ring-3 App.
2 Sten
Хотя быть опекуном какого-то App of ring-3 удобно, но задача такая: живет дровина N дней без меня и не у меня, потом появляется хозяин-"я" и собирает инфу (как админ в банкомате), поэтому для этого нужно какие-то средства оповещения иметь: не SoftIce же ставить и общатся. А держать постоянно включеный процесс все же страшновато. Не все же чайники... Хотя, как и сказано выше было, Предется общаться именно так.


Дата: Апр 11, 2004 16:17:04

Так ты в файл всё пиши: выделяй кусок памяти, складывай туда инфу и периодически сбрасывай на диск используя рабочий поток (work item). Если боишься, что до файла доберутся, то вообще в памяти всё держи, если конечно инфы не много и твоя система N дней без ребута живёт. А когда придешь, шлешь своей дровине контрол (можно с паролем) и пусть она сбрасывает всё на диск или ещё как те сообщает.


Дата: Апр 11, 2004 16:32:36

Four-F
Спасибо! Вообще странно..., что же я не догадался то??? Пожалуй покруче, чем ring-3. Уже начинаю пользовать...


Дата: Апр 12, 2004 11:26:04 · Поправил: ssx

насчет IopRaiseInformationalHardError(если оно все еще нужно):
This routine performs the actual pop-up. It will called from either the hard-error thread, or a APC routine in a user thread after exiting the file system.


Дата: Апр 12, 2004 16:18:54

MSDN (или DDK, как там его) уже почитал..:), но все равно спасибо...


Дата: Апр 12, 2004 17:15:31 · Поправил: Four-F

В DDK, и тем более в MSDN, про функции с префиксом p (private) не писАли, не пишут и писАть не будут. Это комментарий к исходнику ;)


Дата: Апр 12, 2004 23:27:43

Черт!
Виноват. Не разгледел IopRaiseInformationalHardError.
Имел ввиду: From DDK:
IoRaiseInformationalHardError
The IoRaiseInformationalHardError routine sends a popup to the user, warning about a device I/O error that indicates why a user I/O request failed.


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.056