海阔天空

海阔凭鱼跃 天高任鸟飞

 

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

源地址: 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"));

的区别 

 

 

 

posted on 2010-07-24 15:10  liuym  阅读(1995)  评论(0编辑  收藏  举报

导航