日本免费全黄少妇一区二区三区-高清无码一区二区三区四区-欧美中文字幕日韩在线观看-国产福利诱惑在线网站-国产中文字幕一区在线-亚洲欧美精品日韩一区-久久国产精品国产精品国产-国产精久久久久久一区二区三区-欧美亚洲国产精品久久久久

Windows2000下用戶模式的內存掃描( 三 )


三 相關的問題:
在實際操作中會遇到一些問題 。如果我們指定了寫相關的訪問權(如
PROCESS_VM_WRITE 、 PROCESS_SET_INFORMATION 、 PROCESS_ALL_ACCESS 等 ),用
OpenProcess打開一些普通進程是沒什么問題,但要是打開的是系統(tǒng)安全進程
(如Sy stem、Winlogon、smss、csRSS、services、lsass等)或是一些注冊為
服務的進程時,就會遇到“訪問拒絕”的錯誤,這是為了系統(tǒng)的安全而采取的保
護手段 。說明了當前的進程沒有足夠的權限來進行此操作 。在進程控制結構中
有一個“訪問令牌”(Access tokens),里面包含有本進程的權限信息 。一些常
用的權限如表1所示(摘自Inside Windows2000,Third Edition) 。
權限名
權限含義
SeBackup
在備份的時候繞過安全檢查
SeDebug
可對一個進程進行調試
SeShutdown
可關閉本地系統(tǒng)
SeTakeOwnerShip
在沒有得到自由訪問權的情況下得到一個對象的所有權
表 2
要對一個任意進程(包括系統(tǒng)安全進程和服務進程)進行 指定了寫相 關的訪問權的 OpenProcess操作,只要當前進程具有SeDeDebug權限就 可 以了 。要是一個用戶是Administrator或是被給予了相應的權限,就可以具 有該權限 。可是,就算我們用Administrator帳號對一個系統(tǒng)安全進程執(zhí)行 OpenProcess(PROCESS_ALL_ACCESS,FALSE, dwProcessID)還是會遇到 “訪 問拒絕”的錯誤 。什么原因呢?原來在默認的情況下進程的一些訪問權限 是沒有被使能( Enabled)的,所以我們要做的首先是使能這些權限 。與此 相關的一些API函數(shù)有OpenProcessToken、 LookupPrivilegeValue 、 AdjustTokenPrivileges。我們要修改一個進程的訪問令牌,首先要獲得進 程訪問令牌的句柄,這可以通過 OpenProcessToken得到,函數(shù)的原型如:
BOOL OpenProcessToken( HANDLE ProcessHandle , DWORD DesiredAccess , PHANDLE TokenHandle ); 第一參數(shù)是要修改訪問權限的進程句柄;第三個參數(shù)就是返回的訪問令牌指針;第二個參數(shù)指定你要進行的操作類型,如要修改令牌我們要指定第二個參數(shù)為 TOKEN_ADJUST_PRIVILEGES( 其它一些參數(shù)可參考 Platform SDK ) 。通過這個函數(shù)我們就可以得到當前進程的訪問令牌的句柄(指定函數(shù)的第一個參數(shù)為 GetCurrentProcess()就可以了) 。接著我們可以調用AdjustTokenPrivileges對這個訪問令牌進行修改 。AdjustTokenPrivileges的原型如下: BOOL AdjustTokenPrivileges( HANDLE TokenHandle , // handle to token BOOL DisableAllPrivileges , // disabling option PTOKEN_PRIVILEGES NewState , // privilege information DWORD BufferLength , // size of buffer PTOKEN_PRIVILEGES PreviousState , // original state buffer PDWORD ReturnLength // required buffer size ); 第一個參數(shù)是訪問令牌的句柄;第二個參數(shù)決定是進行權限修改還是除能( Disable)所有權限;第三個參數(shù)指明要修改的權限,是一個指向 TOKEN_PRIVILEGES 結構的指針,該結構包含一個數(shù)組,數(shù)據(jù)組的每個項指明了權限的類型和要進行的操作 ; 第四個參數(shù)是結構 PreviousState 的長度,如果 PreviousState 為空,該參數(shù)應為 NULL ;第五個參數(shù)也是一個 指向 TOKEN_PRIVILEGES 結構的指針,存放修改前的訪問權限的信息,可空;最后一個參數(shù)為實際 PreviousState 結構返回的大小 。在使用這個函數(shù)前再看一下 TOKEN_PRIVILEGES 這個結構,其聲明如下:
typedef struct _TOKEN_PRIVILEGES { DWORD PrivilegeCount ; LUID_AND_ATTRIBUTES Privileges []; } TOKEN_PRIVILEGES, *PTOKEN_PRIVILEGES;PrivilegeCount 指的數(shù)組原素的個數(shù),接著是一個 LUID_AND_ATTRIBUTES 類型的數(shù)組,再來看一下 LUID_AND_ATTRIBUTES 這個結構的內容,聲明如下:
typedef struct _LUID_AND_ATTRIBUTES { LUID Luid ; DWORD Attributes ;} LUID_AND_ATTRIBUTES, *PLUID_AND_ATTRIBUTES

推薦閱讀