c - 如何保护注册表不使用 deleteservice?

标签 c windows driver wdk

我实现了以下代码来保护使用 cmregistercallback 的注册表。

当“Windows Registry Edit”访问注册表时,我的代码运行良好。

但是当我使用 cmd - sc delete 'service' 获得管理员权限时,注册表被删除了。

NTSTATUS RegistryFilterCallback(IN PVOID _CallbackContext, IN PVOID _FuncClass, IN PVOID _RegKeyInfo)
{
    UNREFERENCED_PARAMETER(_CallbackContext);
    NTSTATUS Status = STATUS_SUCCESS;
    REG_NOTIFY_CLASS NotifyClass = (REG_NOTIFY_CLASS)(ULONG_PTR)_FuncClass;

    if (IsAllowProcess()== TRUE)
    {
        return Status;
    }

    switch (NotifyClass)
    {
        case RegNtPreOpenKeyEx:
        {
            PREG_CREATE_KEY_INFORMATION RegInfo = (PREG_CREATE_KEY_INFORMATION)_RegKeyInfo;

            if (RegPreOpenKey(RegInfo->RootObject, RegInfo->CompleteName))
            {
                DbgPrint("RegNtPreOpenKeyEx : Prevent Opening Handle\n");
                Status = STATUS_ACCESS_DENIED;
            }

            break;
        }

        case RegNtPreDeleteKey:
        {
                DbgPrint("RegNtDeleteKey : Prevent delete Handle\n");

                Status = MyDeleteKey((PUNICODE_STRING)_RegKeyInfo);

                break;
        }
        case RegNtPreDeleteValueKey:

            DbgPrint("RegNtPreDeleteValueKey : Prevent delete Handle\n");

            break;

        case RegNtPreUnLoadKey:

            DbgPrint("RegNtPreUnLoadKey : Prevent delete Handle\n");

            break;
    }

    return Status;
}

最佳答案

我不知道 IsAllowProcess 的作用,但它可能只会阻止“用户进程”?

SCM 作为系统运行,它可能会删除注册表项,而不是 sc.exe。

管理员可以使用各种技巧将 cmd.exe 实例作为系统启动。真正的解决方案是不要给不受信任的用户管理员帐户。

关于c - 如何保护注册表不使用 deleteservice?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57304687/

相关文章:

c - 如何为 Windows 实现 USB 设备驱动程序?

检查非对称回文

c - 如何打印 2D 战舰游戏

c - 后续Fork的逻辑

c - 几个基本的C问题

c# - 在 Windows 2008 R2 中注册我的密码过滤器后没有结果

c++ - 使用 UPnP 进行移植

windows - 有什么方法可以修复 pgpass.conf 在 Windows 上正常工作吗?

mongodb - 无法通过 mongo 的官方 node.js 驱动程序进行身份验证,只能通过 mongo shell 进行身份验证。 (MongoDB Cloud Manager 副本部署)

javascript - 用于 NodeJS 的 IBM Informix 驱动程序 - 在 MacOS 上设置环境变量