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

📄 defaultlaunchpermission.cpp

📁 VC++串口通信设。本书详细说明讲解了在VC++环境下编写串口通信得过程。值得一看
💻 CPP
字号:
#include <windows.h>
#include <iostream>
#include <strstrea.h>

strstream GetFormattedError()
{
    strstream str;
    DWORD dwLastError=::GetLastError();
    if(!dwLastError)
    {
        return str;
    }
    BYTE width=0;
    DWORD flags;
    flags  = FORMAT_MESSAGE_MAX_WIDTH_MASK &width;
    flags |= FORMAT_MESSAGE_FROM_SYSTEM
             |FORMAT_MESSAGE_IGNORE_INSERTS;
    char s[1024];
    ::FormatMessage(flags, NULL, dwLastError,
                MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT),
                s, 1024, NULL);
    str << s;
    return str;
}

int main(int argc, char **argv)
{
    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,
            1,
            pSID))
    {
        std::cout << "AddAccessAllowedAce failed." << endl;
        return 0;
    }

    if (!::SetSecurityDescriptorDacl(pSD,
            TRUE,              
            pACLNew,
            FALSE))            
    {
        std::cout << "SetSecurityDescriptorDacl failed." 
                  << endl;
        return 0;
    }

    PSECURITY_DESCRIPTOR pSRSD = NULL;
    DWORD cbSD = 0;
    if (!::MakeSelfRelativeSD(pSD, pSRSD, &cbSD))
    {
        DWORD dw = ::GetLastError();
        if( dw != ERROR_INSUFFICIENT_BUFFER )
        {
            std::cout << "Error ::MakeSelfRelativeSD " 
                      << dw << endl;
            return 0;
        }
    }
    pSRSD = (PSECURITY_DESCRIPTOR) ::LocalAlloc(LPTR, cbSD);
    if (!::MakeSelfRelativeSD(pSD, pSRSD, &cbSD))
    {
        std::cout << "Error ::MakeSelfRelativeSD " 
                  << ::GetFormattedError().str() << endl;
        return 0;
    }

    HKEY hkey;
    if (::RegOpenKeyEx(HKEY_LOCAL_MACHINE, 
                      "SOFTWARE\\Microsoft\\Ole", 0, 
                      KEY_SET_VALUE, &hkey)!=ERROR_SUCCESS)
    {
        std::cout << "Error ::RegOpenKeyEx " 
                  << ::GetFormattedError().str() << endl;
        return 0;
    }

    if (::RegSetValueEx(hkey, "DefaultAccessPermission", 
                        0, REG_BINARY,
                        (BYTE *)pSRSD, cbSD)!=ERROR_SUCCESS)
    {
        std::cout << "Error ::RegSetValueEx " 
                  << ::GetFormattedError().str() << endl;
        return 0;
    }

        ::FreeSid(pSID);
        if(pSD != NULL)
        {
            ::LocalFree((HLOCAL) pSD);
        }
        if(pSRSD != NULL)
        {
            ::LocalFree((HLOCAL) pSRSD);
        }
        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 + -