|
发表于 2009-10-18 12:49:57
|
显示全部楼层
<p>我又测试了一下,除了SYSTEM等无模块的进程外,其余都是能行的.</p>
<p> </p>
<p>我的系统是2003 SP2,没开任何安全软件.</p>
<p> </p>
<p>也许是系统本身的限制吧.</p>
<p> </p>
<p>你试一下提升进程权限: </p>
<div class="msgheader">QUOTE:</div><div class="msgborder"><b>
<p><font face="Verdana">Option Explicit<br/>'*************************************************************************<br/>'**模 块 名:ModSetProDebug<br/>'**说 明:将本进程运行级别设置为DEBUG<br/>'**创 建 人:马大哈<br/>'**日 期:2006年10月22日<br/>'**描 述:网上收集<br/>'**版 本:V1.0<br/>'*************************************************************************</font></p>
<p><font face="Verdana">Private Type LARGE_INTEGER</font></p>
<p><font face="Verdana"> lowpart As Long<br/> highpart As Long</font></p>
<p><font face="Verdana">End Type</font></p>
<p><font face="Verdana">Private Const ANYSIZE_ARRAY As Long = 1</font></p>
<p><font face="Verdana">Private Const SE_PRIVILEGE_ENABLED As Long = &H2</font></p>
<p><font face="Verdana">Private Const TOKEN_ADJUST_PRIVILEGES As Long = &H20</font></p>
<p><font face="Verdana">Private Const TOKEN_QUERY As Long = &H8</font></p>
<p><font face="Verdana">Private Type LUID_AND_ATTRIBUTES</font></p>
<p><font face="Verdana"> LUID As LARGE_INTEGER<br/> Attributes As Long</font></p>
<p><font face="Verdana">End Type</font></p>
<p><font face="Verdana">Private Type TOKEN_PRIVILEGES</font></p>
<p><font face="Verdana"> PrivilegeCount As Long<br/> Privileges(ANYSIZE_ARRAY) As LUID_AND_ATTRIBUTES</font></p>
<p><font face="Verdana">End Type</font></p>
<p><font face="Verdana">Private Declare Function LookupPrivilegeValue _<br/> Lib "advapi32.dll" _<br/> Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, _<br/> ByVal lpName As String, _<br/> ByRef lpLuid As LARGE_INTEGER) As Long</font></p>
<p><font face="Verdana">Private Declare Function AdjustTokenPrivileges _<br/> Lib "advapi32.dll" (ByVal TokenHandle As Long, _<br/> ByVal DisableAllPrivileges As Long, _<br/> ByRef NewState As TOKEN_PRIVILEGES, _<br/> ByVal BufferLength As Long, _<br/> ByRef PreviousState As Long, _<br/> ByRef ReturnLength As Long) As Long</font></p>
<p><font face="Verdana">Private Declare Function GetCurrentProcess Lib "KERNEL32.dll" () As Long</font></p>
<p><font face="Verdana">Private Declare Function GetCurrentProcessId Lib "KERNEL32.dll" () As Long</font></p>
<p><font face="Verdana">Private Declare Function CloseHandle Lib "KERNEL32.dll" (ByVal hObject As Long) As Long</font></p>
<p><font face="Verdana">Private Declare Function OpenProcessToken _<br/> Lib "advapi32.dll" (ByVal ProcessHandle As Long, _<br/> ByVal DesiredAccess As Long, _<br/> ByRef TokenHandle As Long) As Long</font></p>
<p><font face="Verdana">Private Declare Function GetLastError Lib "KERNEL32.dll" () As Long</font></p>
<p><font face="Verdana">Public Function EnableDebugPrivilege() As Boolean</font></p>
<p><font face="Verdana"> Dim TP As TOKEN_PRIVILEGES</font></p>
<p><font face="Verdana"> Dim hToken As Long, r As Long, e As Long</font></p>
<p><font face="Verdana"> r = OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES Or TOKEN_QUERY, hToken)<br/> e = GetLastError</font></p>
<p><font face="Verdana"> ' Err.Raise 6<br/> If r And Not e Then<br/> r = LookupPrivilegeValue(vbNullString, "SeDebugPrivilege", TP.Privileges(0).LUID)<br/> e = GetLastError</font></p>
<p><font face="Verdana"> If r And Not e Then<br/> TP.PrivilegeCount = 1<br/> TP.Privileges(0).Attributes = SE_PRIVILEGE_ENABLED</font></p>
<p><font face="Verdana"> r = AdjustTokenPrivileges(hToken, False, TP, LenB(TP), 0, 0)<br/> EnableDebugPrivilege = GetLastError = 0<br/> End If<br/> End If</font></p>
<p><font face="Verdana"> Call CloseHandle(hToken)<br/>End Function</font></p></b></div>
<p>启动时先调用<font face="Verdana">EnableDebugPrivilege就行.</font></p> |
|