这是在c++builder研究上的一段代码,可我不懂c++builder,请高手转一下!谢谢了!
文章地址:
http://www.ccrun.com/article.asp?i=563&d=tshoza原文如下:本文转自csdn,原作:MEFULEU (新手上路)
http://expert.csdn.net/Expert/topic/2194/2194594.xml?temp=.952038在2k系统操作注册表时,发现某些健必须要有权限问题;
察看各位大大的贴,可惜没有一个合适的结果;
有人说:可以提高使用者权限;但是事实上好像不是很好用;
经过艰苦.艰苦.艰艰苦苦;终于在msdn上找到了一些好动动;
不敢独享,(哎,我可不想某人,好东西藏到自己都忘了的地方)
整理出来一些对某些人有用的东西:嘿嘿,代码如下:
严重建议:大家都把好东西往上贴吧!!!!!!欢迎来信探讨: [email protected] //开始重新配置使用注册表的权限---------- LPTSTR lpObjectName;
SE_OBJECT_TYPE ObjectType; //#include <aclapi.h> PACL OldDACL,NewDACL;
PSECURITY_DESCRIPTOR SD;
EXPLICIT_ACCESS ea; lpObjectName = "MACHINE\\SYSTEM\\ControlSet001\\Enum\\Root"; ObjectType =SE_REGISTRY_KEY; //建立一个空的ACL;
if (SetEntriesInAcl(0, NULL, NULL, &OldDACL)!=ERROR_SUCCESS)
return; if (SetEntriesInAcl(0, NULL, NULL, &NewDACL)!=ERROR_SUCCESS)
return; //获取现有的ACL列表到OldDACL
if(GetNamedSecurityInfo(lpObjectName, ObjectType,
DACL_SECURITY_INFORMATION,
NULL, NULL,
&OldDACL,
NULL, &SD) != ERROR_SUCCESS)
Application->MessageBox("指定的键不存在!","提示",MB_OK); //设置用户名"Everyone"对指定的键有所有操作权到结构ea
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
// 本文转自 C++Builder研究 - http://www.ccrun.com/article.asp?i=563&d=tshoza
//合并结构ea和OldDACL的权限列表到新的NewDACL
if(SetEntriesInAcl(1, &ea, NULL, &NewDACL) != ERROR_SUCCESS)
goto Cleanup; //把新的ACL写入到指定的键
SetNamedSecurityInfo(lpObjectName, ObjectType,
DACL_SECURITY_INFORMATION,
NULL, NULL,
NewDACL,
NULL);
///////开始操作注册表//////////
//..........
////////// //恢复注册表的权限; 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; //把旧的ACL写入到指定的键
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);
文章地址:
http://www.ccrun.com/article.asp?i=563&d=tshoza原文如下:本文转自csdn,原作:MEFULEU (新手上路)
http://expert.csdn.net/Expert/topic/2194/2194594.xml?temp=.952038在2k系统操作注册表时,发现某些健必须要有权限问题;
察看各位大大的贴,可惜没有一个合适的结果;
有人说:可以提高使用者权限;但是事实上好像不是很好用;
经过艰苦.艰苦.艰艰苦苦;终于在msdn上找到了一些好动动;
不敢独享,(哎,我可不想某人,好东西藏到自己都忘了的地方)
整理出来一些对某些人有用的东西:嘿嘿,代码如下:
严重建议:大家都把好东西往上贴吧!!!!!!欢迎来信探讨: [email protected] //开始重新配置使用注册表的权限---------- LPTSTR lpObjectName;
SE_OBJECT_TYPE ObjectType; //#include <aclapi.h> PACL OldDACL,NewDACL;
PSECURITY_DESCRIPTOR SD;
EXPLICIT_ACCESS ea; lpObjectName = "MACHINE\\SYSTEM\\ControlSet001\\Enum\\Root"; ObjectType =SE_REGISTRY_KEY; //建立一个空的ACL;
if (SetEntriesInAcl(0, NULL, NULL, &OldDACL)!=ERROR_SUCCESS)
return; if (SetEntriesInAcl(0, NULL, NULL, &NewDACL)!=ERROR_SUCCESS)
return; //获取现有的ACL列表到OldDACL
if(GetNamedSecurityInfo(lpObjectName, ObjectType,
DACL_SECURITY_INFORMATION,
NULL, NULL,
&OldDACL,
NULL, &SD) != ERROR_SUCCESS)
Application->MessageBox("指定的键不存在!","提示",MB_OK); //设置用户名"Everyone"对指定的键有所有操作权到结构ea
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
// 本文转自 C++Builder研究 - http://www.ccrun.com/article.asp?i=563&d=tshoza
//合并结构ea和OldDACL的权限列表到新的NewDACL
if(SetEntriesInAcl(1, &ea, NULL, &NewDACL) != ERROR_SUCCESS)
goto Cleanup; //把新的ACL写入到指定的键
SetNamedSecurityInfo(lpObjectName, ObjectType,
DACL_SECURITY_INFORMATION,
NULL, NULL,
NewDACL,
NULL);
///////开始操作注册表//////////
//..........
////////// //恢复注册表的权限; 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; //把旧的ACL写入到指定的键
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);
解决方案 »
- 关于线程终止
- rzrichedit如何调用含有图片的RTF文档?
- dbgrideh 过滤中碰到的问题
- 关于combox的问题!
- 请教:为什么我用FastReport的[TotalPages]得到的值是0呢?
- 求救,谁会制作帮助文件,
- 求 delphi2010 控制WebBrowser 滚动条的方法?
- 初学者的一个简单的数据库问题,请各位帮忙。(强烈关注)
- TMD DELPHI6.0
- 在delphi5中如何用getcomputername()得到本地计算机名,请给源码
- 请教高手,如何用QReport同时显示两个数据源ADODataset的数据。。。。。。
- Delphi对象模型这个Create,再次开个贴来讨论,非想搞清楚不可
...
var
lpObjectName:LPTSTR;
OldDACL,NewDACL:PACL ; //uses aclapi
ObjectType:SE_OBJECT_TYPE ; //uses AccCtrl
SD:PSECURITY_DESCRIPTOR;
ea: EXPLICIT_ACCESS;
label Cleanup;
begin
lpObjectName := 'MACHINE\\SYSTEM\\ControlSet001\\Enum\\Root';// ObjectType :=SE_REGISTRY_KEY; //建立一个空的ACL;
if SetEntriesInAcl(0, nil, nil, OldDACL)<>ERROR_SUCCESS then
exit; if (SetEntriesInAcl(0, nil, nil, NewDACL)<>ERROR_SUCCESS) then
exit; //获取现有的ACL列表到OldDACL
if GetNamedSecurityInfo(lpObjectName, ObjectType,
DACL_SECURITY_INFORMATION,
nil, nil,
OldDACL,
nil, SD) <> ERROR_SUCCESS then
Application.MessageBox('指定的键不存在!','提示',MB_OK); //设置用户名"Everyone"对指定的键有所有操作权到结构ea
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
// 本文转自 C++Builder研究 - http://www.ccrun.com/article.asp?i=563&d=tshoza
//合并结构ea和OldDACL的权限列表到新的NewDACL
if SetEntriesInAcl(1, @ea, nil, NewDACL) <> ERROR_SUCCESS then
goto Cleanup; //把新的ACL写入到指定的键
SetNamedSecurityInfo(lpObjectName, ObjectType,
DACL_SECURITY_INFORMATION,
nil, nil,
NewDACL,
nil);
///////开始操作注册表//////////
//..........
////////// //恢复注册表的权限; BuildExplicitAccessWithName(@ea,
'Everyone', // name of trustee
GENERIC_READ, // type of access
SET_ACCESS, // access mode
NO_INHERITANCE); //让自健继承他的权限; inheritance mode if SetEntriesInAcl(1, @ea, nil, OldDACL) <> ERROR_SUCCESS then
goto Cleanup; //把旧的ACL写入到指定的键
SetNamedSecurityInfo(lpObjectName, ObjectType,
DACL_SECURITY_INFORMATION,
nil, nil,
OldDACL,
nil); //释放指针
Cleanup:
if SD <> nil then
LocalFree(HLOCAL (SD));
if NewDACL <> nil then
LocalFree(HLOCAL (NewDACL));
if OldDACL <> nil then
LocalFree(HLOCAL( OldDACL));