• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 透視遠程關機過程

    發表于:2007-07-01來源:作者:點擊數: 標簽:
    這篇文章貢獻自: bugfree /CSDN, 參考: 平臺: VC6 Windows XP (其它平臺沒有調試) 下面我就實現遠程關機用到的函數做了簡要的說明, 具體實現時要做類型檢查, 詳細參見后面的例子. 函數具體信息可以參見CSDN的解釋. // 用到的參數說明 //=============== char


    這篇文章貢獻自: bugfree/CSDN, 參考:
    平臺: VC6 Windows XP(其它平臺沒有調試)

    下面我就實現遠程關機用到的函數做了簡要的說明, 具體實現時要做類型檢查, 詳細參見后面的例子.
     函數具體信息可以參見CSDN的解釋.


    // 用到的參數說明
    //===============
        char *pName;   // 用戶名
        char *pDomain; // 域名或遠程計算機名(空為本地機)
        char *pPasswd; // 密碼
        UINT m_timeOut;// 關機等待時的秒數

    /*怎樣實現遠程關機*/
    //===================
     //登錄用戶,取得訪問令牌
     LogonUser( pName, pDomain, pPasswd,LOGON32_LOGON_INTERACTIVE,
      LOGON32_PROVIDER_DEFAULT, &hLogonToken );
     // 復制訪問令牌
     DuplicateTokenEx( hLogonToken, TOKEN_ALL_ACCESS, NULL,
      SecurityIdentification, TokenPrimary, &hAdminToken );
     
     ImpersonateLoggedOnUser( hAdminToken );
     // 打開關聯于線程的訪問令牌
     OpenThreadToken( GetCurrentThread(), TOKEN_ADJUST_PRIVILEGES |
       TOKEN_QUERY, TRUE, &hThreadToken );
     // 獲得SE_SHUTDOWN_NAME的LUID
     LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid );
     // 設置訪問令牌的屬性
     tkp.PrivilegeCount = 1;
     tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
     // 在此進程中得到關機特權
     AdjustTokenPrivileges( hThreadToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0 );
     // 執行關機命令
     InitiateSystemShutdown( pRemoteName, pMessage, m_timeOut, FALSE, FALSE );

     

    實現:(參考的一個例子)
    =================================
    1. 創建關于對話框的應用程序
    2. 在對話框類中加入, 并在構造函數中初始化
        CWinThread *m_pThread; // 用于存線程
        char *pName;   // 用戶名
        char *pDomain; // 域名或遠程計算機名(空為本地機)
        char *pPasswd; // 密碼
        UINT m_timeOut;// 關機等待時的秒數
    3. 在對話框上加入一個按鈕,添加代碼:
     m_pThread = AfxBeginThread( ShutDownThread, this );
    4. 添加線程的實現碼如下:
    UINT AFX_CDECL CShutDWNDlg::ShutDownThread( LPVOID lpParam )
    {
     HANDLE hLogonToken;
     HANDLE hAdminToken;
     HANDLE hThreadToken;
     TOKEN_PRIVILEGES tkp;

     if( FALSE == LogonUser( pName, pDomain, pPasswd,
       LOGON32_LOGON_INTERACTIVE,
       LOGON32_PROVIDER_DEFAULT,
       &hLogonToken ) )
     { 
      ASSERT(0);
     }
     if( FALSE ==
      DuplicateTokenEx( hLogonToken, TOKEN_ALL_ACCESS, NULL,
       SecurityIdentification, TokenPrimary, &hAdminToken ) )
      ASSERT(0);

     if( FALSE == ImpersonateLoggedOnUser( hAdminToken ) )
      ASSERT(0);

      if( FALSE == OpenThreadToken( GetCurrentThread(),
      TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, TRUE, &hThreadToken ) )
     {
      RevertToSelf();
      ASSERT(0);
     }
     LookupPrivilegeValue( NULL, SE_SHUTDOWN_NAME, &tkp.Privileges[0].Luid );
     tkp.PrivilegeCount = 1;
     tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;
     AdjustTokenPrivileges( hThreadToken, FALSE, &tkp, 0, (PTOKEN_PRIVILEGES)NULL, 0 );
     if( GetLastError() != ERROR_SUCCESS )
     {
      RevertToSelf();
      ASSERT(0);
     }
       if( FALSE ==
      InitiateSystemShutdown( pRemoteName, pMessage, pDlg->m_timeOut, FALSE, FALSE ) )
     {
      RevertToSelf();
      ASSERT(0);
     }
     
    }   


    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>