⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 securitydescriptor.cpp

📁 VC++串口通信设。本书详细说明讲解了在VC++环境下编写串口通信得过程。值得一看
💻 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 + -