• <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>

            牽著老婆滿街逛

            嚴以律己,寬以待人. 三思而后行.
            GMail/GTalk: yanglinbo#google.com;
            MSN/Email: tx7do#yahoo.com.cn;
            QQ: 3 0 3 3 9 6 9 2 0 .

            Getting the Logon SID in C++

            A logon security identifier (SID) identifies the logon session associated with an access token. A typical use of a logon SID is in an ACE that allows access for the duration of a client's logon session. For example, a Windows service can use the LogonUser function to start a new logon session. The LogonUser function returns an access token from which the service can extract the logon SID. The service can then use the SID in an ACE that allows the client's logon session to access the interactive window station and desktop.

            The following example gets the logon SID from an access token. It uses the GetTokenInformation function to fill a TOKEN_GROUPS buffer with an array of the group SIDs from an access token. This array includes the logon SID, which is identified by the SE_GROUP_LOGON_ID attribute. The example function allocates a buffer for the logon SID; it is the caller's responsibility to free the buffer.

            BOOL?GetLogonSID?(HANDLE?hToken,?PSID? * ppsid)?
            {
            ???BOOL?bSuccess?
            = ?FALSE;
            ???DWORD?dwIndex;
            ???DWORD?dwLength?
            = ? 0 ;
            ???PTOKEN_GROUPS?ptg?
            = ?NULL;

            // ?Verify?the?parameter?passed?in?is?not?NULL.
            ???? if ?(NULL? == ?ppsid)
            ????????
            goto ?Cleanup;

            // ?Get?required?buffer?size?and?allocate?the?TOKEN_GROUPS?buffer.

            ???
            if ?( ! GetTokenInformation(
            ?????????hToken,?????????
            // ?handle?to?the?access?token
            ?????????TokenGroups,???? // ?get?information?about?the?token's?groups?
            ?????????(LPVOID)?ptg,??? // ?pointer?to?TOKEN_GROUPS?buffer
            ????????? 0 ,?????????????? // ?size?of?buffer
            ????????? & dwLength??????? // ?receives?required?buffer?size
            ??????))?
            ???
            {
            ??????
            if ?(GetLastError()? != ?ERROR_INSUFFICIENT_BUFFER)?
            ?????????
            goto ?Cleanup;

            ??????ptg?
            = ?(PTOKEN_GROUPS)HeapAlloc(GetProcessHeap(),
            ?????????HEAP_ZERO_MEMORY,?dwLength);

            ??????
            if ?(ptg? == ?NULL)
            ?????????
            goto ?Cleanup;
            ???}


            // ?Get?the?token?group?information?from?the?access?token.

            ???
            if ?( ! GetTokenInformation(
            ?????????hToken,?????????
            // ?handle?to?the?access?token
            ?????????TokenGroups,???? // ?get?information?about?the?token's?groups?
            ?????????(LPVOID)?ptg,??? // ?pointer?to?TOKEN_GROUPS?buffer
            ?????????dwLength,??????? // ?size?of?buffer
            ????????? & dwLength??????? // ?receives?required?buffer?size
            ?????????))?
            ???
            {
            ??????
            goto ?Cleanup;
            ???}


            // ?Loop?through?the?groups?to?find?the?logon?SID.

            ???
            for ?(dwIndex? = ? 0 ;?dwIndex? < ?ptg -> GroupCount;?dwIndex ++ )?
            ??????
            if ?((ptg -> Groups[dwIndex].Attributes? & ?SE_GROUP_LOGON_ID)
            ?????????????
            == ??SE_GROUP_LOGON_ID)?
            ??????
            {
            ??????
            // ?Found?the?logon?SID;?make?a?copy?of?it.

            ?????????dwLength?
            = ?GetLengthSid(ptg -> Groups[dwIndex].Sid);
            ?????????
            * ppsid? = ?(PSID)?HeapAlloc(GetProcessHeap(),
            ?????????????????????HEAP_ZERO_MEMORY,?dwLength);
            ?????????
            if ?( * ppsid? == ?NULL)
            ?????????????
            goto ?Cleanup;
            ?????????
            if ?( ! CopySid(dwLength,? * ppsid,?ptg -> Groups[dwIndex].Sid))?
            ?????????
            {
            ?????????????HeapFree(GetProcessHeap(),?
            0 ,?(LPVOID) * ppsid);
            ?????????????
            goto ?Cleanup;
            ?????????}

            ?????????
            break ;
            ??????}


            ???bSuccess?
            = ?TRUE;

            Cleanup:?

            // ?Free?the?buffer?for?the?token?groups.

            ???
            if ?(ptg? != ?NULL)
            ??????HeapFree(GetProcessHeap(),?
            0 ,?(LPVOID)ptg);

            ???
            return ?bSuccess;
            }


            The following function frees the buffer allocated by the GetLogonSID example function.
            VOID?FreeLogonSID?(PSID?*ppsid)?
            {
            ????HeapFree(GetProcessHeap(),?
            0,?(LPVOID)*ppsid);
            }

            posted on 2006-04-14 21:31 楊粼波 閱讀(334) 評論(0)  編輯 收藏 引用 所屬分類: 文章收藏

            亚洲国产成人久久一区WWW| 人妻少妇久久中文字幕 | 久久久久97国产精华液好用吗| 久久亚洲欧美日本精品| 久久久无码精品亚洲日韩软件| 亚洲欧美日韩精品久久亚洲区| 国内精品久久久久影院日本| 久久久久亚洲AV无码专区网站| 香蕉久久久久久狠狠色| 久久99精品国产| 久久精品国产亚洲AV蜜臀色欲 | 国产精品久久久久久久午夜片| 久久精品国产久精国产果冻传媒 | 久久精品国产网红主播| 国内精品久久久久久麻豆| 国内精品久久久久久久久电影网 | 国产精品久久一区二区三区| 久久只这里是精品66| 国产精自产拍久久久久久蜜| 久久亚洲国产精品成人AV秋霞| 国产精品内射久久久久欢欢| 久久夜色精品国产噜噜噜亚洲AV| 久久笫一福利免费导航 | 国产精品美女久久久m| 久久精品国产免费观看| 国产精品久久久久免费a∨| 精品无码久久久久久久动漫| 久久99国产精一区二区三区| 99久久精品国产麻豆| 日韩精品久久无码中文字幕| 久久亚洲精品成人无码网站| 久久久久亚洲精品日久生情| 亚洲精品国产自在久久| 久久久久99精品成人片三人毛片 | 久久久久高潮毛片免费全部播放 | 国产产无码乱码精品久久鸭| 人妻精品久久无码区| 精品人妻久久久久久888| 亚洲国产另类久久久精品小说| 亚洲精品乱码久久久久久| 粉嫩小泬无遮挡久久久久久|