• <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 楊粼波 閱讀(336) 評論(0)  編輯 收藏 引用 所屬分類: 文章收藏

            国产精品亚洲综合久久| 久久久久久国产a免费观看黄色大片| 久久亚洲AV成人无码电影| 久久人人妻人人爽人人爽| 国产成人精品久久综合 | 欧美777精品久久久久网| 久久久久久久国产免费看| 无码国产69精品久久久久网站| 国产成人精品久久| 成人妇女免费播放久久久| 久久无码国产| 青青草国产成人久久91网| 中文字幕乱码人妻无码久久| 国产精品欧美久久久久天天影视 | 2019久久久高清456| 国产女人aaa级久久久级| 久久久久亚洲av成人网人人软件| 久久青草国产手机看片福利盒子| 伊人久久大香线蕉综合Av| 久久综合色区| 久久91这里精品国产2020| 国产精品久久波多野结衣| 中文精品久久久久人妻不卡| 久久影视综合亚洲| 国产国产成人久久精品| 久久综合丁香激情久久| 青青草国产精品久久久久| 99久久精品国产高清一区二区 | 91久久九九无码成人网站| 99久久免费国产特黄| 久久国产精品成人片免费| 久久久久高潮综合影院| 久久精品国产日本波多野结衣| 91麻豆国产精品91久久久| 久久成人国产精品免费软件| 久久久久人妻一区二区三区| 亚洲中文久久精品无码ww16| 久久精品国产99久久久| 国产一久久香蕉国产线看观看| 国内精品伊人久久久久| 国产精品xxxx国产喷水亚洲国产精品无码久久一区 |