ReneMiner
04-10-2020, 15:29
very simple. To avoid the engine must load a few thousand const-values every time when i run a script - and then my own constants also - its eating up time and i guess of the more than 5000 that are poked to memory if Uses "UI" we might use a few hundreds per script, if at all. And then the names - what const names are available for %MB_ ??? - yes, a lot.
Can you tell what is the difference between this
Begin Const
$SE_CREATE_TOKEN_NAME = "SeCreateTokenPrivilege"
$SE_ASSIGNPRIMARYTOKEN_NAME = "SeAssignPrimaryTokenPrivilege"
$SE_LOCK_MEMORY_NAME = "SeLockMemoryPrivilege"
$SE_INCREASE_QUOTA_NAME = "SeIncreaseQuotaPrivilege"
$SE_UNSOLICITED_INPUT_NAME = "SeUnsolicitedInputPrivilege"
$SE_MACHINE_ACCOUNT_NAME = "SeMachineAccountPrivilege"
$SE_TCB_NAME = "SeTcbPrivilege"
$SE_SECURITY_NAME = "SeSecurityPrivilege"
$SE_TAKE_OWNERSHIP_NAME = "SeTakeOwnershipPrivilege"
$SE_LOAD_DRIVER_NAME = "SeLoadDriverPrivilege"
$SE_SYSTEM_PROFILE_NAME = "SeSystemProfilePrivilege"
$SE_SYSTEMTIME_NAME = "SeSystemtimePrivilege"
$SE_PROF_SINGLE_PROCESS_NAME = "SeProfileSingleProcessPrivilege"
$SE_INC_BASE_PRIORITY_NAME = "SeIncreaseBasePriorityPrivilege"
$SE_CREATE_PAGEFILE_NAME = "SeCreatePagefilePrivilege"
$SE_CREATE_PERMANENT_NAME = "SeCreatePermanentPrivilege"
$SE_BACKUP_NAME = "SeBackupPrivilege"
$SE_RESTORE_NAME = "SeRestorePrivilege"
$SE_SHUTDOWN_NAME = "SeShutdownPrivilege"
$SE_DEBUG_NAME = "SeDebugPrivilege"
$SE_AUDIT_NAME = "SeAuditPrivilege"
$SE_SYSTEM_ENVIRONMENT_NAME = "SeSystemEnvironmentPrivilege"
$SE_CHANGE_NOTIFY_NAME = "SeChangeNotifyPrivilege"
$SE_REMOTE_SHUTDOWN_NAME = "SeRemoteShutdownPrivilege"
End Const
and this :
Alias Function As Equate
Alias Type As Enum_Const
Enum_Const String_SE
Equate CREATE_TOKEN_NAME() As String : Equate = "SeCreateTokenPrivilege" : End Equate
Equate ASSIGNPRIMARYTOKEN_NAME() As String : Equate ="SeAssignPrimaryTokenPrivilege" : End Equate
Equate LOCK_MEMORY_NAME() As String : Equate ="SeLockMemoryPrivilege" : End Equate
Equate INCREASE_QUOTA_NAME() As String : Equate ="SeIncreaseQuotaPrivilege" : End Equate
Equate UNSOLICITED_INPUT_NAME() As String : Equate ="SeUnsolicitedInputPrivilege" : End Equate
Equate MACHINE_ACCOUNT_NAME() As String : Equate ="SeMachineAccountPrivilege" : End Equate
Equate TCB_NAME() As String : Equate ="SeTcbPrivilege" : End Equate
Equate SECURITY_NAME() As String : Equate ="SeSecurityPrivilege" : End Equate
Equate TAKE_OWNERSHIP_NAME() As String : Equate ="SeTakeOwnershipPrivilege" : End Equate
Equate LOAD_DRIVER_NAME() As String : Equate ="SeLoadDriverPrivilege" : End Equate
Equate SYSTEM_PROFILE_NAME() As String : Equate ="SeSystemProfilePrivilege" : End Equate
Equate SYSTEMTIME_NAME() As String : Equate ="SeSystemtimePrivilege" : End Equate
Equate PROF_SINGLE_PROCESS_NAME () As String : Equate ="SeProfileSingleProcessPrivilege" : End Equate
Equate INC_BASE_PRIORITY_NAME () As String : Equate ="SeIncreaseBasePriorityPrivilege" : End Equate
Equate CREATE_PAGEFILE_NAME () As String : Equate ="SeCreatePagefilePrivilege" : End Equate
Equate CREATE_PERMANENT_NAME () As String : Equate ="SeCreatePermanentPrivilege" : End Equate
Equate BACKUP_NAME() As String : Equate ="SeBackupPrivilege" : End Equate
Equate RESTORE_NAME() As String : Equate ="SeRestorePrivilege" : End Equate
Equate SHUTDOWN_NAME() As String : Equate ="SeShutdownPrivilege" : End Equate
Equate DEBUG_NAME() As String : Equate ="SeDebugPrivilege" : End Equate
Equate AUDIT_NAME() As String : Equate ="SeAuditPrivilege" : End Equate
Equate SYSTEM_ENVIRONMENT_NAME() As String : Equate ="SeSystemEnvironmentPrivilege" : End Equate
Equate CHANGE_NOTIFY_NAME() As String : Equate ="SeChangeNotifyPrivilege" : End Equate
Equate REMOTE_SHUTDOWN_NAME() As String : Equate ="SeRemoteShutdownPrivilege" : End Equate
end Enum_Const
Global SE# as String_SE
Dim a$ as String = SE#.BACKUP_NAME
msgbox a$
Right. It is only available after Global SE#. Not poked to memory nor variables table
it could be better if the top line were
Enum Const SE# As String
to make it unnecessary to repeat "() As String : Equate = "..." : End Equate
String - on top - all equates in an enumeration are of the same type.
There can only be one of this udt if the last line (actually End Type) would finally dimension it and it were no more possible
to dim anything else as String_SE because String_SE is only the name for this example - actually SE# ends with that numbering symbol # - it works to have subelements but it could be restricted in Local/Global/Dim/Redim.
No Variables name neither a type to dim As must end with # in a Dim-statement
If Keyword "Type" for this "Enumerated Constant" is replaced by another keyword or combination of keywords "Enum" & "Const" it should be not a problem to make the "End Enum Const" finally dimension the Global UDT with the Name given in the beginning.
It could be Enum Equate as well but I used it to replace keyword Function. so i had to use it 3 times per line
(BUG: thinAir will not realize "Function fName() :Return something : End Function " on one line as valid function.
But using Alias Function As Equate works fine.
Final syntax of camouflaged Type-functions to Enumerate Equates can be simpler- no parenthesis nor anything else - just the result to return has to be assigned.
Begin Equate SE# As String
LOAD_DRIVER_NAME = "SeLoadDriverPrivilege"
' function will always return this value
' - so its not possible to change it once the script runs
'....
End Equate
These constants are from WinApi "NT Defined Privileges" - just taken for the example
for the purpose of reading something in the msgbox
Can you tell what is the difference between this
Begin Const
$SE_CREATE_TOKEN_NAME = "SeCreateTokenPrivilege"
$SE_ASSIGNPRIMARYTOKEN_NAME = "SeAssignPrimaryTokenPrivilege"
$SE_LOCK_MEMORY_NAME = "SeLockMemoryPrivilege"
$SE_INCREASE_QUOTA_NAME = "SeIncreaseQuotaPrivilege"
$SE_UNSOLICITED_INPUT_NAME = "SeUnsolicitedInputPrivilege"
$SE_MACHINE_ACCOUNT_NAME = "SeMachineAccountPrivilege"
$SE_TCB_NAME = "SeTcbPrivilege"
$SE_SECURITY_NAME = "SeSecurityPrivilege"
$SE_TAKE_OWNERSHIP_NAME = "SeTakeOwnershipPrivilege"
$SE_LOAD_DRIVER_NAME = "SeLoadDriverPrivilege"
$SE_SYSTEM_PROFILE_NAME = "SeSystemProfilePrivilege"
$SE_SYSTEMTIME_NAME = "SeSystemtimePrivilege"
$SE_PROF_SINGLE_PROCESS_NAME = "SeProfileSingleProcessPrivilege"
$SE_INC_BASE_PRIORITY_NAME = "SeIncreaseBasePriorityPrivilege"
$SE_CREATE_PAGEFILE_NAME = "SeCreatePagefilePrivilege"
$SE_CREATE_PERMANENT_NAME = "SeCreatePermanentPrivilege"
$SE_BACKUP_NAME = "SeBackupPrivilege"
$SE_RESTORE_NAME = "SeRestorePrivilege"
$SE_SHUTDOWN_NAME = "SeShutdownPrivilege"
$SE_DEBUG_NAME = "SeDebugPrivilege"
$SE_AUDIT_NAME = "SeAuditPrivilege"
$SE_SYSTEM_ENVIRONMENT_NAME = "SeSystemEnvironmentPrivilege"
$SE_CHANGE_NOTIFY_NAME = "SeChangeNotifyPrivilege"
$SE_REMOTE_SHUTDOWN_NAME = "SeRemoteShutdownPrivilege"
End Const
and this :
Alias Function As Equate
Alias Type As Enum_Const
Enum_Const String_SE
Equate CREATE_TOKEN_NAME() As String : Equate = "SeCreateTokenPrivilege" : End Equate
Equate ASSIGNPRIMARYTOKEN_NAME() As String : Equate ="SeAssignPrimaryTokenPrivilege" : End Equate
Equate LOCK_MEMORY_NAME() As String : Equate ="SeLockMemoryPrivilege" : End Equate
Equate INCREASE_QUOTA_NAME() As String : Equate ="SeIncreaseQuotaPrivilege" : End Equate
Equate UNSOLICITED_INPUT_NAME() As String : Equate ="SeUnsolicitedInputPrivilege" : End Equate
Equate MACHINE_ACCOUNT_NAME() As String : Equate ="SeMachineAccountPrivilege" : End Equate
Equate TCB_NAME() As String : Equate ="SeTcbPrivilege" : End Equate
Equate SECURITY_NAME() As String : Equate ="SeSecurityPrivilege" : End Equate
Equate TAKE_OWNERSHIP_NAME() As String : Equate ="SeTakeOwnershipPrivilege" : End Equate
Equate LOAD_DRIVER_NAME() As String : Equate ="SeLoadDriverPrivilege" : End Equate
Equate SYSTEM_PROFILE_NAME() As String : Equate ="SeSystemProfilePrivilege" : End Equate
Equate SYSTEMTIME_NAME() As String : Equate ="SeSystemtimePrivilege" : End Equate
Equate PROF_SINGLE_PROCESS_NAME () As String : Equate ="SeProfileSingleProcessPrivilege" : End Equate
Equate INC_BASE_PRIORITY_NAME () As String : Equate ="SeIncreaseBasePriorityPrivilege" : End Equate
Equate CREATE_PAGEFILE_NAME () As String : Equate ="SeCreatePagefilePrivilege" : End Equate
Equate CREATE_PERMANENT_NAME () As String : Equate ="SeCreatePermanentPrivilege" : End Equate
Equate BACKUP_NAME() As String : Equate ="SeBackupPrivilege" : End Equate
Equate RESTORE_NAME() As String : Equate ="SeRestorePrivilege" : End Equate
Equate SHUTDOWN_NAME() As String : Equate ="SeShutdownPrivilege" : End Equate
Equate DEBUG_NAME() As String : Equate ="SeDebugPrivilege" : End Equate
Equate AUDIT_NAME() As String : Equate ="SeAuditPrivilege" : End Equate
Equate SYSTEM_ENVIRONMENT_NAME() As String : Equate ="SeSystemEnvironmentPrivilege" : End Equate
Equate CHANGE_NOTIFY_NAME() As String : Equate ="SeChangeNotifyPrivilege" : End Equate
Equate REMOTE_SHUTDOWN_NAME() As String : Equate ="SeRemoteShutdownPrivilege" : End Equate
end Enum_Const
Global SE# as String_SE
Dim a$ as String = SE#.BACKUP_NAME
msgbox a$
Right. It is only available after Global SE#. Not poked to memory nor variables table
it could be better if the top line were
Enum Const SE# As String
to make it unnecessary to repeat "() As String : Equate = "..." : End Equate
String - on top - all equates in an enumeration are of the same type.
There can only be one of this udt if the last line (actually End Type) would finally dimension it and it were no more possible
to dim anything else as String_SE because String_SE is only the name for this example - actually SE# ends with that numbering symbol # - it works to have subelements but it could be restricted in Local/Global/Dim/Redim.
No Variables name neither a type to dim As must end with # in a Dim-statement
If Keyword "Type" for this "Enumerated Constant" is replaced by another keyword or combination of keywords "Enum" & "Const" it should be not a problem to make the "End Enum Const" finally dimension the Global UDT with the Name given in the beginning.
It could be Enum Equate as well but I used it to replace keyword Function. so i had to use it 3 times per line
(BUG: thinAir will not realize "Function fName() :Return something : End Function " on one line as valid function.
But using Alias Function As Equate works fine.
Final syntax of camouflaged Type-functions to Enumerate Equates can be simpler- no parenthesis nor anything else - just the result to return has to be assigned.
Begin Equate SE# As String
LOAD_DRIVER_NAME = "SeLoadDriverPrivilege"
' function will always return this value
' - so its not possible to change it once the script runs
'....
End Equate
These constants are from WinApi "NT Defined Privileges" - just taken for the example
for the purpose of reading something in the msgbox