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

隨筆-60  評論-262  文章-1  trackbacks-0
我們編寫服務程序的時候可能會創建具名內核對象如互斥量, 信號量, 事件, 文件映射, 等等, 然后, 這個有名字的內核對象可能在某一個具體的用戶賬號內運行的程序被訪問到, 甚至是受限的用戶帳戶內運行的程序. 這時就會出現創建不了該具名內核對象的現象, 錯誤碼為 "拒絕訪問".

經過反復查閱資料, 我給出一個解決方案, 就是在創建內核對象之前, 先創建一個屬于 everyone 群組的權限為完全控制的安全描述符, 然后將這個安全描述符作為創建內核對象的函數的必須的參數傳入. 這樣, 整個正在運行的操作系統的任何進程都能訪問這個內核對象了.

代碼如下:

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 
    {
        
// 為內建的 Everyone 群組建立一個 SID 
        SID_IDENTIFIER_AUTHORITY sidAuth = SECURITY_WORLD_SID_AUTHORITY;

        
if (NULL == pSDStuff) { 
            
break
        }
        
        
if (!AllocateAndInitializeSid( &sidAuth, 1, SECURITY_WORLD_RID,
            
0000000&pSDStuff->psidEveryone ))
        { 
            
break
        }
        
        
// 我們建立兩個ACEs,兩者都使用 Everyone 群組
        psidArray[0= pSDStuff->psidEveryone;
        psidArray[
1= pSDStuff->psidEveryone;
        
        
// 取得新ACL的大小
        lACLSize = CalculateACLSize(NULL, psidArray, 2, NULL, 0);
        
if (0 == lACLSize){
            
break
        }
        
        
// 分配內存給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(); 
//錯誤
            break
        }
        
        
// 分配空間給安全描述項
        pSDStuff->pSD = HeapAlloc(GetProcessHeap(), 0, SECURITY_DESCRIPTOR_MIN_LENGTH);
        
if (pSDStuff->pSD == NULL){
            
break
        }
        
// 我們現在有一個空的安全描述項
        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 
    { 
        
// 假如我們包括一個現存的 ACL, 那么找出它的大小 
        if (pACLOld != NULL){ 
            ACL_SIZE_INFORMATION aclSize 
= { 0 }; 
            
if(!GetAclInformation(pACLOld, &aclSize, sizeof(aclSize), AclSizeInformation)){ 
                
break
            } 
            lACLSize 
= aclSize.AclBytesInUse; 
        } 
        
if (ppSidArray != NULL) { 
            
// 逐步瀏覽每個SID 
            while (nNumSids--) { 
                
// 假如SID無效, 那么就跳出 
                if (!IsValidSid(ppSidArray[nNumSids])) { 
                    lACLSize 
= 0
                    
break
                } 
                
// 取得 SID 的長度 
                lACLSize += GetLengthSid(ppSidArray[nNumSids]); 
                
// 加入ACE 結構大小, 減去 SidStart 成員的大小 
                lACLSize += sizeof(ACCESS_ALLOWED_ACE) - sizeof(((ACCESS_ALLOWED_ACE*)0)->SidStart); 
            } 
            
if(0 == lACLSize) { break; } 
        } 
        
if (ppACEs != NULL) { 
            
// 逐步瀏覽每個ACE 
            while (nNumACEs--){ 
                
// 取得SIDs長度 
                lACLSize += ppACEs[nNumACEs]->aceHeader.AceSize; 
            } 
        } 
        
// 加入 ACL 結構本身 
        lACLSize += sizeof(ACL); 
    } 
while (FALSE); 
    
    
return (lACLSize); 
}
希望這段代碼能對被同樣問題困擾的人有所幫助. 對它的使用極其簡單:

    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) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   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>
            99这里只有久久精品视频| 亚洲一区二区免费视频| 欧美a级一区二区| 久久嫩草精品久久久精品| 欧美一区二区三区四区在线观看| 亚洲主播在线观看| 欧美中文字幕第一页| 国产专区欧美精品| 午夜在线电影亚洲一区| 亚洲午夜影视影院在线观看| 亚洲网站在线播放| 久久久亚洲精品一区二区三区| 久久最新视频| 欧美日韩亚洲综合在线| 国产视频亚洲精品| 亚洲精品国产精品乱码不99按摩 | 亚洲女人天堂成人av在线| 亚洲一区二区三区四区在线观看 | 欧美日韩国产999| 国产精品日本欧美一区二区三区| 国产亚洲欧美一区二区三区| 伊人久久久大香线蕉综合直播| 日韩视频在线观看国产| 午夜精品一区二区三区在线| 裸体一区二区三区| 99国产精品久久久| 久久久999精品| 国产精品久久二区二区| 狠狠色狠狠色综合| 亚洲一区二区三区乱码aⅴ蜜桃女 亚洲一区二区三区乱码aⅴ | 欧美a级片网| 一本久久综合亚洲鲁鲁| 欧美一区二区三区免费在线看| 欧美高清在线播放| 激情五月***国产精品| 一区二区三区色| 欧美成黄导航| 午夜性色一区二区三区免费视频| 欧美精品一区二区三区四区| 国内外成人在线| 亚洲免费视频观看| 亚洲欧洲另类国产综合| 欧美在线啊v| 国产精品久久国产三级国电话系列| 最近中文字幕日韩精品| 久久午夜激情| 欧美伊久线香蕉线新在线| 国产精品久久久久婷婷| 亚洲少妇最新在线视频| 欧美激情精品久久久久| 久久综合狠狠综合久久综青草 | 欧美精品在线观看播放| 一区二区视频在线观看| 久久精品官网| 久久精品国产免费观看| 午夜在线精品| 久久久蜜桃精品| 在线亚洲观看| 欧美精品一区二区三区久久久竹菊| 韩日视频一区| 久久亚洲高清| 久久天天躁狠狠躁夜夜av| 国产日韩在线视频| 久久成人综合视频| 久久国产夜色精品鲁鲁99| 国产精品亚洲美女av网站| 亚洲一区二区在线视频| 亚洲视频狠狠| 国产日韩亚洲欧美| 蜜臀av在线播放一区二区三区| 久久美女性网| 亚洲欧洲精品一区二区三区不卡| 欧美激情精品久久久久久黑人| 欧美多人爱爱视频网站| 亚洲视频在线观看一区| 亚洲免费小视频| 国产一区观看| 美国成人毛片| 美女网站久久| 一本色道88久久加勒比精品 | 国产主播一区二区三区| 久久久一区二区| 欧美99久久| 亚洲欧美日韩国产中文在线| 亚洲欧美日韩一区二区三区在线观看 | 亚洲视频免费看| 亚洲欧美日韩另类| 在线观看91精品国产麻豆| 亚洲啪啪91| 国产麻豆综合| 亚洲第一中文字幕在线观看| 欧美日韩一区精品| 久色成人在线| 欧美午夜视频在线观看| 久久久久久电影| 欧美片在线播放| 久久久久久一区| 欧美了一区在线观看| 欧美自拍偷拍| 欧美巨乳在线观看| 久久美女性网| 国产精品成人在线观看| 久久综合亚州| 国产精品久久久久久久午夜 | 欧美一区二区三区四区夜夜大片| 久久精品夜夜夜夜久久| 国产精品色一区二区三区| 国产精品自在欧美一区| 欧美xxx成人| 国产麻豆日韩欧美久久| 亚洲欧洲日产国产网站| 国产一区二区| 亚洲视频一区二区免费在线观看| 亚洲盗摄视频| 欧美在线高清视频| 亚洲欧美在线观看| 欧美日韩国产综合一区二区| 麻豆国产精品777777在线| 欧美丝袜第一区| 欧美国产日本高清在线| 韩日成人在线| 久久av红桃一区二区小说| 亚洲女女女同性video| 欧美极品在线视频| 女生裸体视频一区二区三区| 国产欧美日韩另类一区 | 欧美在线精品免播放器视频| 欧美日韩精品免费| 91久久夜色精品国产九色| 亚洲高清在线观看一区| 久久se精品一区精品二区| 欧美影院在线播放| 国产精品综合久久久| 亚洲午夜精品福利| 亚洲夜晚福利在线观看| 欧美成人性生活| 亚洲成色777777女色窝| 亚洲国产精品成人一区二区| 久久久精品免费视频| 美日韩精品免费观看视频| 尤物99国产成人精品视频| 久久噜噜噜精品国产亚洲综合| 久热精品视频在线观看一区| 精品电影在线观看| 两个人的视频www国产精品| 免费在线看一区| 亚洲欧洲日产国产网站| 欧美精品1区2区3区| 99精品久久久| 西瓜成人精品人成网站| 国产综合第一页| 免费欧美视频| 亚洲精品欧洲精品| 亚洲欧美欧美一区二区三区| 国产精品一二三视频| 欧美在线视频观看| 亚洲电影第三页| 一区二区三区成人精品| 国产精品成人va在线观看| 亚洲免费中文字幕| 久久综合久久久| 一区二区三区成人精品| 国产精品ⅴa在线观看h| 久久国产精彩视频| 亚洲国产婷婷香蕉久久久久久| 亚洲天天影视| 精品动漫av| 欧美视频中文字幕在线| 欧美中文在线视频| 亚洲精品美女在线观看| 久久成人精品一区二区三区| 亚洲国产精品999| 国产精品地址| 女人天堂亚洲aⅴ在线观看| 国产自产精品| 亚洲欧美在线播放| 欧美福利一区二区三区| 亚洲午夜一二三区视频| 韩国三级电影一区二区| 欧美日本一道本| 久久九九免费| 在线视频你懂得一区| 欧美激情bt| 久久国产欧美| 亚洲天堂男人| 亚洲高清在线| 国产亚洲欧美色| 欧美吻胸吃奶大尺度电影| 久久亚洲综合色| 亚洲欧美国产日韩天堂区| 亚洲福利视频网| 久久亚洲美女| 欧美一区二区三区视频在线| av不卡在线| 91久久精品国产91久久性色| 亚洲每日在线| 亚洲高清在线观看| 久久综合久久综合九色| 欧美一区亚洲二区| 亚洲欧美一区二区三区久久|