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

悲情土仔一生

  C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
  14 隨筆 :: 0 文章 :: 74 評論 :: 0 Trackbacks

[翻譯]利用C#獲取終端服務(Terminal Services)會話的閑置時間

作者:Tuuzed(土仔)   發表于:2008年2月29日
版權聲明:可以任意轉載,轉載時請務必以超鏈接形式標明文章原始出處和作者信息及本聲明
http://www.shnenglu.com/tuuzed/archive/2008/02/29/43424.html


 
原著:Guy Teverovsky
翻譯:土仔Tuuzed
原文出處:Querying TS session idle time with C#
原文URL:http://blogs.microsoft.co.il/blogs/guyt/archive/2007/10/06/querying-ts-session-idle-time-with-c.aspx
本文特別聲明:原文版權歸原作者Guy Teverovsky所有,本譯文可以任意轉載, 轉載時請務必以超鏈接形式標明原文出處、譯文出處、譯者及本聲明。

        這一開始就是一個挑戰。我的同事正在編寫一個程序,用來獲取遠程計算機終端服務會話的閑置時間。剛開始,我們想到的是利用WMI(譯注WMI:Windows Management Instrumentation管理規范),但是那里沒有有價值的信息,因此我們開始在Win32 API(譯注API:Application Programming Interface應用程序接口)里查找。首先,“Terminal Services API”字樣令我們覺得有希望,同時里面的WTSQuerySessionInformation函數也引起了我的注意,可是,接下來對WTS_INFO_CLASS枚舉類型的注釋不得不使得我們又要回到Google中了:

 

        后來,我找到一個看似有些意思的API函數:WinStationQueryInformationW. 可是這個函數有些問題:

        1. 這是一個內部函數,它在Winsta.dll內部實現,不像其他已公開的WTS API函數是在wtsapi32.dll內部;
        2. 該函數的返回值(一個結構):WINSTATIONQUERYINFORMATIONW,該結構的代碼在MSDN上沒有任何資料;
        3. MSDN上的資料說,查詢的句柄(handle)通常只能是SERVERNAME_CURRENT。這就意味著你不能查詢遠程的終端服務器(盡管如此,通過用depends.exe(譯注:Visual Studio自帶的工具)查看終端服務管理器(Terminal Services Manager)的EXE文件,該管理器也大量地在使用這個函數)。

       我決定試一試,看能否解決以上的問題:

       1. “這是一個內部函數”——嗯……沒辦法,已經沒有其他方法能夠得到我想要的信息了,這是唯一的選擇。
       2. “WINSTATIONQUERYINFORMATIONW結構的代碼沒有公開”——這是最棘手的問題。看了它在Platform SDK的winternl.h文件中的定義后,我相當失望:


            顯然,這是不夠的……我設法找到了這部分結構的C++代碼,轉用C#定義如下:

       3. “MSDN上的資料說,我們只能在本地機器上使用這個函數”——但是這里隱含了些線索……這個函數與WTS API記載在了一起,而且你可以通過一個函數獲得終端服務(TS)的句柄(handle):WTSOpenServer。所以,接下來我要做的就是利用WTSOpenServer()函數獲取遠程終端服務的句柄(handle),然后利用WinStationQueryInformationW()函數得到我想要的信息。

 

      把上面的做一個總述

      需要的結構(structures)/枚舉類型(enums):


        DLL文件導入(DLLImports):

 


         我們將得到通俗易懂的信息:

 


        將難處理的FILETIME類型轉為DateTime類型:

 


       有用的代碼:

 


        只需簡單地調用WTSQuerySessionInfo("servername", <Session ID>)就行了。

 

       總結:

       就如大家看到的一樣,在所有步驟完成后,我們還是沒有得到我們想要的“會話閑置時間(Session Idle Time)”。其實,根據下面的簡單規則就能很容易地把它計算出來:

※ 如果會話是斷開(disconnected)狀態,閑置時間=當前時間-斷開時間(Idle Time = CurrentTime - DisconnectTime)
※ 如果會話是活動的(alive)狀態,閑置時間=當前時間-最后輸入時間(Idle Time = CurrentTime - LastInputTime)


posted on 2008-02-29 01:07 土仔 閱讀(4332) 評論(2)  編輯 收藏 引用 所屬分類: 土仔編程

評論

# re: [翻譯]利用C#獲取終端服務(Terminal Services)會話的閑置時間 2008-12-29 16:21 北京時間
斷開時間  回復  更多評論
  

# re: [翻譯]利用C#獲取終端服務(Terminal Services)會話的閑置時間 2011-03-03 18:49 Binyao
我用你的代碼在2008R2上面運行,但 ret 永遠都不=1啊,為什么?急啊,我的郵箱是v-bxu@microsoft.com
msn: xbyhoo@hotmail.com

ret = WinStationQueryInformationW(
hServer,
sessionId,
(uint)WINSTATIONINFOCLASS.WinStationInformation,
pwsInfo,
(uint)Marshal.SizeOf(typeof(WINSTATIONINFORMATIONW)),
ref RetLen);

if (ret == 1)
{
wsInfo = (WINSTATIONINFORMATIONW)Marshal.PtrToStructure(
pwsInfo,
typeof(WINSTATIONINFORMATIONW));
WTSCloseServer(hServer);
RetWsInfo.ConnectTime = FileTimeToDateTime(wsInfo.ConnectTime);
RetWsInfo.CurrentTime = FileTimeToDateTime(wsInfo.CurrentTime);
RetWsInfo.DisconnectTime = FileTimeToDateTime(wsInfo.DisconnectTime);
RetWsInfo.LastInputTime = FileTimeToDateTime(wsInfo.LastInputTime);
RetWsInfo.LoginTime = FileTimeToDateTime(wsInfo.LoginTime);
RetWsInfo.SessionId = (int)wsInfo.SessionId;
}  回復  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            久久亚洲免费| 亚洲第一精品久久忘忧草社区| 亚洲福利电影| 欧美精品videossex性护士| 亚洲美女91| 亚洲美女中文字幕| 国产精品美女视频网站| 欧美亚洲在线播放| 久久全国免费视频| 一片黄亚洲嫩模| 亚洲一区成人| 在线观看日韩一区| 亚洲日韩成人| 国产亚洲欧美一区二区三区| 免费在线观看日韩欧美| 欧美日韩亚洲综合| 久久手机免费观看| 欧美激情视频一区二区三区免费| 亚洲一区二区三| 久久成人这里只有精品| 夜夜嗨av一区二区三区四区| 亚洲综合欧美| 亚洲欧美日韩精品久久久| 亚洲国产精品视频一区| 久久精品综合| 99视频有精品| 欧美中文字幕久久| 一级成人国产| 久久久久99精品国产片| 亚洲一区二区综合| 免费黄网站欧美| 亚洲欧美一区二区激情| 欧美成人视屏| 久久视频国产精品免费视频在线 | 欧美一区二粉嫩精品国产一线天| 久久青青草综合| 欧美在线电影| 欧美日韩精品久久久| 美国三级日本三级久久99| 欧美视频日韩| 亚洲人成在线播放| 亚洲国产精品一区二区第一页| 亚洲女性喷水在线观看一区| 99视频热这里只有精品免费| 久久一区精品| 久久久精品视频成人| 国产精品久久一卡二卡| 亚洲精品乱码久久久久久| 樱桃视频在线观看一区| 香蕉久久夜色| 亚洲女人天堂成人av在线| 欧美激情1区2区3区| 美女啪啪无遮挡免费久久网站| 欧美绝品在线观看成人午夜影视| 免费观看一区| 精品动漫3d一区二区三区免费 | 久久综合狠狠综合久久综合88| 国产精品久久久久久久久久尿 | 亚洲欧美日韩国产综合| 亚洲网址在线| 欧美视频在线看| 一区二区免费在线视频| 中日韩美女免费视频网站在线观看| 免费欧美网站| 亚洲黄色免费电影| 亚洲日本理论电影| 欧美激情视频在线免费观看 欧美视频免费一| 久久亚洲精品欧美| 136国产福利精品导航| 久久亚洲国产成人| 欧美成人一区二区| 亚洲精品乱码久久久久| 欧美激情一区二区三区高清视频| 亚洲黄网站在线观看| 一本到12不卡视频在线dvd| 欧美日韩精品一区二区在线播放 | 玖玖玖国产精品| 亚洲第一伊人| 99在线热播精品免费99热| 欧美色视频在线| 亚洲免费高清| 亚洲综合欧美日韩| 欧美在线看片a免费观看| 国产一区二区三区观看 | 亚洲大胆女人| 亚洲一品av免费观看| 欧美午夜视频网站| 欧美在线3区| 亚洲国产高清高潮精品美女| 亚洲无线视频| 国产一区三区三区| 欧美高清视频一二三区| 亚洲午夜激情网站| 蜜臀av性久久久久蜜臀aⅴ四虎| 亚洲国产一二三| 国产精品久久激情| 久久精品二区| 一区二区三区四区五区视频| 久久国产精品久久国产精品| 亚洲经典视频在线观看| 国产精品一区二区三区四区| 久久久综合网| 亚洲一区国产视频| 亚洲福利视频在线| 亚洲欧美一区二区激情| 最近中文字幕mv在线一区二区三区四区| 欧美国产极速在线| 欧美一区日韩一区| 99在线精品视频在线观看| 蜜臀99久久精品久久久久久软件| 亚洲一区二区视频在线观看| 激情丁香综合| 国产精品久久久久永久免费观看 | 亚洲一区二区视频在线观看| 亚洲高清不卡在线观看| 久久精品在线视频| 亚洲一区二区三区精品在线| 亚洲国产免费看| 激情五月综合色婷婷一区二区| 欧美色中文字幕| 欧美经典一区二区三区| 久久久综合网| 久久精品国产欧美激情| 亚洲影视中文字幕| 亚洲精品欧美日韩专区| 欧美激情91| 麻豆精品国产91久久久久久| 欧美一区二区视频在线观看| 亚洲欧美国产毛片在线| 中国成人黄色视屏| 亚洲精品综合| 亚洲经典一区| 亚洲精品三级| 在线看视频不卡| 一区二区视频免费在线观看| 国产午夜精品理论片a级探花| 国产精品久久久久久久久久久久久久| 欧美人在线视频| 欧美极品在线播放| 欧美日韩国产免费| 欧美日韩精品欧美日韩精品| 欧美激情 亚洲a∨综合| 欧美精品久久久久久| 欧美精品性视频| 欧美日韩美女在线| 欧美色视频一区| 国产精品美女久久久久久免费| 国产精品第一页第二页第三页| 国产精品v欧美精品v日韩精品| 欧美日一区二区在线观看 | 久久久一区二区| 麻豆精品精华液| 欧美自拍丝袜亚洲| 一区福利视频| 亚洲国产aⅴ天堂久久| 亚洲第一黄色| 亚洲乱码国产乱码精品精 | 欧美日韩黄色大片| 国产精品va在线播放| 国产农村妇女精品一二区| 国产日产欧产精品推荐色| 狠狠色狠狠色综合日日tαg| 亚洲国产一区二区视频| 亚洲麻豆国产自偷在线| 亚洲欧美日韩国产精品| 久久不见久久见免费视频1| 麻豆精品视频在线观看| 亚洲国产一区二区视频| 亚洲一二三区视频在线观看| 香蕉久久国产| 欧美成人免费全部| 国产精品伦一区| 在线观看中文字幕亚洲| 国产精品99久久久久久久女警 | 亚洲成色www久久网站| 亚洲三级视频| 欧美一区二区三区视频在线观看| 久久亚洲精品视频| 国产精品免费观看视频| **欧美日韩vr在线| 亚洲一区中文字幕在线观看| 久久午夜色播影院免费高清| 亚洲精品国精品久久99热| 午夜日韩av| 欧美欧美在线| 伊人久久成人| 性久久久久久久久久久久| 亚洲第一在线视频| 欧美一区二区三区在线免费观看 | 中文av一区特黄| 久久免费视频网站| 国产精品羞羞答答| 亚洲乱亚洲高清| 美腿丝袜亚洲色图| 亚洲视频一区在线| 欧美好骚综合网| 一区二区三区在线观看国产| 亚洲一区三区电影在线观看| 欧美激情在线免费观看| 欧美一级视频精品观看|