📄 securitydescriptor.cpp
字号:
#include <windows.h>
#include <iostream>
#include <strstrea.h>
int main(int, char **)
{
PSECURITY_DESCRIPTOR pSD = (PSECURITY_DESCRIPTOR)
::LocalAlloc(LPTR, SECURITY_DESCRIPTOR_MIN_LENGTH);
if (pSD == NULL)
{
std::cout << "LocalAlloc failed." << endl;
return 0;
}
if (!::InitializeSecurityDescriptor(pSD,
SECURITY_DESCRIPTOR_REVISION))
{
std::cout << "InitializeSecurityDescriptor failed."
<< endl;
return 0;
}
DWORD cbACL = 1024;
PACL pACLNew = (PACL) ::LocalAlloc(LPTR, cbACL);
if (pACLNew == NULL)
{
std::cout << "LocalAlloc failed." << endl;
return 0;
}
if (!::InitializeAcl(pACLNew, cbACL, ACL_REVISION2))
{
std::cout << "InitializeAcl failed." << endl;
return 0;
}
DWORD cbSID = 1024;
PSID pSID = (PSID) ::LocalAlloc(LPTR, cbSID);
PSID_NAME_USE psnuType = (PSID_NAME_USE)
::LocalAlloc(LPTR, 1024);
LPSTR lpszDomain;
DWORD cchDomainName = 80;
lpszDomain = (LPSTR) ::LocalAlloc(LPTR, cchDomainName);
if (pSID==NULL || psnuType==NULL || lpszDomain==NULL)
{
std::cout << "LocalAlloc failed." << endl;
return 0;
}
if (!::LookupAccountName((LPSTR) NULL,
"Administrator",
pSID,
&cbSID,
lpszDomain,
&cchDomainName,
psnuType))
{
std::cout << "LookupAccountName failed." << endl;
return 0;
}
if (!::IsValidSid(pSID))
{
std::cout << "SID is not valid." << endl;
}
else
{
std::cout << "SID is valid." << endl;
}
if (!::AddAccessAllowedAce(pACLNew,
ACL_REVISION2,
GENERIC_ALL,
pSID))
{
std::cout << "AddAccessAllowedAce failed." << endl;
return 0;
}
if (!::SetSecurityDescriptorDacl(pSD,
TRUE,
pACLNew,
FALSE))
{
std::cout << "SetSecurityDescriptorDacl failed."
<< endl;
return 0;
}
SECURITY_ATTRIBUTES sa;
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = pSD;
sa.bInheritHandle = TRUE;
DWORD dw = 0;
HKEY hk = NULL;
LONG l = ::RegCreateKeyEx(HKEY_LOCAL_MACHINE,
"SOFTWARE\\MyKey", 0, "", 0,
KEY_READ | KEY_WRITE, &sa, &hk, &dw);
::FreeSid(pSID);
if(pSD != NULL)
{
::LocalFree((HLOCAL) pSD);
}
if(pACLNew != NULL)
{
::LocalFree((HLOCAL) pACLNew);
}
if(psnuType != NULL)
{
::LocalFree((HLOCAL) psnuType);
}
if(lpszDomain != NULL)
{
::LocalFree((HLOCAL) lpszDomain);
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -