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

            91麻精品国产91久久久久| 久久国产成人精品麻豆| 国产福利电影一区二区三区,免费久久久久久久精 | 99久久精品免费看国产免费| 久久99国产精品99久久| 久久夜色精品国产www| 久久久亚洲AV波多野结衣| 99久久婷婷国产综合亚洲| 久久国产视屏| 久久精品麻豆日日躁夜夜躁| 国产高潮国产高潮久久久91| 久久99热这里只有精品国产| 伊人久久综在合线亚洲2019| 伊人久久综合精品无码AV专区| 999久久久国产精品| 久久AV高清无码| 久久综合色老色| 99久久精品这里只有精品| 亚洲国产精品一区二区久久hs | 精品久久久无码中文字幕| 人妻无码久久一区二区三区免费| 久久精品综合一区二区三区| 2021久久精品国产99国产精品| 久久国产精品无| 久久AⅤ人妻少妇嫩草影院| 色欲av伊人久久大香线蕉影院 | 青青热久久国产久精品 | 久久久久亚洲av毛片大| 久久婷婷国产麻豆91天堂| 日韩AV无码久久一区二区| 久久婷婷国产剧情内射白浆| 国产精久久一区二区三区| 久久精品无码一区二区三区| 久久精品国产亚洲AV不卡| 人妻无码精品久久亚瑟影视| 日本福利片国产午夜久久| 国产精品国色综合久久| 2022年国产精品久久久久| 99久久超碰中文字幕伊人| 99久久99这里只有免费费精品| 亚洲∧v久久久无码精品|