天天看點

以特定的使用者身份運作某個程式指令

本文将介紹一個控制台實用程式,在 Windows NT 系統中運作,它以專門的使用者身份啟動某個程式指令。它用 Windows API 函數 LogonUser 程式設計,以專門的使用者身份/密碼登陸到NT。如果登陸成功,則用 CreateProcessAsUseris 産生該使用者的專屬程序。程式運作截圖如下:

以特定的使用者身份運作某個程式指令

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

  • 實用程式臨時将自己作為服務程式安裝并在系統賬号下運作;
  • 啟動新的服務,參數(使用者名,程序)必須通過共享記憶體傳遞給服務;
  • 然後服務程式試圖以特定使用者登入并啟動程序,通過共享記憶體将結果傳回實用程式;
  • 然後實用程式終止服務,解除安裝服務并顯示結果;

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

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

  • Windows 安全APIs(包括輕量級模闆類,用于處理 SIDs、ACEs、ACLs、安全描述符、特權和通路令牌);
  • 使用服務控制管理器程式設計以安裝/配置服務;
  • 編寫NT服務(包括一個服務模闆類,使用這個類隻要20行代碼便可以實作一個簡單的服務);
  • 使用記憶體映射檔案來共享記憶體(包含一個模闆類,使用這個類可以實作記憶體映射檔案以及其它輕量級Kernel對象的自動管理)

轉載于:https://www.cnblogs.com/cccc123/archive/2010/04/17/1714144.html

繼續閱讀