Легенда:
новое сообщение
закрытая нитка
новое сообщение
в закрытой нитке
старое сообщение
|
- Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
- Новичкам также крайне полезно ознакомиться с данным документом.
|
А в чем собственно проблема? 01.09.06 12:41 Число просмотров: 2063
Автор: Killer{R} <Dmitry> Статус: Elderman
|
> Всем доброго! > Изменяю во второй таблице сервисов(win32k), адрес на свою > функцию (MyNtUserGetClipboardData), так вот вопрос > собственно в следующем, как мне получить доступ к > содержимому буфера в режиме ядра?
Вызвать оригинальную NtUserGetClipboardData, она все вернет :)
|
<programming>
|
SDT, а что дальше? 01.09.06 12:17
Автор: LuckyDevil Статус: Незарегистрированный пользователь
|
Всем доброго!
Изменяю во второй таблице сервисов(win32k), адрес на свою функцию (MyNtUserGetClipboardData), так вот вопрос собственно в следующем, как мне получить доступ к содержимому буфера в режиме ядра?
Заранее спасибо!
|
|
А в чем собственно проблема? 01.09.06 12:41
Автор: Killer{R} <Dmitry> Статус: Elderman
|
> Всем доброго! > Изменяю во второй таблице сервисов(win32k), адрес на свою > функцию (MyNtUserGetClipboardData), так вот вопрос > собственно в следующем, как мне получить доступ к > содержимому буфера в режиме ядра?
Вызвать оригинальную NtUserGetClipboardData, она все вернет :)
|
| |
Так вот проблема заключается в том, что после вызова... 01.09.06 13:13
Автор: LuckyDevil Статус: Незарегистрированный пользователь Отредактировано 01.09.06 13:28 Количество правок: 1
|
> > Вызвать оригинальную NtUserGetClipboardData, она все вернет > :) Так вот проблема заключается в том, что после вызова оригинальной функции NtUserGetClipboardData, я получаю Handle по которой и стоит искать требуемые данные, а как это сделать в режиме ядра, не имею представление, потому как GlobalLock(), которая и возвращает указатель на буфер с содержимым, в ядре соотвественно отсутсвует.
Что можно сделать чтобы попасть к содержимому буфера?
Вот что возвращает оригинальная функция
hLocale: F297FD34; uFmtRet: 13; fGlobalHandle: 1
hData: 00BA0010 <- это и есть хэндл который возвращает NtUserGetClipboardData
|
| | |
::OpenClipboard(NULL); 01.09.06 13:24
Автор: Killer{R} <Dmitry> Статус: Elderman
|
::OpenClipboard(NULL);
HANDLE clp = ::GetClipboardData(CF_TEXT);
printf("clp= '%s'\n",clp);
::CloseClipboard();
Прекрасно работает без GlobalLock ;)
Правда могут быть оказии, например с CF_BITMAP
|
| | | |
Наверное я не так явно указал, что работаю в режиме... 01.09.06 13:33
Автор: LuckyDevil Статус: Незарегистрированный пользователь
|
> ::OpenClipboard(NULL); > HANDLE clp = ::GetClipboardData(CF_TEXT); > printf("clp= '%s'\n",clp); > ::CloseClipboard(); > > Прекрасно работает без GlobalLock ;) > Правда могут быть оказии, например с CF_BITMAP
Наверное я не так явно указал, что работаю в режиме ядра(Kernel Mode).
То что возвращает HANDLE clp = ::GetClipboardData(CF_TEXT);, это адрес относящийся к к контексту текущего приложения(User Mode) или я что-то путаю?
|
| | | | |
Да нет вполне явно 01.09.06 14:22
Автор: Killer{R} <Dmitry> Статус: Elderman
|
> Наверное я не так явно указал, что работаю в режиме > ядра(Kernel Mode). > То что возвращает HANDLE clp = > ::GetClipboardData(CF_TEXT);, это адрес относящийся к к > контексту текущего приложения(User Mode) или я что-то > путаю? очень похоже на то. Соответственно ты его можешь и прочитать/записать, не забывая про ProbeForRead/Write ессесно.
|
| | | | | |
Не могу, на ProbeForRead/Write получаю исключение :( 02.09.06 14:37
Автор: LuckyDevil Статус: Незарегистрированный пользователь
|
|
|
|