Hello,
Increasing it's own program privileges is needed for instance if you want to enumerate all running processes. With the search fucntion I found few other posts with a procedure like this, but mine checks (hopefully) all errors that can happens.
Code: Select all
Procedure.b IncreasePrivileges()
Protected hToken, Buff
Protected mLUID.LUID
Protected mPriv.TOKEN_PRIVILEGES
Protected mNewPriv.TOKEN_PRIVILEGES
Protected CurrentProcess = GetCurrentProcess_()
#TOKEN_ADJUST_PRIVILEGES = $20
#TOKEN_QUERY = $8
mPriv\PrivilegeCount = 1
mPriv\Privileges[0]\Attributes = #SE_PRIVILEGE_ENABLED
If CurrentProcess = 0
ProcedureReturn #False
EndIf
If OpenProcessToken_(CurrentProcess, #TOKEN_ADJUST_PRIVILEGES | #TOKEN_QUERY, @hToken) = 0
ProcedureReturn #False
EndIf
If LookupPrivilegeValue_(#Null, "SeDebugPrivilege", @mLUID) = 0
CloseHandle_(hToken)
ProcedureReturn #False
EndIf
If IsBadWritePtr_(@mPriv\Privileges[0]\Luid, SizeOf(LUID)) <> 0
CloseHandle_(hToken)
ProcedureReturn #False
EndIf
CopyMemory(@mLUID, @mPriv\Privileges[0]\Luid, SizeOf(LUID))
If AdjustTokenPrivileges_(hToken, #False, @mPriv, SizeOf(TOKEN_PRIVILEGES), @mNewPriv, @Buff) = 0
CloseHandle_(hToken)
ProcedureReturn #False
EndIf
If GetLastError_() <> #ERROR_SUCCESS
CloseHandle_(hToken)
ProcedureReturn #False
EndIf
; If we get here, then it worked. Returns TRUE
CloseHandle_(hToken)
ProcedureReturn #True
EndProcedure
Code: Select all
If IncreasePrivileges() = #False
MessageBox_(0, "Could not retrieve all privileges.", "Error :", #MB_ICONEXCLAMATION)
EndIf
