Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.03.2011, 19:15   #1
hiho
Форумчанин
 
Регистрация: 29.04.2008
Сообщений: 100
По умолчанию Блокоровка CAD и CSE

Решил попробовать написать DLL для перехвата вызова Диспетчера задач.
Так как простым перехватом клавиш тут не обойтись, пришлось инжектиться в Winlogon для перехвата окна 'SAS window" и заменять функцию обработки на свою, перехватывая сообщение WM_HOTKEY.

В итоге получили примерно так:

Код:
HWND    g_hSASwnd    = NULL;
WNDPROC g_OldSASProc = NULL;

LRESULT WINAPI NewSASProc( HWND hSAS, UINT msg, WPARAM wParam, LPARAM lParam )
{
    if( WM_HOTKEY == msg ){
         if( MAKELONG( MOD_CONTROL | MOD_ALT, VK_DELETE ) == lParam ){
              MessageBoxEx( GetActiveWindow(), TEXT("Ctrl + Alt + Del"), 
                                               TEXT("SAS Hook"), MB_DEFAULT_DESKTOP_ONLY, 0 );
              return 0;
             }

         if( MAKELONG( MOD_CONTROL | MOD_SHIFT, VK_ESCAPE ) == lParam ){
              MessageBoxEx( GetActiveWindow(), TEXT("Ctrl + Shift + Esc"), 
                                               TEXT("SAS Hook"), MB_DEFAULT_DESKTOP_ONLY, 0 );
              return 0;
             }
        }

    return CallWindowProc( g_OldSASProc, hSAS, msg, wParam, lParam );
}

BOOL WINAPI DllMain( HINSTANCE hinstDll, DWORD fdwReason, PVOID fImpLoad )
{
	if( DLL_PROCESS_ATTACH == fdwReason ){
         g_hSASwnd = FindWindow( TEXT("SAS Window class"), TEXT("SAS window") );

         if( g_hSASwnd != NULL )
              g_OldSASProc = (WNDPROC) SetWindowLong( g_hSASwnd, GWL_WNDPROC, (LONG) NewSASProc );
	    }

	if( DLL_PROCESS_DETACH == fdwReason ){
         if( g_hSASwnd != NULL )
              SetWindowLong( g_hSASwnd, GWL_WNDPROC, (LONG) g_OldSASProc );
        }

	return TRUE;
}
Но данная бяка на семерке работать отказывается. Если есть возможность, погоняйте на XP и помогите решить проблему с семеркой
Вложения
Тип файла: rar SASHook.rar (28.1 Кб, 18 просмотров)
hiho вне форума Ответить с цитированием
Старый 29.03.2011, 01:50   #2
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

Имею мнение что вызов диспетчера задач в честном софте легче запрещать политиками. Нужный ключ реестра легко гуглится. Также можно сразу же запретить и вызов Rеgеdit'а- также изменением ключа реестра который также легко гуглится.
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Старый 29.03.2011, 10:38   #3
hiho
Форумчанин
 
Регистрация: 29.04.2008
Сообщений: 100
По умолчанию

Конечно же проще, но так намного интересней)
hiho вне форума Ответить с цитированием
Старый 30.03.2011, 18:09   #4
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

при нажатии альт+ктрл+делит винлогон вызывает "LogonUI.exe"(эту заставочку на весь экран с выбором диспетчера задач или есчо чего либо), при выборе запуска диспетчера процессов винлогон же запускает taskmgr.exe с помощью CreateProcessAsUserW все происходит.. почему бы не перехватить в винлогоне эту функцию и проверять что запускает юзер?
завтра может посмотрю по самому нажатию
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Старый 31.03.2011, 03:06   #5
hiho
Форумчанин
 
Регистрация: 29.04.2008
Сообщений: 100
По умолчанию

А "LogonUI.exe" запускается тоже с помощью CreateProcessAsUserW? Если да, то перехватить ее не составит труда. И фильтруя по "LPCTSTR lpApplicationName" можем перехватить то, что нам надо. Спасибо большое. Так будет проще.
hiho вне форума Ответить с цитированием
Старый 31.03.2011, 04:51   #6
yuran666666
Форумчанин
 
Аватар для yuran666666
 
Регистрация: 23.04.2009
Сообщений: 346
По умолчанию

Да, с помощью этой функции и запускается. Только может быть что и не только при нажатии альт,ктрл, дел, а и в каких то других случаях - я не проверял, но вообще вроде все так.
Нет, ну правда..
yuran666666 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выбор E-CAD Ivan_32 Софт 3 09.12.2009 21:04
Как получать данные из чертежа CAD системы Компас V7? Stilet Общие вопросы Delphi 0 28.01.2009 16:11
нужны исходники программы которая открывает CAD DWG DXF форматы 1234 Софт 1 26.08.2008 09:49