163博客迁移!
(一)监控注册表信息(CmRegisterCallback()):
typedef struct _CAPTURE_REGISTRY_MANAGER
{
PDEVICE_OBJECT deviceObject;
BOOLEAN bReady;
LARGE_INTEGER registryCallbackCookie;
LIST_ENTRY lQueuedRegistryEvents;
KTIMER connectionCheckerTimer;
KDPC connectionCheckerFunction;
KSPIN_LOCK lQueuedRegistryEventsSpinLock;
ULONG lastContactTime;
} CAPTURE_REGISTRY_MANAGER , *PCAPTURE_REGISTRY_MANAGER;
CAPTURE_REGISTRY_MANAGER g_RegistrContext;
memset(&
g_RegistrContext,0,sizeof(
g_RegistrContext));
CmRegisterCallback(
RegistryCallback, &
g_RegistrContext, &
g_RegistrContext.registryCallbackCookie);
NTSTATUS
RegistryCallback(IN PVOID CallbackContext, IN PVOID Argument1, IN PVOID Argument2); ---这个就是注册表的监控函数了,一旦系统注册表修改,就会进入这个回调, 在这里可以读取任意的注册表的值,然后查看是否有被修改。
(二)进程的监控(PsSetCreateProcessNotifyRoutine()):
PsSetCreateProcessNotifyRoutine(
pfpCreateProcessNotify,FALSE);
VOID
pfpCreateProcessNotify(
IN HANDLE ParentId,
IN HANDLE ProcessId,
IN BOOLEAN Create
)
----这个就是进程的监控函数,一旦有出现进程创建,则会进入该函数,可以查看进程是否和文件的进程匹配,子父关系
(三) Resource与Fast Mutexes
http://www.cnblogs.com/gussing/archive/2012/12/31/2840602.html ---<WDK的同步锁机制: Resource与Fast Mutexes>