Модераторы: feodorv, GremlinProg, xvr, Fixin
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перехват сообщений от Explorera, как определить, что за сообщение 
:(
    Опции темы
Friackazoid
Дата 13.9.2006, 23:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 23.2.2006

Репутация: нет
Всего: 3



Есть такая задача. Нужно мне перехватить сообщения от Explorera и если это открытие файла определенного типа, то произвести ряд действий.

DLL'ку для перехвата написала, но как определить что это именно открытие и как проверить тип файла.

Пишу на Visual Studio C++

Заранее спасибо.
--------------------
Даже если тебя съели, то все равно есть два выхода.42Team блог
PM MAIL WWW ICQ GTalk   Вверх
NiJazz
Дата 14.9.2006, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Jazz coder
****


Профиль
Группа: Экс. модератор
Сообщений: 2286
Регистрация: 10.8.2003
Где: Москва

Репутация: 6
Всего: 23



Смотри в сторону Shell Extensions.
PM MAIL   Вверх
Friackazoid
Дата 14.9.2006, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 23.2.2006

Репутация: нет
Всего: 3



А нельзя ли чуть-чуть поподробнее ссылочку какую-нибудь
--------------------
Даже если тебя съели, то все равно есть два выхода.42Team блог
PM MAIL WWW ICQ GTalk   Вверх
supersonic
Дата 15.9.2006, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 21.6.2006

Репутация: нет
Всего: нет



Цитата

Нужно мне перехватить сообщения от Explorera 


В смысле сообщения ? Те что посылаются в оконную процедуру ? Что-то я не помню такого сообщения WM_OPENFILE. Если нужно просто перехватить событие открытия файла то тогда лучше хукать нэтивную функ. ZwCreateFile из ntdll.dll т.к. все остальные функ. по открытию файлов обращаются именно к ней. В обработчике перехва ZwCreateFile вызвать ZwQueryInformationFile для получения имени файла, т.к. в ZwCreateFile имя файла не передается.

[url=http://www.osronline.com/DDKx/kmarch/k111_9dte.htm[/url]
PM MAIL   Вверх
Friackazoid
Дата 16.9.2006, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 23.2.2006

Репутация: нет
Всего: 3



supersonic, 

Спасибо большое.  smile 
--------------------
Даже если тебя съели, то все равно есть два выхода.42Team блог
PM MAIL WWW ICQ GTalk   Вверх
Friackazoid
Дата 17.9.2006, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 23.2.2006

Репутация: нет
Всего: 3



Еще один аопрос вдогонку.
Перехватываю функцию ZwCreateFile изменением таблицы импорта (функия взята из книги Рихтера) пишу свю функцию
Код

NTSTATUS  
  HookCreate (
    OUT PHANDLE  FileHandle,
    IN ACCESS_MASK  DesiredAccess,
    IN POBJECT_ATTRIBUTES  ObjectAttributes,
    OUT PIO_STATUS_BLOCK  IoStatusBlock,
    IN PLARGE_INTEGER  AllocationSize  OPTIONAL,
    IN ULONG  FileAttributes,
    IN ULONG  ShareAccess,
    IN ULONG  CreateDisposition,
    IN ULONG  CreateOptions,
    IN PVOID  EaBuffer  OPTIONAL,
    IN ULONG  EaLength
    )


но мне выдаеться декларатион синтаксис ерор. Я думаю эо потому что надо подключить ntdll.dll в которой по всей видимости определен NTSTATUS как это сделать если HookCreate и функция перхвата также находятся в DLL'ке
--------------------
Даже если тебя съели, то все равно есть два выхода.42Team блог
PM MAIL WWW ICQ GTalk   Вверх
supersonic
Дата 18.9.2006, 10:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 21.6.2006

Репутация: нет
Всего: нет



NTSTATUS это просто любой 4-х байтовый тип, DWORD будет вместо него самый раз, остальные типы - POBJECT_ATTRIBUTES, PIO_STATUS_BLOCK, PLARGE_INTEGER  это структуры которые объявлены не то в WINNT-DKK не то еще где то, непомню щас. У меня есть тока описание для

Код

typedef struct _UNICODE_STRING 
{
  USHORT Length;
  USHORT MaximumLength;
  LPWSTR Buffer;
} UNICODE_STRING, *PUNICODE_STRING;
typedef struct _ANSI_STRING
{
  USHORT Length;
  USHORT MaximumLength;
  LPSTR Buffer;
} ANSI_STRING, *PANSI_STRING;
typedef struct _OBJECT_ATTRIBUTES 
{   ULONG Length;
    HANDLE RootDirectory;
    PUNICODE_STRING ObjectName;
    ULONG Attributes;
    PVOID SecurityDescriptor;        
    PVOID SecurityQualityOfService;  
} OBJECT_ATTRIBUTES, *POBJECT_ATTRIBUTES;


Описания остальных структур найди в инете и просто вставь из в свой файл. И еще - перехват через патчинг IAT не особо надежный, юзай лучше Detours от М$. Эта библа перехватывает АПИ методом сплайсинга, что гарантирует перехват в случаях вызова таргет-апи как через IAT, так и через LoadLibrary\GetProcAddress

Функцию-двойник лучше описать так 

Код

DWORD __stdcall HOOK_ZwCreateFile(..........)
{
       return ORIG_ZwCreateFile(...........);
}


Это сообщение отредактировал(а) supersonic - 18.9.2006, 11:31
PM MAIL   Вверх
Friackazoid
Дата 18.9.2006, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 23.2.2006

Репутация: нет
Всего: 3



supersonic, 

В очередной раз огромное спасибо smile 
--------------------
Даже если тебя съели, то все равно есть два выхода.42Team блог
PM MAIL WWW ICQ GTalk   Вверх
Friackazoid
Дата 22.9.2006, 02:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 148
Регистрация: 23.2.2006

Репутация: нет
Всего: 3



 smile 
Пользуюсь библиотекой Detours 
Код

DETOUR_TRAMPOLINE (DWORD WINAPI ZwCreateFileTrampoline (PHANDLE,ACCESS_MASK,
 POBJECT_ATTRIBUTES,    PIO_STATUS_BLOCK,PLARGE_INTEGER,    ULONG, ULONG,ULONG , 
ULONG, PVOID, ULONG),ZwCreateFile);
 

Но все время говорит что ZwCreateFile not found почему, ведь хеадер wdm.h подключен

Это сообщение отредактировал(а) Friackazoid - 22.9.2006, 02:31
--------------------
Даже если тебя съели, то все равно есть два выхода.42Team блог
PM MAIL WWW ICQ GTalk   Вверх
supersonic
Дата 25.9.2006, 19:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 21.6.2006

Репутация: нет
Всего: нет



Для этого ZwCreateFile я хук не делал, делал для другой нэтивной апи. Я ничего кроме detours.h не инклудил. Все что нужно объявлял в своем главном файле.

Код

typedef DWORD (__stdcall *TRUE_ZwCreateThread)
(OUT PHANDLE ThreadHandle, IN ACCESS_MASK DesiredAccess, IN POBJECT_ATTRIBUTES ObjectAttributes OPTIONAL,IN HANDLE ProcessHandle, OUT PCLIENT_ID ClientId,IN PCONTEXT ThreadContext,IN PINITIAL_TEB InitialTeb, IN BOOLEAN CreateSuspended);

TRUE_ZwCreateThread             ORIG_ZwCreateThread;

DWORD __stdcall HOOK_ZwCreateThread(
  OUT PHANDLE             ThreadHandle,
  IN ACCESS_MASK          DesiredAccess,
  IN POBJECT_ATTRIBUTES   ObjectAttributes OPTIONAL,
  IN HANDLE               ProcessHandle,
  OUT PCLIENT_ID          ClientId,
  IN PCONTEXT             ThreadContext,
  IN PINITIAL_TEB         InitialTeb,
  IN BOOLEAN              CreateSuspended)
{
MessageBox(0,"TEST","HOOK_ZwCreateThread",0);
return ORIG_ZwCreateThread(ThreadHandle,DesiredAccess,ObjectAttributes,ProcessHandle,ClientId,ThreadContext,InitialTeb,CreateSuspended);
}


HMODULE hNtDll = GetModuleHandle("ntdll.dll");
if(hNtDll == 0) hNtDll = LoadLibrary("ntdll.dll");


ORIG_ZwCreateThread = (TRUE_ZwCreateThread)
DetourFunction((PBYTE)GetProcAddress(hNtDll,"ZwCreateThread"),(PBYTE)HOOK_ZwCreateThread);


Это сообщение отредактировал(а) supersonic - 25.9.2006, 19:11
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Системное программирование и WinAPI"
Fixin
GremlinProg
xvr
feodorv
  • Большое количество информации и примеров с использованием функций WinAPI можно найти в MSDN
  • Описание сообщений, уведомлений и примеров с использованием компонент WinAPI (BUTTON, EDIT, STATIC, и т.п.), можно найти в MSDN Control Library
  • Непосредственно, перед созданием новой темы, проверьте заголовок и удостоверьтесь, что он отражает суть обсуждения.
  • После заполнения поля "Название темы", обратите внимание на наличие и содержание панели "А здесь смотрели?", возможно Ваш вопрос уже был решен.
  • Приводите часть кода, в которой предположительно находится проблема или ошибка.
  • Если указываете код, пользуйтесь тегами [code][/code], или их кнопочными аналогами.
  • Если вопрос решен, воспользуйтесь соответствующей ссылкой, расположенной напротив названия темы.
  • Один топик - один вопрос!
  • Перед тем как создать тему - прочтите это .

На данный раздел распространяются Правила форума и Правила раздела С++:Общие вопросы .


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Chipset, Step, Fixin, GremlinProg, xvr. feodorv.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Системное программирование и WinAPI | Следующая тема »


 




[ Время генерации скрипта: 0.0582 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.