環境: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對象的自動管理)
本文配套源碼