能力值:
( LV2,RANK:10 )
|
-
-
2 楼
在 DISPATCH_LEVEL 的 IRQL 下访问注册表的函数是不推荐的,因为它可能会导致系统性能下降,安全性隐患以及蓝屏等严重问题发生。因此,在内核中访问注册表的函数应该在 PASSIVE_LEVEL 或者低于 PASSIVE_LEVEL 的 IRQL 中进行。如果一定需要在 DISPATCH_LEVEL 中访问注册表,可以使用 CmRegisterCallbackEx 函数在 PASSIVE_LEVEL 或者低于 PASSIVE_LEVEL 的 IRQL 中注册回调函数,回调函数可以在 DISPATCH_LEVEL 的 IRQL 下执行。 以下是一个使用 CmRegisterCallbackEx 函数注册注册表回调函数的示例代码:
#include <ntddk.h>
#define REG_NOTIFY_CLASS_KEY 3
#define REG_NOTIFY_CLASS_VALUE 4
VOID RegistryCallback(
IN PVOID CallbackContext,
IN PVOID Argument1,
IN PVOID Argument2
)
{
PUNICODE_STRING pKeyName = (PUNICODE_STRING)Argument1;
if (pKeyName != NULL)
{
KdPrint(("registry key %wZ is modified\n", pKeyName));
}
}
VOID DriverUnload(
IN PDRIVER_OBJECT DriverObject
)
{
ULONG ulRegCookie = 0;
CmUnRegisterCallback(ulRegCookie);
}
NTSTATUS DriverEntry(
IN PDRIVER_OBJECT DriverObject,
IN PUNICODE_STRING RegistryPath
)
{
NTSTATUS status;
status = CmRegisterCallbackEx(
RegistryCallback,
&ExNotifyCallback,
DriverObject,
NULL,
&ulRegCookie,
NULL
);
if (!NT_SUCCESS(status))
{
KdPrint(("Failed to register registry callback function\n"));
}
DriverObject->DriverUnload = DriverUnload;
return status;
}
在以上代码中,我们在驱动入口函数(DriverEntry)中使用 CmRegisterCallbackEx 函数注册了一个回调函数(RegistryCallback),并将当前驱动对象(DriverObject)作为上下文参数传递给回调函数。回调函数会在任意进程在注册表上作出更改时被调用。 在此示例代码中,我们只是简单地使用 KdPrint 函数输出了更改的键名,实际使用中需要根据需要修改回调函数具体实现。 请注意,此示例代码作为一个演示,不适用于所有情况。具体实现需要根据实际情况进行修改和完善。
|
能力值:
( LV9,RANK:195 )
|
-
-
3 楼
caocaofff
在 DISPATCH_LEVEL 的 IRQL 下访问注册表的函数是不推荐的,因为它可能会导致系统性能下降,安全性隐患以及蓝屏等严重问题发生。因此,在内核中访问注册表的函数应该在 PASSIVE_LE ...
这是chatgpt?
|
能力值:
( LV2,RANK:10 )
|
-
-
4 楼
|
能力值:
( LV2,RANK:10 )
|
-
-
5 楼
牛牛牛
|
|
|