'//Déclaratios des Types
Private Type LUID
LowPart As Long
HighPart As Long
End Type
Private Type LUID_AND_ATTRIBUTES
pLuid As LUID
Attributes As Long
End Type
Private Type TOKEN_PRIVILEGES
PrivilegeCount As Long
TheLuid As LUID
Attributes As Long
End Type
'//Déclaration des constantes
Private Const TOKEN_ASSIGN_PRIMARY = &H1
Private Const TOKEN_DUPLICATE = &H2
Private Const TOKEN_IMPERSONATE = &H4
Private Const TOKEN_QUERY = &H8
Private Const TOKEN_QUERY_SOURCE = &H10
Private Const TOKEN_ADJUST_PRIVILEGES = &H20
Private Const TOKEN_ADJUST_GROUPS = &H40
Private Const TOKEN_ADJUST_DEFAULT = &H80
Private Const TOKEN_ALL_ACCESS = TOKEN_ASSIGN_PRIMARY + _
TOKEN_DUPLICATE + TOKEN_IMPERSONATE + TOKEN_QUERY + _
TOKEN_QUERY_SOURCE + TOKEN_ADJUST_PRIVILEGES + _
TOKEN_ADJUST_GROUPS + TOKEN_ADJUST_DEFAULT
Private Const SE_DEBUG_NAME As String = "SeDebugPrivilege"
Private Const SE_PRIVILEGE_ENABLED = &H2
'//Déclaration des APIs
'obtient et change les privilèges
Private Declare Function AdjustTokenPrivileges Lib "advapi32.dll" (ByVal TokenHandle As Long, ByVal DisableAllPrivileges As Long, NewState As TOKEN_PRIVILEGES, ByVal BufferLength As Long, PreviousState As TOKEN_PRIVILEGES, ReturnLength As Long) As Long
Private Declare Function OpenProcessToken Lib "advapi32.dll" (ByVal ProcessHandle As Long, ByVal DesiredAccess As Long, TokenHandle As Long) As Long
Private Declare Function LookupPrivilegeValue Lib "advapi32.dll" Alias "LookupPrivilegeValueA" (ByVal lpSystemName As String, ByVal lpName As String, lpLuid As LUID) As Long
'obtient le process courant
Public Declare Function GetCurrentProcess Lib "kernel32.dll" () As Long
'fermer un handle
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
'-------------------------------------------------------
'donne le privilege Debug à l'application (permet d'accéder à tout les processus avec OpenProcess)
'-------------------------------------------------------
Public Sub GetAllPrivileges()
Dim lhTokenHandle As Long
Dim tLuid As LUID
Dim tTokenPriv As TOKEN_PRIVILEGES
Dim tTokenPrivNew As TOKEN_PRIVILEGES
Dim lBufferNeeded As Long
Dim hProc As Long
'obtient le handle de ce process
hProc = GetCurrentProcess
'change les droits de cette application
OpenProcessToken hProc, TOKEN_ALL_ACCESS, lhTokenHandle
LookupPrivilegeValue "", SE_DEBUG_NAME, tLuid
'détermine le nombre de privileges à changer
tTokenPriv.PrivilegeCount = 1
tTokenPriv.TheLuid = tLuid
tTokenPriv.Attributes = SE_PRIVILEGE_ENABLED
'autorise le privilege SE_DEBUG_NAME
AdjustTokenPrivileges lhTokenHandle, False, tTokenPriv, Len(tTokenPrivNew), tTokenPrivNew, lBufferNeeded
'ferme les handles
CloseHandle lhTokenHandle
End Sub
02/11/2006 : Plus de bug daffichage sur la ligne Private Const TOKEN_ALL_ACCESS = ...
19/11/2006 : Avait oublié un CloseHandle :(
19/11/2006 : .
23/11/2006 : correction du bug daffichage pour les tabulations
Seul les admins et l'auteur du code lui même peuvent modifier ce code.