青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-60  評(píng)論-262  文章-1  trackbacks-0
我們編寫服務(wù)程序的時(shí)候可能會(huì)創(chuàng)建具名內(nèi)核對(duì)象如互斥量, 信號(hào)量, 事件, 文件映射, 等等, 然后, 這個(gè)有名字的內(nèi)核對(duì)象可能在某一個(gè)具體的用戶賬號(hào)內(nèi)運(yùn)行的程序被訪問到, 甚至是受限的用戶帳戶內(nèi)運(yùn)行的程序. 這時(shí)就會(huì)出現(xiàn)創(chuàng)建不了該具名內(nèi)核對(duì)象的現(xiàn)象, 錯(cuò)誤碼為 "拒絕訪問".

經(jīng)過反復(fù)查閱資料, 我給出一個(gè)解決方案, 就是在創(chuàng)建內(nèi)核對(duì)象之前, 先創(chuàng)建一個(gè)屬于 everyone 群組的權(quán)限為完全控制的安全描述符, 然后將這個(gè)安全描述符作為創(chuàng)建內(nèi)核對(duì)象的函數(shù)的必須的參數(shù)傳入. 這樣, 整個(gè)正在運(yùn)行的操作系統(tǒng)的任何進(jìn)程都能訪問這個(gè)內(nèi)核對(duì)象了.

代碼如下:

typedef struct SDSTUFF
{
    PSID psidEveryone;
    PACL pDACL;
    PSECURITY_DESCRIPTOR pSD;
} SDSTUFF;

typedef union _ACE_UNION{ 
    ACE_HEADER aceHeader; 
    ACCESS_ALLOWED_ACE aceAllowed; 
    ACCESS_DENIED_ACE aceDenied; 
    SYSTEM_AUDIT_ACE aceAudit; 
* PACE_UNION; 

ULONG CalculateACLSize(PACL pACLOld, PSID
* ppSidArray, int nNumSids, PACE_UNION * ppACEs, int nNumACEs); 

EXTERN_C BOOL CreateEveryoneSD(OUT SDSTUFF 
* pSDStuff) 
{
    BOOL bResult 
= FALSE; 
    PSID psidArray[
2= { 0 };
    ULONG lACLSize 
= 0
    
    
do 
    {
        
// 為內(nèi)建的 Everyone 群組建立一個(gè) SID 
        SID_IDENTIFIER_AUTHORITY sidAuth = SECURITY_WORLD_SID_AUTHORITY;

        
if (NULL == pSDStuff) { 
            
break
        }
        
        
if (!AllocateAndInitializeSid( &sidAuth, 1, SECURITY_WORLD_RID,
            
0000000&pSDStuff->psidEveryone ))
        { 
            
break
        }
        
        
// 我們建立兩個(gè)ACEs,兩者都使用 Everyone 群組
        psidArray[0= pSDStuff->psidEveryone;
        psidArray[
1= pSDStuff->psidEveryone;
        
        
// 取得新ACL的大小
        lACLSize = CalculateACLSize(NULL, psidArray, 2, NULL, 0);
        
if (0 == lACLSize){
            
break
        }
        
        
// 分配內(nèi)存給ACL
        pSDStuff->pDACL = (PACL)HeapAlloc(GetProcessHeap(), 0, lACLSize);
        
if (pSDStuff->pDACL == NULL){
            
break
        }
        
        
// 初始化ACL
        if (!InitializeAcl(pSDStuff->pDACL, lACLSize, ACL_REVISION)){
            
break
        }
        
       // 加入允許的ACE
        if (!AddAccessAllowedAce(pSDStuff->pDACL, ACL_REVISION, 
            STANDARD_RIGHTS_ALL
|SPECIFIC_RIGHTS_ALL, psidArray[1])) 
        {
            GetLastError(); 
//錯(cuò)誤
            break
        }
        
        
// 分配空間給安全描述項(xiàng)
        pSDStuff->pSD = HeapAlloc(GetProcessHeap(), 0, SECURITY_DESCRIPTOR_MIN_LENGTH);
        
if (pSDStuff->pSD == NULL){
            
break
        }
        
// 我們現(xiàn)在有一個(gè)空的安全描述項(xiàng)
        if (!InitializeSecurityDescriptor(pSDStuff->pSD, SECURITY_DESCRIPTOR_REVISION)) {
            
break
        }
        
// 我們的 DACL
        if (!SetSecurityDescriptorDacl(pSDStuff->pSD, TRUE, pSDStuff->pDACL, FALSE)) {
            
break
        }
        bResult 
= TRUE; 
    } 
while(FALSE); 
    
return bResult; 
}

EXTERN_C BOOL ClearupEveryoneSD(IN SDSTUFF stSDStuff) 
{
    
// 清除
    HeapFree(GetProcessHeap(), 0, stSDStuff.pSD);
    HeapFree(GetProcessHeap(), 
0, stSDStuff.pDACL);
    FreeSid(stSDStuff.psidEveryone); 
    
return TRUE; 
}


ULONG CalculateACLSize(PACL pACLOld, PSID
* ppSidArray, int nNumSids, PACE_UNION* ppACEs, int nNumACEs)

    ULONG lACLSize 
= 0
    
    
do 
    { 
        
// 假如我們包括一個(gè)現(xiàn)存的 ACL, 那么找出它的大小 
        if (pACLOld != NULL){ 
            ACL_SIZE_INFORMATION aclSize 
= { 0 }; 
            
if(!GetAclInformation(pACLOld, &aclSize, sizeof(aclSize), AclSizeInformation)){ 
                
break
            } 
            lACLSize 
= aclSize.AclBytesInUse; 
        } 
        
if (ppSidArray != NULL) { 
            
// 逐步瀏覽每個(gè)SID 
            while (nNumSids--) { 
                
// 假如SID無效, 那么就跳出 
                if (!IsValidSid(ppSidArray[nNumSids])) { 
                    lACLSize 
= 0
                    
break
                } 
                
// 取得 SID 的長度 
                lACLSize += GetLengthSid(ppSidArray[nNumSids]); 
                
// 加入ACE 結(jié)構(gòu)大小, 減去 SidStart 成員的大小 
                lACLSize += sizeof(ACCESS_ALLOWED_ACE) - sizeof(((ACCESS_ALLOWED_ACE*)0)->SidStart); 
            } 
            
if(0 == lACLSize) { break; } 
        } 
        
if (ppACEs != NULL) { 
            
// 逐步瀏覽每個(gè)ACE 
            while (nNumACEs--){ 
                
// 取得SIDs長度 
                lACLSize += ppACEs[nNumACEs]->aceHeader.AceSize; 
            } 
        } 
        
// 加入 ACL 結(jié)構(gòu)本身 
        lACLSize += sizeof(ACL); 
    } 
while (FALSE); 
    
    
return (lACLSize); 
}
希望這段代碼能對(duì)被同樣問題困擾的人有所幫助. 對(duì)它的使用極其簡單:

    SECURITY_ATTRIBUTES sa = {0};
    SDSTUFF stSDStuff = { 0 };

    CreateEveryoneSD(
&stSDStuff); 
    sa.nLength 
= sizeof(sa);
    sa.lpSecurityDescriptor 
= stSDStuff.pSD;
    
    g_hMap = CreateFileMapping(INVALID_HANDLE_VALUE,  // Current file handle. 
        &sa,      // Default security. 
        PAGE_READWRITE,                     // Read/write permission. 
        0,                                  // Max. object size. 
        ulCodeLen,                          // Size of hFile. 
        "xxxxxxxxxxxxxxxxxxxxxxx");         // Name of mapping object. 

    ClearupEveryoneSD(stSDStuff); 


posted on 2008-07-30 09:23 free2000fly 閱讀(1534) 評(píng)論(0)  編輯 收藏 引用

只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美资源在线| 亚洲美女av黄| 久久免费国产精品| 亚洲一区二区三区国产| 亚洲国产成人精品久久久国产成人一区 | 一本在线高清不卡dvd | 欧美激情第二页| 久久成人精品无人区| 久久久亚洲午夜电影| 亚洲成人资源| 亚洲图色在线| 久久精品人人做人人综合| 久久深夜福利| 欧美日韩另类在线| 亚洲精品美女久久7777777| 欧美激情国产精品| 国产精品久久久久久影视 | 亚洲国产日韩欧美| 一本一本久久| 久久国产88| 欧美二区不卡| 亚洲一区bb| 麻豆久久精品| 国产精品一区二区三区久久| 亚洲国产精品视频一区| 亚洲在线观看视频网站| 免费在线日韩av| 亚洲香蕉网站| 欧美精品在线观看播放| 国产综合色一区二区三区| 亚洲精品久久久久久久久久久久久 | 国产精品尤物| 亚洲精品看片| 久久精品一二三| 亚洲精品一区二区三区在线观看 | 欧美性视频网站| 狠狠色丁香婷婷综合| 在线亚洲美日韩| 久久久青草婷婷精品综合日韩| 亚洲国产天堂久久综合网| 欧美亚洲一区| 国产精品麻豆欧美日韩ww| 亚洲精品在线免费| 久久天天狠狠| 午夜视频一区| 国产精品丝袜白浆摸在线| 99国产精品99久久久久久粉嫩| 久久久久久亚洲精品中文字幕| 亚洲视频综合在线| 欧美日韩国产二区| 亚洲精品久久久蜜桃| 欧美成年人视频| 久久精品免视看| 国产日韩视频一区二区三区| 亚洲自拍啪啪| 亚洲香蕉在线观看| 国产精品久久网| 中日韩午夜理伦电影免费| 美玉足脚交一区二区三区图片| 最新国产乱人伦偷精品免费网站 | 久久综合九色综合久99| 黄色小说综合网站| 久久综合狠狠综合久久综青草| 欧美一级二区| 国产麻豆精品视频| 久久都是精品| 欧美中文字幕在线观看| 韩国亚洲精品| 蜜臀av性久久久久蜜臀aⅴ| 久久久久久久激情视频| 亚洲国语精品自产拍在线观看| 欧美成人影音| 欧美精品一线| 亚洲一区二区三区在线看| 中文亚洲免费| 国产日韩欧美综合一区| 裸体女人亚洲精品一区| 欧美成人在线免费观看| 在线亚洲美日韩| 午夜伦欧美伦电影理论片| 一区视频在线看| 亚洲电影免费观看高清完整版在线观看 | 国产精品一区二区女厕厕| 久久久久久网| 欧美77777| 亚洲女人小视频在线观看| 午夜精品影院在线观看| 亚洲高清久久网| 日韩视频中文字幕| 国产免费亚洲高清| 欧美国产视频在线| 欧美午夜视频在线观看| 久久精品夜色噜噜亚洲a∨| 久久手机精品视频| 亚洲午夜视频在线| 欧美一区二区三区四区在线观看| 亚洲人www| 欧美一区二区网站| 亚洲日本成人| 亚洲欧美国产高清| 亚洲激情国产| 午夜精品久久久久影视| 亚洲精品免费在线播放| 亚洲欧美视频一区| 亚洲日本电影在线| 欧美一区二区成人| 亚洲视频在线二区| 久久免费99精品久久久久久| 亚洲自啪免费| 欧美激情精品久久久久久蜜臀| 欧美在线三区| 欧美日韩黄色大片| 免费短视频成人日韩| 国产精品成人播放| 国产精品欧美久久| 亚洲精品资源美女情侣酒店| 亚洲欧美日韩国产精品| 9人人澡人人爽人人精品| 久久久久国产精品午夜一区| 欧美日韩1区2区| 欧美国产精品| 国产在线麻豆精品观看| 一区二区精品| a91a精品视频在线观看| 久久久夜夜夜| 久久这里有精品视频| 国产深夜精品福利| 亚洲欧美在线观看| 午夜精品久久久| 国产精品高潮呻吟久久av无限| 99天天综合性| 亚洲制服丝袜在线| 欧美日韩在线一区| 亚洲精选成人| 亚洲午夜精品网| 欧美色图一区二区三区| 亚洲免费观看在线视频| 在线视频你懂得一区二区三区| 欧美成人首页| 91久久久在线| 亚洲午夜伦理| 国产视频在线观看一区| 欧美在线视频日韩| 老司机精品视频网站| 1000精品久久久久久久久| 可以免费看不卡的av网站| 久久亚洲视频| 亚洲高清不卡在线| 欧美电影免费观看高清| 亚洲片国产一区一级在线观看| 91久久精品国产91性色tv| 欧美激情a∨在线视频播放| 91久久一区二区| 国产在线视频不卡二| 久久久久国产精品人| 欧美搞黄网站| 一本久道久久久| 国产精品视频导航| 久久人人爽国产| 9l国产精品久久久久麻豆| 午夜视频在线观看一区| 狠狠综合久久av一区二区小说| 欧美成人福利视频| 一区二区三区四区精品| 久久精品国产欧美亚洲人人爽| 亚洲国产精品一区二区第四页av | 麻豆久久久9性大片| 亚洲欧洲精品成人久久奇米网| 欧美激情视频在线播放| 亚洲香蕉伊综合在人在线视看| 一区二区三区四区五区精品| 国产精品一区二区三区久久久| 久久久夜精品| 亚洲视频在线观看视频| 老牛国产精品一区的观看方式| 国产精品看片你懂得| 久久久久久久97| 日韩午夜高潮| 国产精品一区二区视频| 男人的天堂亚洲在线| 一区二区三区高清视频在线观看 | 欧美亚洲一区在线| 欧美激情精品| 欧美在线免费观看亚洲| 91久久国产精品91久久性色| 国产精品久久久久久久久搜平片| 可以看av的网站久久看| 亚洲欧美亚洲| 亚洲精品日韩在线| 蜜桃视频一区| 欧美专区日韩专区| 夜夜嗨av一区二区三区网页| 伊人久久大香线蕉av超碰演员| 免费欧美网站| 久久精品动漫| 亚洲欧美日韩综合aⅴ视频| 亚洲日韩视频| 亚洲综合好骚| 亚洲一区激情| a91a精品视频在线观看|