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