程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> VC >> 關於VC++ >> 以特定的用戶身份運行某個程序命令

以特定的用戶身份運行某個程序命令

編輯:關於VC++

環境:Windows NT 4.0 +

本文將介紹一個控制台實用程序,在 Windows NT 系統中運行,它以專門的用戶身份啟動某個程序命令。它用 Windows API 函數 LogonUser 編程,以專門的用戶身份/密碼登陸到NT。如果登陸成功,則用 CreateProcessAsUseris 產生該用戶的專屬進程。程序運行截圖如下:

LogonUser API調用要求調用者必須具備相當高級別的權限:比如:“Act as part of the operating system”,這是一個不能隨便給出的特權,權力極大。本地管理員常常都不會有這個權限。作為工作環境,本文介紹的實用程序因為要執行某些系統調用,所以要首先檢查用戶是否具備必要的特權,如果沒有這種特權則發生如下情況:

實用程序臨時將自己作為服務程序安裝並在系統賬號下運行;

啟動新的服務,參數(用戶名,進程)必須通過共享內存傳遞給服務;

然後服務程序試圖以特定用戶登錄並啟動進程,通過共享內存將結果返回實用程序;

然後實用程序終止服務,卸載服務並顯示結果;

這樣做是能行得通的,因為系統賬號具有高級特權,同時,本地管理員組有安裝服務的權限,實用程序的使用說明可以在命令行敲入程序名,不用帶參數,然後回車。

源代碼還包含如下的技術內容:

Windows 安全APIs(包括輕量級模板類,用於處理 SIDs、ACEs、ACLs、安全描述符、特權和訪問令牌);

使用服務控制管理器編程以安裝/配置服務;

編寫NT服務(包括一個服務模板類,使用這個類只要20行代碼便可以實現一個簡單的服務);

使用內存映射文件來共享內存(包含一個模板類,使用這個類可以實現內存映射文件以及其它輕量級Kernel對象的自動管理)

本文配套源碼

  1. 上一頁:
  2. 下一頁:
欄目導航
Copyright © 程式師世界 All Rights Reserved