好用 转:删除,修改注册表中需要设置权限的项

本文提供了一段C语言代码示例,展示了如何通过修改注册表键的权限来删除指定的USB设备注册表项。该过程涉及使用Windows API函数如SetEntriesInAcl和SetNamedSecurityInfo等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

源地址: http://xue23.blog.163.com/blog/static/97934420068383532200/
作者博客:http://xue23.blog.163.com/

 

#include <Aclapi.h>#include <shlwapi.h>BOOL DeleteHardwareKey(void){    LPTSTR lpObjectName;    SE_OBJECT_TYPE ObjectType; 

    PACL OldDACL,NewDACL;
    PSECURITY_DESCRIPTOR SD;
    EXPLICIT_ACCESS ea;

    lpObjectName = "MACHINE\\SYSTEM\\CurrentControlSet\\Enum\\Usb\\Vid_1106&Pid_0100";

    ObjectType =SE_REGISTRY_KEY;

    if (SetEntriesInAcl(0, NULL, NULL, &OldDACL)!=ERROR_SUCCESS)
        return FALSE;

    if (SetEntriesInAcl(0, NULL, NULL, &NewDACL)!=ERROR_SUCCESS)
        return FALSE;

    if(GetNamedSecurityInfo(lpObjectName, ObjectType,
                          DACL_SECURITY_INFORMATION,
                          NULL, NULL,
                          &OldDACL,
                          NULL, &SD) != ERROR_SUCCESS)
           printf("指定的键不存在!");

    ZeroMemory(&ea, sizeof(EXPLICIT_ACCESS));

    BuildExplicitAccessWithName(&ea,
                                "Everyone",      // name of trustee
                                GENERIC_ALL,     // type of access
                                SET_ACCESS,      // access mode
                                SUB_CONTAINERS_AND_OBJECTS_INHERIT); //让自健继承他的权限; inheritance mode

    
    if(SetEntriesInAcl(1, &ea, NULL, &NewDACL) != ERROR_SUCCESS)
          goto Cleanup;

      SetNamedSecurityInfo(lpObjectName, ObjectType,
          DACL_SECURITY_INFORMATION,
          NULL, NULL,
          NewDACL, NULL);

   SHDeleteKey(HKEY_LOCAL_MACHINE,_T("SYSTEM\\CurrentControlSet\\Enum\\Usb\\Vid_1106&Pid_0100"));

    BuildExplicitAccessWithName(&ea,
                                "Everyone",      // name of trustee
                                GENERIC_READ,     // type of access
                                SET_ACCESS,      // access mode
                                NO_INHERITANCE); //让自健继承他的权限; inheritance mode

    if(SetEntriesInAcl(1, &ea, NULL, &OldDACL) != ERROR_SUCCESS)
       goto Cleanup;

     SetNamedSecurityInfo(lpObjectName, ObjectType,
          DACL_SECURITY_INFORMATION,
          NULL, NULL,
          OldDACL,
          NULL);

Cleanup:
    if(SD != NULL)
          LocalFree((HLOCAL) SD);
    if(NewDACL != NULL)
          LocalFree((HLOCAL) NewDACL);
    if(OldDACL != NULL)
          LocalFree((HLOCAL) OldDACL);

 return TRUE;
}

 

注意:

 lpObjectName = "MACHINE\\SYSTEM\\CurrentControlSet\\Enum\\Usb\\Vid_1106&Pid_0100"; 

SHDeleteKey(HKEY_LOCAL_MACHINE,_T("SYSTEM\\CurrentControlSet\\Enum\\Usb\\Vid_1106&Pid_0100"));

的区别 

 

 

 

转载于:https://www.cnblogs.com/zkliuym/archive/2010/07/24/1784329.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值