PsSetCreateProcessNotifyRoutine adds a driver-supplied callback routine to, or removes it from, a list of routines to be called whenever a process is created or deleted. Код (Text): NTSTATUS PsSetCreateProcessNotifyRoutine( IN PCREATE_PROCESS_NOTIFY_ROUTINE NotifyRoutine, IN BOOLEAN Remove ); Parameters NotifyRoutine Specifies the entry point of a caller-supplied process-creation callback routine. Remove Indicates whether the routine specified by NotifyRoutine should be added to or removed from the system's list of notification routines. If FALSE, the specified routine is added to the list. If TRUE, the specified routine is removed from the list. Include ntddk.h Return Value PsSetCreateProcessNotifyRoutine can return one of the following: STATUS_SUCCESS The given NotifyRoutine is now registered with the system. STATUS_INVALID_PARAMETER The given NotifyRoutine has already been registered so this is a redundant call, or the system has reached its limit for registering process-creation callbacks.
А что, прочитать в MSDN что делает CreateProcess, и сравнить с тем, что требуется (в заголовке темы/тексте сообщения) не получается? Если имеется в виду перехват API CreateProcess с целью перехвата запуска процессов /sorry за стиль, ничего в голову не идет/, то работать оно будет. Но способ, предложенный Ms Rem, с точки зрения практического использования удобнее. ABC Старайтесь формулировать вопрос так, чтобы он был понятен окружающим.
ну и как интересно стало из NotifyRoutine запретить запуск у меня например не получилоcь работоспособен вариант хука на все процессы kernel32!CreateProcessInternalW или (титиретически, сам не пробовал) хук куда-нибудь на ntoskrnl!ZwCreateSection
NotifyRoutine используется только для мониторинга запуска, но не для запрета. Работоспособен только в Windows XP, в 2000 нет такой функции. Да и обойти можно запустив процесс стредствами NativeAPI. Не лучший вариант, так как эта ф-я еще много для чего используется. Лучше на ZwCreateProcess и в Windows XP еще на ZwCreateProcessEx
Краткая пробежка по www.google.com показала, что это вполне возможно. Самостоятельно экспериментировать времени, к сожалению, нет.
Не лучше, так как 100% гарантировать нахождение данной функции нельзя. И поиск по сигнатрурам далеко не лучший метод, так как привязан к конкретной версии ОС и даже часто к конкретному SP. Более универсальный метод - дизассемблировать функцию в которой есть ссылка на искомый элемент, определять команду которая к нему обращается и извлекать оттуда. При правильной реализации можно добиться работоспособности такого поиска на любой ос начиная с NT4 и заканчивая лонгхорном, даже возможно это будет работать и на следующих версиях ОС, хотя 100% гарантию дать нельзя. Искать неэкспортируемые символы и использовать их нужно только тогда, когда это обязательно требуется для решения задачи. А если можно обойтись без этого, то делать так не стоит.
есть и на в2к и на нт4 и даже на 9х... обойти - да, можно причем сорцы общедоступны ну если только процессы то наверное, не пробовал мне просто приходится мониторить загрузку всех модулей поэтому я так люблю sections особенно их mapview
Не знаю, какая винда у тебя, но у меня kernel32 от Windows 2000 такую функцию не экспортирует. Если не вериться, могу выложить kernel32.
не то чтобы не верится просто на основе этой функции у меня лично одна утиль базируется уже лет так 5 во всех имеющих распространение виндах выкладывать не обязательно, скажи просто номера версий и таймстампы - я уж найду как-нить навскидку с первой попавшейся машины (w2k as sp4): ----- tdump kernel32.dll > kernel32.inf Turbo Dump Version 4.2.16.1 Copyright (c) 1988, 1996 Borland International Display of File KERNEL32.DLL Old Executable Header DOS File Size B5710h (743184. ) Load Image Size 450h ( 1104. ) Relocation Table entry count 0000h ( 0. ) Relocation Table address 0040h ( 64. ) Size of header record (in paragraphs) 0004h ( 4. ) Minimum Memory Requirement (in paragraphs) 0000h ( 0. ) Maximum Memory Requirement (in paragraphs) FFFFh ( 65535. ) File load checksum 0000h ( 0. ) Overlay Number 0000h ( 0. ) Initial Stack Segment (SS:SP) 0000:00B8 Program Entry Point (CS:IP) 0000:0000 Portable Executable (PE) File Header base: 000000C8 CPU type 80386 Flags 230E [ executable backwards 32bit library ] DLL flags 0000 [ ] Linker Version 5.C Time stamp 3EF274DC O/S Version 5.0 User Version 5.0 Subsystem Version 4.0 Subsystem 0003 [ Windows character ] Object count 00000004 [skipped] Exports from KERNEL32.dll 827 exported name(s), 827 export addresse(s). Ordinal base is 1. Ordinal RVA Name ------- -------- ---- 0000 0001b65b AddAtomA 0001 0000df58 AddAtomW [skipped] 0071 000206b1 CreatePipe 0072 0001c0a0 CreateProcessA 0073 0001bf86 CreateProcessInternalA 0074 00011ba0 CreateProcessInternalW 0075 00038628 CreateProcessInternalWSecure 0076 0000b252 CreateProcessW 0077 000133c3 CreateRemoteThread --------
http://ms-rem.dot-link.net/kernel32.rar Kernel32.dll от Win2K SP2. Я тоже с перехватом этой функции прогу както делал, и у меня она в этой винде не запустилась по причине ее отсутствия.