• <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)  編輯 收藏 引用 所屬分類: 文章收藏

            久久免费的精品国产V∧| 99热成人精品免费久久| 国产精品久久久久久久久软件| 亚洲?V乱码久久精品蜜桃| 99精品国产综合久久久久五月天 | 777米奇久久最新地址| 国产叼嘿久久精品久久| 波多野结衣久久精品| 亚洲综合精品香蕉久久网97| 久久久久久久久波多野高潮| www久久久天天com| 久久亚洲精品国产精品婷婷| 日本三级久久网| 一本色道久久88—综合亚洲精品| 99久久精品免费看国产免费| 精品伊人久久大线蕉色首页| 久久国产成人| 国产成人无码精品久久久久免费| 午夜精品久久久久久中宇| 久久综合九色综合欧美就去吻| 国产精品久久久久久久| 亚洲国产美女精品久久久久∴ | 伊人久久大香线蕉av不卡| 大美女久久久久久j久久| 久久人人爽人人爽人人AV| 午夜视频久久久久一区| 久久99精品久久久久久野外| 99久久夜色精品国产网站| 丁香五月网久久综合| 老色鬼久久亚洲AV综合| 久久成人国产精品免费软件| 色狠狠久久综合网| 久久久久亚洲AV片无码下载蜜桃| 久久这里只有精品视频99| 久久精品人妻一区二区三区| 国产一区二区精品久久凹凸| 精品国产热久久久福利| 久久精品18| 人妻无码久久精品| 久久精品国产亚洲AV香蕉| 久久人人爽人人爽人人av东京热|