Наверное я не так явно указал, что работаю в режиме...01.09.06 13:33 Число просмотров: 2171 Автор: 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) или я что-то путаю?
Всем доброго!
Изменяю во второй таблице сервисов(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); > 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 Статус: Незарегистрированный пользователь