Incluye | | | | | Ein Ausschnitt de el DACL_SET.INC (SET_PROCESS_RIGHTS.INC): KompilierenMarcaSeparaciónDEF @AHGetWindowThreadProcessId(2) !USER32,GetWindowThreadProcessId
DEF @AHGetCurrentProcess(0) !KERNEL32,GetCurrentProcess
DEF @AHOpenProcess(3) !KERNEL32,OpenProcess
DEF @AHCloseHandle(1) !KERNEL32,CloseHandle
DEF @AHGetKernelObjectSecurity(5) !ADVAPI32,GetKernelObjectSecurity
DEF @AHSetKernelObjectSecurity(3) !ADVAPI32,SetKernelObjectSecurity
DEF @AHLookupAccountName(7) !advapi32,LookupAccountNameA
DEF @AHCopyMemory(3) !kernel32,RtlMoveMemory
DEF @AHInitializeSecurityDescriptor(2) !ADVAPI32,InitializeSecurityDescriptor
DEF @AHSetSecurityDescriptorDacl(4) !ADVAPI32,SetSecurityDescriptorDacl
DEF @AHAddAce(5) !ADVAPI32,AddAce
DEF @AHGetSecurityDescriptorOwner(3) !ADVAPI32,GetSecurityDescriptorOwner
DEF @AHGetSecurityDescriptorGroup(3) !ADVAPI32,GetSecurityDescriptorGroup
DEF @AHGetSecurityDescriptorDACL(4) !ADVAPI32,GetSecurityDescriptorDacl
DEF @AHLookupAccountSid(7) !ADVAPI32,LookupAccountSidA
DEF @AHIsValidAcl(1) !ADVAPI32,IsValidAcl
DEF @AHGetAclInformation(4) !ADVAPI32,GetAclInformation
DEF @AHGetAce(3) !ADVAPI32,GetAce
DEF @AHLocalFree(1) !KERNEL32,LocalFree
DEF @AHInitializeAcl(3) !ADVAPI32,InitializeAcl
Declare FILE_FEHLER&,CBNAME$
Declare SEC_ID#,CBNAME_SIZE#,CBNAME#
Declare SID#,F_PROC_SID_NAME_USE#
Declare Needed#,NEW_ACL1#,SIDA#
Declare STRSID#,ACL_INFO#,ACE#,P_ACE#,P_STRSID#
Declare SID2#,P_ACL#,ACL_D#
Declare PSECURITY_DESCRIPTOR#,ACL_PRESENT#
Declare F_PROC_ACCOUNT_NAME#,F_PROC_SIZE_ACCOUNT#,F_PROC_Domain#,SIZE_F_PROC_Domain#
Declare AHRechte$[36,2],F_PROC_Zähler2&
Proc Set_Process_ACE_IN_DACL
Parameters F_PROC_Process$,F_PROC_USER$,Hinzu_entfernen$,FSFLAGS$
Declare F_SYS$,Needed&
Declare F_LAUFWERK$
Declare FSFlags&
Declare ANZAHL_BYTES&
Declare F_PROC_Zähler&,ACE_SIZE&
Declare IO%,SecFlag&,ACCESS_MASK&
Declare Vorhanden&,SecFlag&,NEEDED&
Declare ACE_ZÄHLER&,SIZE_ACCOUNT&
Declare CFS$,PROCESS_ID&,THREAD_ID&,F_PROC_Process&,Ersatz$
1.Parameter=
Das Handle eines Prozesses als String,
der Titel eines Fensters
oder ein Leerstring für den aktuellen Prozess
2.Parameter= Username
3.Parameter= +;-;0 (-=Rechte verbieten, +=Rechte erlauben, 0=alles vorhandene löschen)
4.Parameter= Flags als String
Mögliche Flags
PROCESS_TERMINATE (Erlaubt Process zu beenden $1)
PROCESS_CREATE_THREAD (Erlaubt einen Remote-Thread durch einen anderen Prozess zu erzeugen $2)
PROCESS_SET_SESSIONID ($4)
PROCESS_VM_OPERATION (Erlaubt fremdem Prozess Zugriff auf Prozessspeicher zu verändern $8)
PROCESS_VM_READ (Erlaubt anderem Prozess Prozessspeicher zu lesen $10)
PROCESS_VM_WRITE (Erlaubt anderem Prozess Prozessspeicher zu schreiben $20)
PROCESS_DUP_HANDLE (Erlaubt Prozess-Handle zu kopieren $40)
PROCESS_CREATE_PROCESS (Intern genutzt $80)
PROCESS_SET_QUOTA ($100)
PROCESS_SET_INFORMATION (Erlaubt Priorität zu ändern $200)
PROCESS_QUERY_INFORMATION (Erlaubt Prozessdaten (Exitcode/Priorität) auszulesen $400)
PROCESS_SUSPEND_RESUME ($800)
SYNCHRONIZE (Erlaubt einem Handle auf ein Complitition I/O zu warten)
WRITE_DAC (Ändern der DACL Einträge)
READ_CONTROL (Lesen der DACL Einträge und Besitzer)
WRITE_OWNER (Eigentümer ändern)
_DELETE (löschen)
GENERIC_READ (Leserecht)
GENERIC_WRITE (Schreibrecht)
GENERIC_EXECUTE (Recht zum Ausführen und Durchsuchen).
GENERIC_ALL (Alle Rechte)
CLEAR AHRechte$[]
LET AHRechte$[1,2]=$1
LET AHRechte$[2,2]=$2
LET AHRechte$[3,2]=$4
LET AHRechte$[4,2]=$8
LET AHRechte$[5,2]=$10
LET AHRechte$[6,2]=$20
LET AHRechte$[7,2]=$40
LET AHRechte$[8,2]=$80
LET AHRechte$[9,2]=$100
LET AHRechte$[10,2]=$200
LET AHRechte$[11,2]=$400
LET AHRechte$[12,2]=$800
LET AHRechte$[13,2]=$1000
LET AHRechte$[14,2]=$2000
LET AHRechte$[15,2]=$4000
LET AHRechte$[16,2]=$8000
LET AHRechte$[17,0]=_DELETE
LET AHRechte$[17,1]=löschen
LET AHRechte$[17,2]=$10000
LET AHRechte$[18,0]=READ_CONTROL
LET AHRechte$[18,1]=(Lesen der DACL Einträge und Besitzer)
LET AHRechte$[18,2]=$20000
LET AHRechte$[19,0]=WRITE_DAC
LET AHRechte$[19,1]=(Ändern der DACL Einträge)
LET AHRechte$[19,2]=$40000
LET AHRechte$[20,0]=WRITE_OWNER
LET AHRechte$[20,1]=(Eigentümer ändern)
LET AHRechte$[20,2]=$80000
LET AHRechte$[21,0]=SYNCHRONIZE
LET AHRechte$[21,1]=(Erlaubt einem Handle auf ein Complitition I/O zu warten)
LET AHRechte$[21,2]=$100000
LET AHRechte$[22,2]=$200000
LET AHRechte$[23,2]=$400000
LET AHRechte$[24,2]=$800000
LET AHRechte$[24,0]=ACCESS_SYSTEM_SECURITY
LET AHRechte$[24,1]=(Zugriff auf den SACL)
LET AHRechte$[25,2]=$1000000
LET AHRechte$[26,2]=$2000000
LET AHRechte$[27,2]=$4000000
LET AHRechte$[28,0]=GENERIC_ALL
LET AHRechte$[28,1]=(Vollzugriff)
LET AHRechte$[28,2]=$10000000
LET AHRechte$[29,0]=GENERIC_EXECUTE
LET AHRechte$[29,1]=(Rechte zum Ausführen und Durchsuchen)
LET AHRechte$[29,2]=$20000000
LET AHRechte$[30,0]=GENERIC_WRITE
LET AHRechte$[30,1]=(Schreibrechte)
LET AHRechte$[30,2]=$40000000
LET AHRechte$[31,0]=GENERIC_READ
LET AHRechte$[31,1]=(Leserechte)
LET AHRechte$[31,2]=$80000000
LET AHRechte$[0,0]=PROCESS_ALL_ACCESS
LET AHRechte$[0,1]=(Vollzugriff)
LET AHRechte$[0,2]=$1F0FFF
LET AHRechte$[1,0]=PROCESS_TERMINATE
LET AHRechte$[1,1]=(Erlaubt Process zu beenden)
LET AHRechte$[2,0]=PROCESS_CREATE_THREAD
LET AHRechte$[2,1]=(Erlaubt einen Remote-Thread zu erzeugen)
LET AHRechte$[3,0]=PROCESS_SET_SESSIONID
LET AHRechte$[3,1]=($4)
LET AHRechte$[4,0]=PROCESS_VM_OPERATION
LET AHRechte$[4,1]=(Erlaubt Zugriff auf Prozessspeicher zu verändern)
LET AHRechte$[5,0]=PROCESS_VM_READ
LET AHRechte$[5,1]=(Erlaubt anderem Prozess Prozessspeicher zu lesen)
LET AHRechte$[6,0]=PROCESS_VM_WRITE
LET AHRechte$[6,1]=(Erlaubt anderem Prozess Prozessspeicher zu schreiben)
LET AHRechte$[7,0]=PROCESS_DUP_HANDLE
LET AHRechte$[7,1]=(Erlaubt Prozess-Handle zu kopieren)
LET AHRechte$[8,0]=PROCESS_CREATE_PROCESS
LET AHRechte$[8,1]=($80)
LET AHRechte$[9,0]=PROCESS_SET_QUOTA
LET AHRechte$[9,1]=($100)
LET AHRechte$[10,0]=PROCESS_SET_INFORMATION
LET AHRechte$[10,1]=(Erlaubt u.a. Priorität zu ändern)
LET AHRechte$[11,0]=PROCESS_QUERY_INFORMATION
LET AHRechte$[11,1]=(Erlaubt Prozessdaten (Exitcode/Priorität) auszulesen
LET AHRechte$[12,0]=PROCESS_SUSPEND_RESUME
LET AHRechte$[12,1]=($800)
LET AHRechte$[13,0]=
LET AHRechte$[13,1]=
LET AHRechte$[14,0]=
LET AHRechte$[14,1]=
LET AHRechte$[15,0]=
LET AHRechte$[15,1]=
LET AHRechte$[16,0]=
LET AHRechte$[16,1]=
LET AHRechte$[23,0]=
LET AHRechte$[23,1]=
LET AHRechte$[24,0]=
LET AHRechte$[24,1]=
LET AHRechte$[25,0]=
LET AHRechte$[25,1]=
LET AHRechte$[27,0]=
LET AHRechte$[27,1]=
LET AHRechte$[27,0]=
LET AHRechte$[27,1]=
LET AHRechte$[32,0]=PROCESS_READ
LET AHRechte$[32,1]=(Leserecht)
LET AHRechte$[32,2]=$20410
LET AHRechte$[33,0]=PROCESS_EXECUTE
LET AHRechte$[33,1]=(Recht zum Ausführen und Durchsuchen)
LET AHRechte$[33,2]=$120000
LET AHRechte$[34,0]=PROCESS_WRITE
LET AHRechte$[34,1]=(Schreibrecht)
LET AHRechte$[34,2]=$020BEB
IF @AND(F_PROC_USER$<>,@OR(@INSTR(+,Hinzu_entfernen$)>0,@INSTR(-,Hinzu_entfernen$)>0))
Clear Needed&
Clear F_SYS$,FSFlags&
Clear ANZAHL_BYTES&
Clear F_PROC_Zähler&,ACE_SIZE&
Clear SecFlag&,ACCESS_MASK&
Clear Vorhanden&,SecFlag&,NEEDED&
Clear ACE_ZÄHLER&,SIZE_ACCOUNT&
LET FSFlags&=0
DIM STRSID#,256
DIM P_STRSID#,4
DIM Needed#,4
LET FSFLAGS$= +@UPPER$(FSFLAGS$)
LET FSFLAGS$=@Translate$(FSFLAGS$,GENERIC_ALL,PROCESS_ALL_ACCESS)
LET FSFLAGS$=@Translate$(FSFLAGS$,GENERIC_READ,PROCESS_READ)
LET FSFLAGS$=@Translate$(FSFLAGS$,GENERIC_WRITE,PROCESS_WRITE)
LET FSFLAGS$=@Translate$(FSFLAGS$,GENERIC_EXECUTE,PROCESS_EXECUTE)
LET Ersatz$=PROCESS_SET_SESSIONID PROCESS_VM_OPERATION PROCESS_CREATE_THREAD PROCESS_VM_WRITE PROCESS_VM_READ PROCESS_DUP_HANDLE
LET ERSATZ$=ERSATZ$+PROCESS_SET_QUOTA PROCESS_SET_INFORMATION PROCESS_QUERY_INFORMATION PROCESS_SUSPEND_RESUME WRITE_DAC
LET ERSATZ$=ERSATZ$+PROCESS_CREATE_PROCESS READ_CONTROL WRITE_OWNER SYNCHRONIZE READ_CONTROL PROCESS_TERMINATE
LET FSFLAGS$=@Translate$(FSFLAGS$,PROCESS_ALL_ACCESS,Ersatz$)
LET FSFLAGS$=@Translate$(FSFLAGS$,PROCESS_EXECUTE,SYNCHRONIZE READ_CONTROL)
LET Ersatz$=PROCESS_SET_INFORMATION PROCESS_SET_QUOTA PROCESS_SUSPEND_RESUME PROCESS_CREATE_PROCESS PROCESS_DUP_HANDLE
LET ERSATZ$=ERSATZ$+PROCESS_VM_WRITE PROCESS_VM_OPERATION READ_CONTROL PROCESS_TERMINATE PROCESS_CREATE_THREAD
LET FSFLAGS$=@Translate$(FSFLAGS$,PROCESS_WRITE,Ersatz$)
LET FSFLAGS$=@Translate$(FSFLAGS$,PROCESS_READ,PROCESS_QUERY_INFORMATION READ_CONTROL PROCESS_TERMINATE )
IF @UPPER$(F_PROC_Process$)<>
IF @VAL(F_PROC_Process$)<>0
LET F_PROC_Process&=@VAL(F_PROC_Process$)
Else
THREAD_ID&=@AHGetWindowThreadProcessId(@FINDWINDOW(F_PROC_Process$),@ADDR(PROCESS_ID&))
LET F_PROC_Process&=@AHOpenProcess($40000 | $20000,0,PROCESS_ID&)
endif
else
LET F_PROC_Process&=@AHGetCurrentProcess()
endif
DIM SIDa#,1
DIM PSECURITY_DESCRIPTOR#,1
LET SECFLAG&=$1 | $2 | $4
Long Needed#,0=1
LET FILE_FEHLER&=@AHGetKernelObjectSecurity(F_PROC_Process&,SecFlag&,PSECURITY_DESCRIPTOR#,1,Needed#)
LET NEEDED&=@LONG(Needed#,0)
Dispose PSECURITY_DESCRIPTOR#
CLEAR NEEDED#
CASE NEEDED&=0 : LET NEEDED&=1024
DIM PSECURITY_DESCRIPTOR#,Needed&
Clear PSECURITY_DESCRIPTOR#
LET FILE_FEHLER&=@AHGetKernelObjectSecurity(F_PROC_Process&,SecFlag&,PSECURITY_DESCRIPTOR#,Needed&,Needed#)
DIM ACL_PRESENT#,4
DIM P_ACL#,4
DIM ACL_D#,4
Clear ACL_PRESENT#,P_ACL#,ACL_D#
Let FILE_FEHLER&=@AHGetSecurityDescriptorDACL(PSECURITY_DESCRIPTOR#,ACL_PRESENT#,P_ACL#,ACL_D#)
LET ANZAHL_BYTES&=8 Für ACL HEADER 8 Bytes veranschlagt
IF @AND(FILE_FEHLER&=1,@LONG(ACL_PRESENT#,0)=1)
DIM ACL_INFO#,12
DIM P_ACE#,4
CLEAR ACL_INFO#,P_ACE#
Let FILE_FEHLER&=@AHGetAclInformation(@long(P_ACL#,0),ACL_INFO#,12,2)
LET F_PROC_Zähler&=0
DIM F_PROC_ACCOUNT_NAME#,256
DIM F_PROC_SIZE_ACCOUNT#,4
DIM F_PROC_Domain#,256
DIM SIZE_F_PROC_Domain#,4
DIM F_PROC_SID_NAME_USE#,4
IF @LONG(ACL_INFO#,0)<>0
While F_PROC_Zähler&<@LONG(ACL_INFO#,0)
Sleep 10
Clear P_ACE#
Let FILE_FEHLER&=@AHGetAce(@long(P_ACL#,0),F_PROC_Zähler&,P_ACE#)
DIM ACE#,4
Clear ACE#
@AHCopyMemory(ACE#,@LONG(P_ACE#,0),4)
LET ACE_SIZE&=@Word(ACE#,2) Die Größen aller ACEs werden addiert.
LET ANZAHL_BYTES&=ANZAHL_BYTES&+ACE_SIZE&
Dispose ACE#
DIM ACE#,ACE_SIZE&
Clear F_PROC_SID_NAME_USE#
Clear F_PROC_ACCOUNT_NAME#
Clear F_PROC_Domain#
Clear ACE#
Long F_PROC_SIZE_ACCOUNT#,0=256
LONG SIZE_F_PROC_Domain#,0=256
@AHCopyMemory(ACE#,@LONG(P_ACE#,0),ACE_SIZE&)
DIM SID2#,ACE_SIZE&-8
clear SID2#
@AHCopyMemory(SID2#,@LONG(P_ACE#,0)+8,ACE_SIZE&-8)
LET FILE_FEHLER&=@AHLookupAccountSid(@ADDR(F_SYS$),SID2#,F_PROC_ACCOUNT_NAME#,F_PROC_SIZE_ACCOUNT#,F_PROC_Domain#,SIZE_F_PROC_Domain#,F_PROC_SID_NAME_USE#)
Clear STRSID#
IF @VAL(@LEFT$($WINVER,3))>=5.0
@AHCopyMemory(STRSID#,@LONG(P_STRSID#,0),256)
LET FILE_FEHLER&=@AHLocalFree(@LONG(P_STRSID#,0))
endif
IF @UPPER$(@String$(F_PROC_ACCOUNT_NAME#,0))=@UPPER$(F_PROC_USER$)
IF @AND(@BYTE(ACE#,0)=0,@INSTR(+,Hinzu_entfernen$)>0)
LET VORHANDEN&=VORHANDEN& | 1
endif
IF @AND(@BYTE(ACE#,0)=1,@INSTR(-,Hinzu_entfernen$)>0)
LET VORHANDEN&=VORHANDEN& | 1
endif
endif
LET ACCESS_MASK&=@LONG(ACE#,4)
LET F_PROC_Zähler2&=0
While F_PROC_Zähler2&<36
sleep 10
IF @and(@or(ACCESS_MASK&,@VAl(AHRechte$[F_PROC_Zähler2&,2]))=ACCESS_MASK&,@VAl(AHRechte$[F_PROC_Zähler2&,2])<>0)
LET ACCESS_MASK&=ACCESS_MASK&-@VAl(AHRechte$[F_PROC_Zähler2&,2])
endif
Let F_PROC_Zähler2&=F_PROC_Zähler2&+1
wend
LET F_PROC_Zähler&=F_PROC_Zähler&+1
Dispose SID2#
Dispose ACE#
wend
Endif
Clear F_PROC_SID_NAME_USE#,F_PROC_ACCOUNT_NAME#,F_PROC_Domain#,SIDa#,F_SYS$
Long F_PROC_SIZE_ACCOUNT#,0=1
LONG SIZE_F_PROC_Domain#,0=256
LET FILE_FEHLER&=@AHLookupAccountName(@ADDR(F_SYS$),@addr(F_PROC_USER$),SIDa#,F_PROC_SIZE_ACCOUNT#,F_PROC_Domain#,SIZE_F_PROC_Domain#,F_PROC_SID_NAME_USE#)
LET SIZE_ACCOUNT&=@LONG(F_PROC_SIZE_ACCOUNT#,0)
Clear F_PROC_SID_NAME_USE#
Clear F_PROC_ACCOUNT_NAME#
Clear F_PROC_Domain#
Long F_PROC_SIZE_ACCOUNT#,0=SIZE_ACCOUNT&
LONG SIZE_F_PROC_Domain#,0=256
Dispose SIDa#
DIM SIDa#,SIZE_ACCOUNT&
Clear SIDa#
LET FILE_FEHLER&=@AHLookupAccountName(@ADDR(F_SYS$),@addr(F_PROC_USER$),SIDa#,F_PROC_SIZE_ACCOUNT#,F_PROC_Domain#,SIZE_F_PROC_Domain#,F_PROC_SID_NAME_USE#)
IF VORHANDEN&=0
LET Anzahl_Bytes&=Anzahl_Bytes&+@LONG(F_PROC_SIZE_ACCOUNT#,0)+8 Alle ACEs+SID+ACCESS_MASK+ACE_HEADER
endif
IF @INSTR(0,Hinzu_entfernen$)>0
LET Anzahl_Bytes&=@LONG(F_PROC_SIZE_ACCOUNT#,0)+8+8 SID+ACCESS_MASK+ACE_HEADER+ACL_HEADER
endif
Dispose F_PROC_ACCOUNT_NAME#
Dispose F_PROC_SIZE_ACCOUNT#
Dispose F_PROC_Domain#
Dispose SIZE_F_PROC_Domain#
Dispose F_PROC_SID_NAME_USE#
Dispose P_ACE#
Dispose ACL_INFO#
Endif
DIM NEW_ACL1#,Anzahl_Bytes&
LET FILE_FEHLER&=@AHInitializeAcl(NEW_ACL1#,Anzahl_Bytes&,$2)
Clear ACL_PRESENT#,P_ACL#,ACL_D#
Let FILE_FEHLER&=@AHGetSecurityDescriptorDACL(PSECURITY_DESCRIPTOR#,ACL_PRESENT#,P_ACL#,ACL_D#)
LET FILE_FEHLER&=@AHIsValidAcl(@long(P_ACL#,0))
IF @INSTR(-,Hinzu_entfernen$)>0
LET ACE_ZÄHLER&=1
else
LET ACE_ZÄHLER&=0
endif
IF @AND(FILE_FEHLER&=1,@LONG(ACL_PRESENT#,0)=1)
DIM ACL_INFO#,12
DIM P_ACE#,4
CLEAR ACL_INFO#,P_ACE#
Let FILE_FEHLER&=@AHGetAclInformation(@long(P_ACL#,0),ACL_INFO#,12,2)
LET F_PROC_Zähler&=0
DIM F_PROC_ACCOUNT_NAME#,256
DIM F_PROC_SIZE_ACCOUNT#,4
DIM F_PROC_Domain#,256
DIM SIZE_F_PROC_Domain#,4
DIM F_PROC_SID_NAME_USE#,4
IF @LONG(ACL_INFO#,0)<>0
While F_PROC_Zähler&<@LONG(ACL_INFO#,0)
sleep 10
sleep 10
Clear P_ACE#
Let FILE_FEHLER&=@AHGetAce(@long(P_ACL#,0),F_PROC_Zähler&,P_ACE#)
DIM ACE#,4
Clear ACE#
@AHCopyMemory(ACE#,@LONG(P_ACE#,0),4)
LET ACE_SIZE&=@Word(ACE#,2)
LET ANZAHL_BYTES&=ANZAHL_BYTES&+ACE_SIZE&
Dispose ACE#
DIM ACE#,ACE_SIZE&
Clear F_PROC_SID_NAME_USE#
Clear F_PROC_ACCOUNT_NAME#
Clear F_PROC_Domain#
Clear ACE#
Long F_PROC_SIZE_ACCOUNT#,0=256
LONG SIZE_F_PROC_Domain#,0=256
@AHCopyMemory(ACE#,@LONG(P_ACE#,0),ACE_SIZE&)
REM
DIM SID2#,ACE_SIZE&
CLEAR SID2#
@AHCopyMemory(SID2#,@LONG(P_ACE#,0)+8,ACE_SIZE&-8)
LET FILE_FEHLER&=@AHLookupAccountSid(@ADDR(F_SYS$),SID2#,F_PROC_ACCOUNT_NAME#,F_PROC_SIZE_ACCOUNT#,F_PROC_Domain#,SIZE_F_PROC_Domain#,F_PROC_SID_NAME_USE#)
Clear STRSID#
LET ACCESS_MASK&=@LONG(ACE#,4)
IF @UPPER$(@String$(F_PROC_ACCOUNT_NAME#,0))=@UPPER$(F_PROC_USER$)
IF @BYTE(ACE#,0)=0
IF @INSTR(+,Hinzu_entfernen$)>0
CASE @INSTR(0,Hinzu_entfernen$)=0 : LET FSFlags&=ACCESS_MASK&
ElseIF @INSTR(-,Hinzu_entfernen$)>0
if @INSTR(0,Hinzu_entfernen$)=0
LET F_PROC_Zähler2&=0
While F_PROC_Zähler2&<36
sleep 10
IF AHRechte$[F_PROC_Zähler2&,0]<>
IF @AND(@or(ACCESS_MASK&,@val(AHRechte$[F_PROC_Zähler2&,2]))=ACCESS_MASK&,@INSTR( +AHRechte$[F_PROC_Zähler2&,0],@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-@val(AHRechte$[F_PROC_Zähler2&,2])
endif
endif
LET F_PROC_Zähler2&=F_PROC_Zähler2&+1
wend
LONG ACE#,4=ACCESS_MASK&
IF ACCESS_MASK&<>0
LET FILE_FEHLER&=@AHAddAce(NEW_ACL1#,$2,ACE_ZÄHLER&,ACE#,ACE_SIZE&)
LET FILE_FEHLER&=@AHIsValidAcl(NEW_ACL1#)
LET ACE_ZÄHLER&=ACE_ZÄHLER&+1
endif
ENDIF
endif
Elseif @BYTE(ACE#,0)=1
IF @INSTR(+,Hinzu_entfernen$)>0
IF @INSTR(0,Hinzu_entfernen$)=0
LEt F_PROC_Zähler2&=0
While F_PROC_Zähler2&<36
sleep 10
IF AHRechte$[F_PROC_Zähler2&,0]<>
IF @AND(@or(ACCESS_MASK&,@val(AHRechte$[F_PROC_Zähler2&,2]))=ACCESS_MASK&,@INSTR( +AHRechte$[F_PROC_Zähler2&,0],@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-@val(AHRechte$[F_PROC_Zähler2&,2])
endif
endif
LET F_PROC_Zähler2&=F_PROC_Zähler2&+1
wend
LONG ACE#,4=ACCESS_MASK&
IF ACCESS_MASK&<>0
LET FILE_FEHLER&=@AHAddAce(NEW_ACL1#,$2,ACE_ZÄHLER&,ACE#,ACE_SIZE&)
LET FILE_FEHLER&=@AHIsValidAcl(NEW_ACL1#)
LET ACE_ZÄHLER&=ACE_ZÄHLER&+1
endif
endif
ElseIF @INSTR(-,Hinzu_entfernen$)>0
IF @INSTR(0,Hinzu_entfernen$)=0
LEt F_PROC_Zähler2&=0
While F_PROC_Zähler2&<36
sleep 10
IF AHRechte$[F_PROC_Zähler2&,0]<>
IF @INSTR( +AHRechte$[F_PROC_Zähler2&,0],@UPPER$(FSFLAGS$))>0
LET ACCESS_MASK&=ACCESS_MASK& | @val(AHRechte$[F_PROC_Zähler2&,2])
endif
endif
LET F_PROC_Zähler2&=F_PROC_Zähler2&+1
wend
LONG ACE#,4=ACCESS_MASK&
IF ACCESS_MASK&<>0
LET FILE_FEHLER&=@AHAddAce(NEW_ACL1#,$2,ACE_ZÄHLER&,ACE#,ACE_SIZE&)
LET FILE_FEHLER&=@AHIsValidAcl(NEW_ACL1#)
LET ACE_ZÄHLER&=ACE_ZÄHLER&+1
endif
endif
endif
endif
else
IF @INSTR(0,Hinzu_entfernen$)=0
IF ACCESS_MASK&<>0
LET FILE_FEHLER&=@AHAddAce(NEW_ACL1#,$2,ACE_ZÄHLER&,ACE#,ACE_SIZE&)
LET FILE_FEHLER&=@AHIsValidAcl(NEW_ACL1#)
LET ACE_ZÄHLER&=ACE_ZÄHLER&+1
endif
endif
endif
LET F_PROC_Zähler&=F_PROC_Zähler&+1
Dispose SID2#
Dispose ACE#
wend
Endif
DIM ACE#,SIZE_ACCOUNT&+8
IF @INSTR(+,Hinzu_entfernen$)>0
Byte ACE#,0=0
LET CFS$=Bei ALLOWED_ACE...
ELSEIF @INSTR(-,Hinzu_entfernen$)>0
Byte ACE#,0=1
LET CFS$=Bei DENIED_ACE...
endif
LEt F_PROC_Zähler2&=0
While F_PROC_Zähler2&<36
sleep 10
IF AHRechte$[F_PROC_Zähler2&,0]<>
IF @INSTR( +AHRechte$[F_PROC_Zähler2&,0],@UPPER$(FSFlags$))>0
LET FSFlags&=@OR(FSFLAGS&,@val(AHRechte$[F_PROC_Zähler2&,2]))
endif
endif
LET F_PROC_Zähler2&=F_PROC_Zähler2&+1
wend
Byte ACE#,1=0
WORD ACE#,2=SIZE_ACCOUNT&+8
LONG ACE#,4=FSFlags&
LET F_PROC_Zähler&=0
WHILE F_PROC_Zähler&<>SIZE_ACCOUNT&
sleep 10
BYTE ACE#,8+F_PROC_Zähler&=@BYTE(SIDa#,F_PROC_Zähler&)
LET F_PROC_Zähler&=F_PROC_Zähler&+1
WEND
IF @INSTR(-,Hinzu_entfernen$)>0
LET ACE_ZÄHLER&=0
endif
IF FSFlags&<>0
LET FILE_FEHLER&=@AHAddAce(NEW_ACL1#,$2,ACE_ZÄHLER&,ACE#,SIZE_ACCOUNT&+8)
Endif
LET FILE_FEHLER&=@AHInitializeSecurityDescriptor(PSECURITY_DESCRIPTOR#,$1)
LET FILE_FEHLER&=@AHSetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR#,1,NEW_ACL1#,0)
LET FILE_FEHLER&=@AHSetKernelObjectSecurity(F_PROC_Process&,$4,PSECURITY_DESCRIPTOR#)
@AHCloseHandle(F_PROC_Process&)
DISPOSE ACE#
Dispose F_PROC_ACCOUNT_NAME#
Dispose F_PROC_SIZE_ACCOUNT#
Dispose F_PROC_Domain#
Dispose SIZE_F_PROC_Domain#
Dispose F_PROC_SID_NAME_USE#
Dispose P_ACE#
Dispose ACL_INFO#
endif
Dispose PSECURITY_DESCRIPTOR#
Dispose Needed#
Dispose NEW_ACL1#
Disponer ACL_PRESENT#
Disponer P_ACL#
Disponer ACL_D#
Disponer SIDa#
Disponer STRSID#
Disponer P_STRSID#
endif
ENDPROC
Viel Spaß así...
Saludo
Andreas |
| | | | |
| | Jac de Lad | Man muss ya bastante schön verrückt ser, en así algo a escribir. Und muy viel Tiempo haben.
Jac |
| | | Profan² 2.6 bis XProfan 11.1+XPSE+XPIA+XPRR (und irgendwann XIDE) Core2Duo E8500/T2250, 8192/1024 MB, Radeon HD4850/Radeon XPress 1250, Vista64/XP | 15.12.2005 ▲ |
| |
| | Michael Wodrich | Und el Ganze entonces auch aún en v7.5
Tiempo sehen, si Yo como ascenso. AH es sí actualmente wirklich el einzige, el así tief en el Eingeweiden des Systems zugange es...
Schöne Grüße Michael Wodrich |
| | | Programmieren, das spannendste Detektivspiel der Welt. | 15.12.2005 ▲ |
| |
| | | Man muß no verrückt ser, uno muß sólo Interesse a neuen Möglichkeiten haben. Bajo XP/2000/NT basiert alles en solchen Geschichten, y si uno como algo no sabe, no weiß oder beachtet, kann lo bajo Umständen posible ser, daß en una eingeschränkten Sistema (Firmen-PC) nichts mehr funktioniert. Das heißt en el Klartext: Ohne Wissen encima el Sycherheitssystem de NT puede ser meiner Meinung después de eigentlich no vernünftigen Anwendungen escribir - z.B. como Admin todavía no una vez seine Uhr después de el Tiempo de el Internet stellen . Diese INC es sólo una kleiner Ausschnitt el andern INC (DACL_SET.INC), el todavía wesentlich mehr kann. Hauptanteil el INC es el Erstellen uno LOG-Expediente para detectar y Beheben de Fehlern (bin, glaube Yo, uno el ersten en Deutschland, el algo como gebaut ha - como es el más que nötig).
Manko a Tiempo: Lo se no Vererbung y lo voluntad sólo Standard ACEs unterstützt. In el Regel reicht el aber de.
Was puede ser así Anfangen: z.B. Prozesse en un eigenen Taskmanager final, que con normalen mitteln bajo Windows2000 no killen dejar (Viren evtl.). Ohne esta INC kann el Taskmanager de XP wesentlich más que cada selbstgeschriebene, porque él kann solche Prozesse por ändern el Zugriffsrechte, como estos INC tut, final. Also: Kleines Geschenk u.a. para Melanie para el Bau ihres Taskmanagers...
Microsoft scheint en el Augenblick todavía algo Problemas con Timingangelegenheiten beim Setzen de ACEs a haben, uno debería se deshalb genau überlegen, wo y wann al einsetzt y fertige Programas auch möglichst en vielen unterschiedlichen Rechnern testen... |
| | | | |
| | | @AH: Aus diesem Grund nimmt uno wohl mejor una tolles Linux. Windows Aunque sicherlich gesammtheitlich fähiger - pero si Tiempo Geld kostet desafortunadamente auch unwirtschaftlicher.
Sinn meiner Rede: ((Windows+Sicherheit)/Aufwand<1) |
| | | | |
| | | Hab de Linux por desgracia, no el leiseste Idea. Außerdem se ejecuta en el meisten Rechnern (Firmenrechner eingeschlossen) una Windowssystem. Nur porque lo aufwendig aussieht (liegt tal vez sólo a me) y kompliziert wirkt (es pero no, liegt a Microsofts Erklärungen => el Yo verstanden habe y anwende, podría Yo mejor erklären ), debería uno se su no abschrecken dejar. El Möglichkeiten para el Zukunft son como riesengroß y >>>1- por qué siempre sólo solche Sachen escribir, el cada kann y cada schreibt?
Ganz bastante kleiner Auszug de el Möglichkeiten: - Taskmanager escribir, el geschützte Prozesse abschalten puede - Taskmanager escribir, el el User uno Prozesses auslesen puede - Virenschutz escribir - Virenscanner escribir, el sämmtliche Profile aller User de una einzigen Perfil de untersuchen y bereinigen puede - Kindersicherung escribir, el obwohl ellos en un Adminprofile läuftz, Einschränkungen y gleichzeitig el Spielen ermöglicht - Rechner después de Internetzeit stellen - Rechner por API después de Zeitintervall herunterfahren oder neustarten - Setupprogramme escribir, el lo ermöglichen propio Juegos y Anwendungen auch en un Userprofile con eingeschränkten Rechten a starten - Zeitkontrollprogramme escribir, que vom User no abschalten dejar - .......................................
Wer nichts neues nutzt oder wem el Aufwand a groß es, el kann auch en y para Windows98 Systeme escribir (como se ejecuta, aufgrund el fehlenden Security, sowieso alles wesentlich más rápido). Egal qué él kann, algo wirklich neues oder besonderes se él aber nie a stande bekommen. Was nutzt lo me, una Zeitplaner oder Taskmanager a escribir, el en dieser Art 1000 Tiempo Internet descargable es? Sollte uno como no más bien seine Tiempo así verschwenden Sachen para desarrollar, el lo weltweit sólo 1-2x más o menos todavía nada son???
Como ya he dicho - bajo neuen Windows Systemen richtet se eigentlich fast alles después de el Security (y alles después de el selben Muster). Selbst como Admin es uno eingeschränkt y kann algunos wichtige APIs (una Ejemplo = Uhr stellen ) no sin weiteres nutzen. No una vez el Dateisystem es voll y bastante para Admins zugänglich (con NTFS). |
| | | | |
| | | Kleiner Bugfix: Durch una a grßzügige Kopiererei beim Cuerdas-SID podría lo evtl. a zeitweisen Zugriffsverletzungen kommen. Fehler wurde beseitigt: KompilierenMarcaSeparaciónDEF @AHGetWindowThreadProcessId(2) !USER32,GetWindowThreadProcessId
DEF @AHGetCurrentProcess(0) !KERNEL32,GetCurrentProcess
DEF @AHOpenProcess(3) !KERNEL32,OpenProcess
DEF @AHCloseHandle(1) !KERNEL32,CloseHandle
DEF @AHGetKernelObjectSecurity(5) !ADVAPI32,GetKernelObjectSecurity
DEF @AHSetKernelObjectSecurity(3) !ADVAPI32,SetKernelObjectSecurity
DEF @AHLookupAccountName(7) !advapi32,LookupAccountNameA
DEF @AHCopyMemory(3) !kernel32,RtlMoveMemory
DEF @AHInitializeSecurityDescriptor(2) !ADVAPI32,InitializeSecurityDescriptor
DEF @AHSetSecurityDescriptorDacl(4) !ADVAPI32,SetSecurityDescriptorDacl
DEF @AHAddAce(5) !ADVAPI32,AddAce
DEF @AHGetSecurityDescriptorOwner(3) !ADVAPI32,GetSecurityDescriptorOwner
DEF @AHGetSecurityDescriptorGroup(3) !ADVAPI32,GetSecurityDescriptorGroup
DEF @AHGetSecurityDescriptorDACL(4) !ADVAPI32,GetSecurityDescriptorDacl
DEF @AHLookupAccountSid(7) !ADVAPI32,LookupAccountSidA
DEF @AHIsValidAcl(1) !ADVAPI32,IsValidAcl
DEF @AHGetAclInformation(4) !ADVAPI32,GetAclInformation
DEF @AHGetAce(3) !ADVAPI32,GetAce
DEF @AHLocalFree(1) !KERNEL32,LocalFree
DEF @AHInitializeAcl(3) !ADVAPI32,InitializeAcl
DEF @AHLocalSize(1) !KERNEL32,LocalSize
Declare FILE_FEHLER&,CBNAME$
Declare SEC_ID#,CBNAME_SIZE#,CBNAME#
Declare SID#,F_PROC_SID_NAME_USE#
Declare Needed#,NEW_ACL1#,SIDA#
Declare STRSID#,ACL_INFO#,ACE#,P_ACE#,P_STRSID#
Declare SID2#,P_ACL#,ACL_D#
Declare PSECURITY_DESCRIPTOR#,ACL_PRESENT#
Declare F_PROC_ACCOUNT_NAME#,F_PROC_SIZE_ACCOUNT#,F_PROC_Domain#,SIZE_F_PROC_Domain#
Declare AHRechte$[36,2],F_PROC_Zähler2&
Proc Set_Process_ACE_IN_DACL
Parameters F_PROC_Process$,F_PROC_USER$,Hinzu_entfernen$,FSFLAGS$
Declare F_SYS$,Needed&
Declare F_LAUFWERK$
Declare FSFlags&
Declare ANZAHL_BYTES&
Declare F_PROC_Zähler&,ACE_SIZE&
Declare IO%,SecFlag&,ACCESS_MASK&
Declare Vorhanden&,SecFlag&,NEEDED&
Declare ACE_ZÄHLER&,SIZE_ACCOUNT&
Declare CFS$,PROCESS_ID&,THREAD_ID&,F_PROC_Process&,Ersatz$
1.Parameter=
Das Handle eines Prozesses als String,
der Titel eines Fensters
oder ein Leerstring für den aktuellen Prozess
2.Parameter= Username
3.Parameter= +;-;0 (-=Rechte verbieten, +=Rechte erlauben, 0=alles vorhandene löschen)
4.Parameter= Flags als String
Mögliche Flags
PROCESS_TERMINATE (Erlaubt Process zu beenden $1)
PROCESS_CREATE_THREAD (Erlaubt einen Remote-Thread durch einen anderen Prozess zu erzeugen $2)
PROCESS_SET_SESSIONID ($4)
PROCESS_VM_OPERATION (Erlaubt fremdem Prozess Zugriff auf Prozessspeicher zu verändern $8)
PROCESS_VM_READ (Erlaubt anderem Prozess Prozessspeicher zu lesen $10)
PROCESS_VM_WRITE (Erlaubt anderem Prozess Prozessspeicher zu schreiben $20)
PROCESS_DUP_HANDLE (Erlaubt Prozess-Handle zu kopieren $40)
PROCESS_CREATE_PROCESS (Intern genutzt $80)
PROCESS_SET_QUOTA ($100)
PROCESS_SET_INFORMATION (Erlaubt Priorität zu ändern $200)
PROCESS_QUERY_INFORMATION (Erlaubt Prozessdaten (Exitcode/Priorität) auszulesen $400)
PROCESS_SUSPEND_RESUME ($800)
SYNCHRONIZE (Erlaubt einem Handle auf ein Complitition I/O zu warten)
WRITE_DAC (Ändern der DACL Einträge)
READ_CONTROL (Lesen der DACL Einträge und Besitzer)
WRITE_OWNER (Eigentümer ändern)
_DELETE (löschen)
GENERIC_READ (Leserecht)
GENERIC_WRITE (Schreibrecht)
GENERIC_EXECUTE (Recht zum Ausführen und Durchsuchen).
GENERIC_ALL (Alle Rechte)
CLEAR AHRechte$[]
LET AHRechte$[1,2]=$1
LET AHRechte$[2,2]=$2
LET AHRechte$[3,2]=$4
LET AHRechte$[4,2]=$8
LET AHRechte$[5,2]=$10
LET AHRechte$[6,2]=$20
LET AHRechte$[7,2]=$40
LET AHRechte$[8,2]=$80
LET AHRechte$[9,2]=$100
LET AHRechte$[10,2]=$200
LET AHRechte$[11,2]=$400
LET AHRechte$[12,2]=$800
LET AHRechte$[13,2]=$1000
LET AHRechte$[14,2]=$2000
LET AHRechte$[15,2]=$4000
LET AHRechte$[16,2]=$8000
LET AHRechte$[17,0]=_DELETE
LET AHRechte$[17,1]=löschen
LET AHRechte$[17,2]=$10000
LET AHRechte$[18,0]=READ_CONTROL
LET AHRechte$[18,1]=(Lesen der DACL Einträge und Besitzer)
LET AHRechte$[18,2]=$20000
LET AHRechte$[19,0]=WRITE_DAC
LET AHRechte$[19,1]=(Ändern der DACL Einträge)
LET AHRechte$[19,2]=$40000
LET AHRechte$[20,0]=WRITE_OWNER
LET AHRechte$[20,1]=(Eigentümer ändern)
LET AHRechte$[20,2]=$80000
LET AHRechte$[21,0]=SYNCHRONIZE
LET AHRechte$[21,1]=(Erlaubt einem Handle auf ein Complitition I/O zu warten)
LET AHRechte$[21,2]=$100000
LET AHRechte$[22,2]=$200000
LET AHRechte$[23,2]=$400000
LET AHRechte$[24,2]=$800000
LET AHRechte$[24,0]=ACCESS_SYSTEM_SECURITY
LET AHRechte$[24,1]=(Zugriff auf den SACL)
LET AHRechte$[25,2]=$1000000
LET AHRechte$[26,2]=$2000000
LET AHRechte$[27,2]=$4000000
LET AHRechte$[28,0]=GENERIC_ALL
LET AHRechte$[28,1]=(Vollzugriff)
LET AHRechte$[28,2]=$10000000
LET AHRechte$[29,0]=GENERIC_EXECUTE
LET AHRechte$[29,1]=(Rechte zum Ausführen und Durchsuchen)
LET AHRechte$[29,2]=$20000000
LET AHRechte$[30,0]=GENERIC_WRITE
LET AHRechte$[30,1]=(Schreibrechte)
LET AHRechte$[30,2]=$40000000
LET AHRechte$[31,0]=GENERIC_READ
LET AHRechte$[31,1]=(Leserechte)
LET AHRechte$[31,2]=$80000000
LET AHRechte$[0,0]=PROCESS_ALL_ACCESS
LET AHRechte$[0,1]=(Vollzugriff)
LET AHRechte$[0,2]=$1F0FFF
LET AHRechte$[1,0]=PROCESS_TERMINATE
LET AHRechte$[1,1]=(Erlaubt Process zu beenden)
LET AHRechte$[2,0]=PROCESS_CREATE_THREAD
LET AHRechte$[2,1]=(Erlaubt einen Remote-Thread zu erzeugen)
LET AHRechte$[3,0]=PROCESS_SET_SESSIONID
LET AHRechte$[3,1]=($4)
LET AHRechte$[4,0]=PROCESS_VM_OPERATION
LET AHRechte$[4,1]=(Erlaubt Zugriff auf Prozessspeicher zu verändern)
LET AHRechte$[5,0]=PROCESS_VM_READ
LET AHRechte$[5,1]=(Erlaubt anderem Prozess Prozessspeicher zu lesen)
LET AHRechte$[6,0]=PROCESS_VM_WRITE
LET AHRechte$[6,1]=(Erlaubt anderem Prozess Prozessspeicher zu schreiben)
LET AHRechte$[7,0]=PROCESS_DUP_HANDLE
LET AHRechte$[7,1]=(Erlaubt Prozess-Handle zu kopieren)
LET AHRechte$[8,0]=PROCESS_CREATE_PROCESS
LET AHRechte$[8,1]=($80)
LET AHRechte$[9,0]=PROCESS_SET_QUOTA
LET AHRechte$[9,1]=($100)
LET AHRechte$[10,0]=PROCESS_SET_INFORMATION
LET AHRechte$[10,1]=(Erlaubt u.a. Priorität zu ändern)
LET AHRechte$[11,0]=PROCESS_QUERY_INFORMATION
LET AHRechte$[11,1]=(Erlaubt Prozessdaten (Exitcode/Priorität) auszulesen
LET AHRechte$[12,0]=PROCESS_SUSPEND_RESUME
LET AHRechte$[12,1]=($800)
LET AHRechte$[13,0]=
LET AHRechte$[13,1]=
LET AHRechte$[14,0]=
LET AHRechte$[14,1]=
LET AHRechte$[15,0]=
LET AHRechte$[15,1]=
LET AHRechte$[16,0]=
LET AHRechte$[16,1]=
LET AHRechte$[23,0]=
LET AHRechte$[23,1]=
LET AHRechte$[24,0]=
LET AHRechte$[24,1]=
LET AHRechte$[25,0]=
LET AHRechte$[25,1]=
LET AHRechte$[27,0]=
LET AHRechte$[27,1]=
LET AHRechte$[27,0]=
LET AHRechte$[27,1]=
LET AHRechte$[32,0]=PROCESS_READ
LET AHRechte$[32,1]=(Leserecht)
LET AHRechte$[32,2]=$20410
LET AHRechte$[33,0]=PROCESS_EXECUTE
LET AHRechte$[33,1]=(Recht zum Ausführen und Durchsuchen)
LET AHRechte$[33,2]=$120000
LET AHRechte$[34,0]=PROCESS_WRITE
LET AHRechte$[34,1]=(Schreibrecht)
LET AHRechte$[34,2]=$020BEB
IF @AND(F_PROC_USER$<>,@OR(@INSTR(+,Hinzu_entfernen$)>0,@INSTR(-,Hinzu_entfernen$)>0))
Clear Needed&
Clear F_SYS$,FSFlags&
Clear ANZAHL_BYTES&
Clear F_PROC_Zähler&,ACE_SIZE&
Clear SecFlag&,ACCESS_MASK&
Clear Vorhanden&,SecFlag&,NEEDED&
Clear ACE_ZÄHLER&,SIZE_ACCOUNT&
LET FSFlags&=0
DIM STRSID#,500
DIM P_STRSID#,4
DIM Needed#,4
LET FSFLAGS$= +@UPPER$(FSFLAGS$)
LET FSFLAGS$=@Translate$(FSFLAGS$,GENERIC_ALL,PROCESS_ALL_ACCESS)
LET FSFLAGS$=@Translate$(FSFLAGS$,GENERIC_READ,PROCESS_READ)
LET FSFLAGS$=@Translate$(FSFLAGS$,GENERIC_WRITE,PROCESS_WRITE)
LET FSFLAGS$=@Translate$(FSFLAGS$,GENERIC_EXECUTE,PROCESS_EXECUTE)
LET Ersatz$=PROCESS_SET_SESSIONID PROCESS_VM_OPERATION PROCESS_CREATE_THREAD PROCESS_VM_WRITE PROCESS_VM_READ PROCESS_DUP_HANDLE
LET ERSATZ$=ERSATZ$+PROCESS_SET_QUOTA PROCESS_SET_INFORMATION PROCESS_QUERY_INFORMATION PROCESS_SUSPEND_RESUME WRITE_DAC
LET ERSATZ$=ERSATZ$+PROCESS_CREATE_PROCESS READ_CONTROL WRITE_OWNER SYNCHRONIZE READ_CONTROL PROCESS_TERMINATE
LET FSFLAGS$=@Translate$(FSFLAGS$,PROCESS_ALL_ACCESS,Ersatz$)
LET FSFLAGS$=@Translate$(FSFLAGS$,PROCESS_EXECUTE,SYNCHRONIZE READ_CONTROL)
LET Ersatz$=PROCESS_SET_INFORMATION PROCESS_SET_QUOTA PROCESS_SUSPEND_RESUME PROCESS_CREATE_PROCESS PROCESS_DUP_HANDLE
LET ERSATZ$=ERSATZ$+PROCESS_VM_WRITE PROCESS_VM_OPERATION READ_CONTROL PROCESS_TERMINATE PROCESS_CREATE_THREAD
LET FSFLAGS$=@Translate$(FSFLAGS$,PROCESS_WRITE,Ersatz$)
LET FSFLAGS$=@Translate$(FSFLAGS$,PROCESS_READ,PROCESS_QUERY_INFORMATION READ_CONTROL PROCESS_TERMINATE )
IF @UPPER$(F_PROC_Process$)<>
IF @VAL(F_PROC_Process$)<>0
LET F_PROC_Process&=@VAL(F_PROC_Process$)
Else
THREAD_ID&=@AHGetWindowThreadProcessId(@FINDWINDOW(F_PROC_Process$),@ADDR(PROCESS_ID&))
LET F_PROC_Process&=@AHOpenProcess($40000 | $20000,0,PROCESS_ID&)
endif
else
LET F_PROC_Process&=@AHGetCurrentProcess()
endif
DIM SIDa#,1
DIM PSECURITY_DESCRIPTOR#,1
LET SECFLAG&=$1 | $2 | $4
Long Needed#,0=1
LET FILE_FEHLER&=@AHGetKernelObjectSecurity(F_PROC_Process&,SecFlag&,PSECURITY_DESCRIPTOR#,1,Needed#)
LET NEEDED&=@LONG(Needed#,0)
Dispose PSECURITY_DESCRIPTOR#
CLEAR NEEDED#
CASE NEEDED&=0 : LET NEEDED&=1024
DIM PSECURITY_DESCRIPTOR#,Needed&
Clear PSECURITY_DESCRIPTOR#
LET FILE_FEHLER&=@AHGetKernelObjectSecurity(F_PROC_Process&,SecFlag&,PSECURITY_DESCRIPTOR#,Needed&,Needed#)
DIM ACL_PRESENT#,4
DIM P_ACL#,4
DIM ACL_D#,4
Clear ACL_PRESENT#,P_ACL#,ACL_D#
Let FILE_FEHLER&=@AHGetSecurityDescriptorDACL(PSECURITY_DESCRIPTOR#,ACL_PRESENT#,P_ACL#,ACL_D#)
LET ANZAHL_BYTES&=8 Für ACL HEADER 8 Bytes veranschlagt
IF @AND(FILE_FEHLER&=1,@LONG(ACL_PRESENT#,0)=1)
DIM ACL_INFO#,12
DIM P_ACE#,4
CLEAR ACL_INFO#,P_ACE#
Let FILE_FEHLER&=@AHGetAclInformation(@long(P_ACL#,0),ACL_INFO#,12,2)
LET F_PROC_Zähler&=0
DIM F_PROC_ACCOUNT_NAME#,256
DIM F_PROC_SIZE_ACCOUNT#,4
DIM F_PROC_Domain#,256
DIM SIZE_F_PROC_Domain#,4
DIM F_PROC_SID_NAME_USE#,4
IF @LONG(ACL_INFO#,0)<>0
While F_PROC_Zähler&<@LONG(ACL_INFO#,0)
Sleep 10
Clear P_ACE#
Let FILE_FEHLER&=@AHGetAce(@long(P_ACL#,0),F_PROC_Zähler&,P_ACE#)
DIM ACE#,4
Clear ACE#
@AHCopyMemory(ACE#,@LONG(P_ACE#,0),4)
LET ACE_SIZE&=@Word(ACE#,2) Die Größen aller ACEs werden addiert.
LET ANZAHL_BYTES&=ANZAHL_BYTES&+ACE_SIZE&
Dispose ACE#
DIM ACE#,ACE_SIZE&
Clear F_PROC_SID_NAME_USE#
Clear F_PROC_ACCOUNT_NAME#
Clear F_PROC_Domain#
Clear ACE#
Long F_PROC_SIZE_ACCOUNT#,0=256
LONG SIZE_F_PROC_Domain#,0=256
@AHCopyMemory(ACE#,@LONG(P_ACE#,0),ACE_SIZE&)
DIM SID2#,ACE_SIZE&-8
clear SID2#
@AHCopyMemory(SID2#,@LONG(P_ACE#,0)+8,ACE_SIZE&-8)
LET FILE_FEHLER&=@AHLookupAccountSid(@ADDR(F_SYS$),SID2#,F_PROC_ACCOUNT_NAME#,F_PROC_SIZE_ACCOUNT#,F_PROC_Domain#,SIZE_F_PROC_Domain#,F_PROC_SID_NAME_USE#)
Clear STRSID#
IF @VAL(@LEFT$($WINVER,3))>=5.0
@AHCopyMemory(STRSID#,@LONG(P_STRSID#,0),@AHLocalSize(@LONG(P_STRSID#,0)))
LET FILE_FEHLER&=@AHLocalFree(@LONG(P_STRSID#,0))
endif
IF @UPPER$(@String$(F_PROC_ACCOUNT_NAME#,0))=@UPPER$(F_PROC_USER$)
IF @AND(@BYTE(ACE#,0)=0,@INSTR(+,Hinzu_entfernen$)>0)
LET VORHANDEN&=VORHANDEN& | 1
endif
IF @AND(@BYTE(ACE#,0)=1,@INSTR(-,Hinzu_entfernen$)>0)
LET VORHANDEN&=VORHANDEN& | 1
endif
endif
LET ACCESS_MASK&=@LONG(ACE#,4)
LET F_PROC_Zähler2&=0
While F_PROC_Zähler2&<36
sleep 10
IF @and(@or(ACCESS_MASK&,@VAl(AHRechte$[F_PROC_Zähler2&,2]))=ACCESS_MASK&,@VAl(AHRechte$[F_PROC_Zähler2&,2])<>0)
LET ACCESS_MASK&=ACCESS_MASK&-@VAl(AHRechte$[F_PROC_Zähler2&,2])
endif
Let F_PROC_Zähler2&=F_PROC_Zähler2&+1
wend
LET F_PROC_Zähler&=F_PROC_Zähler&+1
Dispose SID2#
Dispose ACE#
wend
Endif
Clear F_PROC_SID_NAME_USE#,F_PROC_ACCOUNT_NAME#,F_PROC_Domain#,SIDa#,F_SYS$
Long F_PROC_SIZE_ACCOUNT#,0=1
LONG SIZE_F_PROC_Domain#,0=256
LET FILE_FEHLER&=@AHLookupAccountName(@ADDR(F_SYS$),@addr(F_PROC_USER$),SIDa#,F_PROC_SIZE_ACCOUNT#,F_PROC_Domain#,SIZE_F_PROC_Domain#,F_PROC_SID_NAME_USE#)
LET SIZE_ACCOUNT&=@LONG(F_PROC_SIZE_ACCOUNT#,0)
Clear F_PROC_SID_NAME_USE#
Clear F_PROC_ACCOUNT_NAME#
Clear F_PROC_Domain#
Long F_PROC_SIZE_ACCOUNT#,0=SIZE_ACCOUNT&
LONG SIZE_F_PROC_Domain#,0=256
Dispose SIDa#
DIM SIDa#,SIZE_ACCOUNT&
Clear SIDa#
LET FILE_FEHLER&=@AHLookupAccountName(@ADDR(F_SYS$),@addr(F_PROC_USER$),SIDa#,F_PROC_SIZE_ACCOUNT#,F_PROC_Domain#,SIZE_F_PROC_Domain#,F_PROC_SID_NAME_USE#)
IF VORHANDEN&=0
LET Anzahl_Bytes&=Anzahl_Bytes&+@LONG(F_PROC_SIZE_ACCOUNT#,0)+8 Alle ACEs+SID+ACCESS_MASK+ACE_HEADER
endif
IF @INSTR(0,Hinzu_entfernen$)>0
LET Anzahl_Bytes&=@LONG(F_PROC_SIZE_ACCOUNT#,0)+8+8 SID+ACCESS_MASK+ACE_HEADER+ACL_HEADER
endif
Dispose F_PROC_ACCOUNT_NAME#
Dispose F_PROC_SIZE_ACCOUNT#
Dispose F_PROC_Domain#
Dispose SIZE_F_PROC_Domain#
Dispose F_PROC_SID_NAME_USE#
Dispose P_ACE#
Dispose ACL_INFO#
Endif
DIM NEW_ACL1#,Anzahl_Bytes&
LET FILE_FEHLER&=@AHInitializeAcl(NEW_ACL1#,Anzahl_Bytes&,$2)
Clear ACL_PRESENT#,P_ACL#,ACL_D#
Let FILE_FEHLER&=@AHGetSecurityDescriptorDACL(PSECURITY_DESCRIPTOR#,ACL_PRESENT#,P_ACL#,ACL_D#)
LET FILE_FEHLER&=@AHIsValidAcl(@long(P_ACL#,0))
IF @INSTR(-,Hinzu_entfernen$)>0
LET ACE_ZÄHLER&=1
else
LET ACE_ZÄHLER&=0
endif
IF @AND(FILE_FEHLER&=1,@LONG(ACL_PRESENT#,0)=1)
DIM ACL_INFO#,12
DIM P_ACE#,4
CLEAR ACL_INFO#,P_ACE#
Let FILE_FEHLER&=@AHGetAclInformation(@long(P_ACL#,0),ACL_INFO#,12,2)
LET F_PROC_Zähler&=0
DIM F_PROC_ACCOUNT_NAME#,256
DIM F_PROC_SIZE_ACCOUNT#,4
DIM F_PROC_Domain#,256
DIM SIZE_F_PROC_Domain#,4
DIM F_PROC_SID_NAME_USE#,4
IF @LONG(ACL_INFO#,0)<>0
While F_PROC_Zähler&<@LONG(ACL_INFO#,0)
sleep 10
sleep 10
Clear P_ACE#
Let FILE_FEHLER&=@AHGetAce(@long(P_ACL#,0),F_PROC_Zähler&,P_ACE#)
DIM ACE#,4
Clear ACE#
@AHCopyMemory(ACE#,@LONG(P_ACE#,0),4)
LET ACE_SIZE&=@Word(ACE#,2)
LET ANZAHL_BYTES&=ANZAHL_BYTES&+ACE_SIZE&
Dispose ACE#
DIM ACE#,ACE_SIZE&
Clear F_PROC_SID_NAME_USE#
Clear F_PROC_ACCOUNT_NAME#
Clear F_PROC_Domain#
Clear ACE#
Long F_PROC_SIZE_ACCOUNT#,0=256
LONG SIZE_F_PROC_Domain#,0=256
@AHCopyMemory(ACE#,@LONG(P_ACE#,0),ACE_SIZE&)
REM
DIM SID2#,ACE_SIZE&
CLEAR SID2#
@AHCopyMemory(SID2#,@LONG(P_ACE#,0)+8,ACE_SIZE&-8)
LET FILE_FEHLER&=@AHLookupAccountSid(@ADDR(F_SYS$),SID2#,F_PROC_ACCOUNT_NAME#,F_PROC_SIZE_ACCOUNT#,F_PROC_Domain#,SIZE_F_PROC_Domain#,F_PROC_SID_NAME_USE#)
Clear STRSID#
LET ACCESS_MASK&=@LONG(ACE#,4)
IF @UPPER$(@String$(F_PROC_ACCOUNT_NAME#,0))=@UPPER$(F_PROC_USER$)
IF @BYTE(ACE#,0)=0
IF @INSTR(+,Hinzu_entfernen$)>0
CASE @INSTR(0,Hinzu_entfernen$)=0 : LET FSFlags&=ACCESS_MASK&
ElseIF @INSTR(-,Hinzu_entfernen$)>0
if @INSTR(0,Hinzu_entfernen$)=0
LET F_PROC_Zähler2&=0
While F_PROC_Zähler2&<36
sleep 10
IF AHRechte$[F_PROC_Zähler2&,0]<>
IF @AND(@or(ACCESS_MASK&,@val(AHRechte$[F_PROC_Zähler2&,2]))=ACCESS_MASK&,@INSTR( +AHRechte$[F_PROC_Zähler2&,0],@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-@val(AHRechte$[F_PROC_Zähler2&,2])
endif
endif
LET F_PROC_Zähler2&=F_PROC_Zähler2&+1
wend
LONG ACE#,4=ACCESS_MASK&
IF ACCESS_MASK&<>0
LET FILE_FEHLER&=@AHAddAce(NEW_ACL1#,$2,ACE_ZÄHLER&,ACE#,ACE_SIZE&)
LET FILE_FEHLER&=@AHIsValidAcl(NEW_ACL1#)
LET ACE_ZÄHLER&=ACE_ZÄHLER&+1
endif
ENDIF
endif
Elseif @BYTE(ACE#,0)=1
IF @INSTR(+,Hinzu_entfernen$)>0
IF @INSTR(0,Hinzu_entfernen$)=0
LEt F_PROC_Zähler2&=0
While F_PROC_Zähler2&<36
sleep 10
IF AHRechte$[F_PROC_Zähler2&,0]<>
IF @AND(@or(ACCESS_MASK&,@val(AHRechte$[F_PROC_Zähler2&,2]))=ACCESS_MASK&,@INSTR( +AHRechte$[F_PROC_Zähler2&,0],@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-@val(AHRechte$[F_PROC_Zähler2&,2])
endif
endif
LET F_PROC_Zähler2&=F_PROC_Zähler2&+1
wend
LONG ACE#,4=ACCESS_MASK&
IF ACCESS_MASK&<>0
LET FILE_FEHLER&=@AHAddAce(NEW_ACL1#,$2,ACE_ZÄHLER&,ACE#,ACE_SIZE&)
LET FILE_FEHLER&=@AHIsValidAcl(NEW_ACL1#)
LET ACE_ZÄHLER&=ACE_ZÄHLER&+1
endif
endif
ElseIF @INSTR(-,Hinzu_entfernen$)>0
IF @INSTR(0,Hinzu_entfernen$)=0
LEt F_PROC_Zähler2&=0
While F_PROC_Zähler2&<36
sleep 10
IF AHRechte$[F_PROC_Zähler2&,0]<>
IF @INSTR( +AHRechte$[F_PROC_Zähler2&,0],@UPPER$(FSFLAGS$))>0
LET ACCESS_MASK&=ACCESS_MASK& | @val(AHRechte$[F_PROC_Zähler2&,2])
endif
endif
LET F_PROC_Zähler2&=F_PROC_Zähler2&+1
wend
LONG ACE#,4=ACCESS_MASK&
IF ACCESS_MASK&<>0
LET FILE_FEHLER&=@AHAddAce(NEW_ACL1#,$2,ACE_ZÄHLER&,ACE#,ACE_SIZE&)
LET FILE_FEHLER&=@AHIsValidAcl(NEW_ACL1#)
LET ACE_ZÄHLER&=ACE_ZÄHLER&+1
endif
endif
endif
endif
else
IF @INSTR(0,Hinzu_entfernen$)=0
IF ACCESS_MASK&<>0
LET FILE_FEHLER&=@AHAddAce(NEW_ACL1#,$2,ACE_ZÄHLER&,ACE#,ACE_SIZE&)
LET FILE_FEHLER&=@AHIsValidAcl(NEW_ACL1#)
LET ACE_ZÄHLER&=ACE_ZÄHLER&+1
endif
endif
endif
LET F_PROC_Zähler&=F_PROC_Zähler&+1
Dispose SID2#
Dispose ACE#
wend
Endif
DIM ACE#,SIZE_ACCOUNT&+8
IF @INSTR(+,Hinzu_entfernen$)>0
Byte ACE#,0=0
LET CFS$=Bei ALLOWED_ACE...
ELSEIF @INSTR(-,Hinzu_entfernen$)>0
Byte ACE#,0=1
LET CFS$=Bei DENIED_ACE...
endif
LEt F_PROC_Zähler2&=0
While F_PROC_Zähler2&<36
sleep 10
IF AHRechte$[F_PROC_Zähler2&,0]<>
IF @INSTR( +AHRechte$[F_PROC_Zähler2&,0],@UPPER$(FSFlags$))>0
LET FSFlags&=@OR(FSFLAGS&,@val(AHRechte$[F_PROC_Zähler2&,2]))
endif
endif
LET F_PROC_Zähler2&=F_PROC_Zähler2&+1
wend
Byte ACE#,1=0
WORD ACE#,2=SIZE_ACCOUNT&+8
LONG ACE#,4=FSFlags&
LET F_PROC_Zähler&=0
WHILE F_PROC_Zähler&<>SIZE_ACCOUNT&
sleep 10
BYTE ACE#,8+F_PROC_Zähler&=@BYTE(SIDa#,F_PROC_Zähler&)
LET F_PROC_Zähler&=F_PROC_Zähler&+1
WEND
IF @INSTR(-,Hinzu_entfernen$)>0
LET ACE_ZÄHLER&=0
endif
IF FSFlags&<>0
LET FILE_FEHLER&=@AHAddAce(NEW_ACL1#,$2,ACE_ZÄHLER&,ACE#,SIZE_ACCOUNT&+8)
Endif
LET FILE_FEHLER&=@AHInitializeSecurityDescriptor(PSECURITY_DESCRIPTOR#,$1)
LET FILE_FEHLER&=@AHSetSecurityDescriptorDacl(PSECURITY_DESCRIPTOR#,1,NEW_ACL1#,0)
LET FILE_FEHLER&=@AHSetKernelObjectSecurity(F_PROC_Process&,$4,PSECURITY_DESCRIPTOR#)
@AHCloseHandle(F_PROC_Process&)
DISPOSE ACE#
Dispose F_PROC_ACCOUNT_NAME#
Dispose F_PROC_SIZE_ACCOUNT#
Dispose F_PROC_Domain#
Dispose SIZE_F_PROC_Domain#
Dispose F_PROC_SID_NAME_USE#
Dispose P_ACE#
Dispose ACL_INFO#
endif
Dispose PSECURITY_DESCRIPTOR#
Dispose Needed#
Dispose NEW_ACL1#
Disponer ACL_PRESENT#
Disponer P_ACL#
Disponer ACL_D#
Disponer SIDa#
Disponer STRSID#
Disponer P_STRSID#
endif
ENDPROC
|
| | | | |
| | | Kleines aber wichtiges update: KompilierenMarcaSeparaciónDEF @AHGetWindowThreadProcessId(2) !USER32,GetWindowThreadProcessId
DEF @AHGetCurrentProcess(0) !KERNEL32,GetCurrentProcess
DEF @AHOpenProcess(3) !KERNEL32,OpenProcess
DEF @AHCloseHandle(1) !KERNEL32,CloseHandle
DEF @AHGetKernelObjectSecurity(5) !ADVAPI32,GetKernelObjectSecurity
DEF @AHSetKernelObjectSecurity(3) !ADVAPI32,SetKernelObjectSecurity
DEF @AHLookupAccountName(7) !advapi32,LookupAccountNameA
DEF @AHCopyMemory(3) !kernel32,RtlMoveMemory
DEF @AHInitializeSecurityDescriptor(2) !ADVAPI32,InitializeSecurityDescriptor
DEF @AHSetSecurityDescriptorDacl(4) !ADVAPI32,SetSecurityDescriptorDacl
DEF @AHAddAce(5) !ADVAPI32,AddAce
DEF @AHGetSecurityDescriptorOwner(3) !ADVAPI32,GetSecurityDescriptorOwner
DEF @AHGetSecurityDescriptorGroup(3) !ADVAPI32,GetSecurityDescriptorGroup
DEF @AHGetSecurityDescriptorDACL(4) !ADVAPI32,GetSecurityDescriptorDacl
DEF @AHLookupAccountSid(7) !ADVAPI32,LookupAccountSidA
DEF @AHIsValidAcl(1) !ADVAPI32,IsValidAcl
DEF @AHGetAclInformation(4) !ADVAPI32,GetAclInformation
DEF @AHGetAce(3) !ADVAPI32,GetAce
DEF @AHLocalFree(1) !KERNEL32,LocalFree
DEF @AHInitializeAcl(3) !ADVAPI32,InitializeAcl
DEF @AHLocalSize(1) !KERNEL32,LocalSize
Def @AHMakeAbsoluteSD(11) !ADVAPI32,MakeAbsoluteSD
Def @AHMakeSelfRelativeSD(3) !ADVAPI32,MakeSelfRelativeSD
Declare FILE_FEHLER&,CBNAME$
Declare SEC_ID#,CBNAME_SIZE#,CBNAME#
Declare SID#,F_PROC_SID_NAME_USE#
Declare Needed#,NEW_ACL1#,SIDA#
Declare STRSID#,ACL_INFO#,ACE#,P_ACE#,P_STRSID#
Declare SID2#,P_ACL#,ACL_D#
Declare PSECURITY_DESCRIPTOR#,ACL_PRESENT#
Declare F_PROC_ACCOUNT_NAME#,F_PROC_SIZE_ACCOUNT#,F_PROC_Domain#,SIZE_F_PROC_Domain#
Declare AHRechte$[36,2],F_PROC_Zähler2&,F_Ab_SD#,F_Ab_Size&
Declare F_Ab_DACL#,F_Ab_DACLSize&,F_Ab_SACL#,F_Ab_SACLSize&
Declare F_Ab_Owner#,F_Ab_OwnerSize&,F_Ab_PG#,F_Ab_PGSize&,SR_SIZE&,F_SELF#
Proc Set_Process_ACE_IN_DACL
Parameters F_PROC_Process$,F_PROC_USER$,Hinzu_entfernen$,FSFLAGS$
Declare F_SYS$,Needed&
Declare F_LAUFWERK$
Declare FSFlags&
Declare ANZAHL_BYTES&
Declare F_PROC_Zähler&,ACE_SIZE&
Declare IO%,SecFlag&,ACCESS_MASK&
Declare Vorhanden&,SecFlag&,NEEDED&
Declare ACE_ZÄHLER&,SIZE_ACCOUNT&
Declare CFS$,PROCESS_ID&,THREAD_ID&,F_PROC_Process&,Ersatz$
1.Parameter=
Das Handle eines Prozesses als String,
der Titel eines Fensters
oder ein Leerstring für den aktuellen Prozess
2.Parameter= Username
3.Parameter= +;-;0 (-=Rechte verbieten, +=Rechte erlauben, 0=alles vorhandene löschen)
4.Parameter= Flags als String
Mögliche Flags
PROCESS_TERMINATE (Erlaubt Process zu beenden $1)
PROCESS_CREATE_THREAD (Erlaubt einen Remote-Thread durch einen anderen Prozess zu erzeugen $2)
PROCESS_SET_SESSIONID ($4)
PROCESS_VM_OPERATION (Erlaubt fremdem Prozess Zugriff auf Prozessspeicher zu verändern $8)
PROCESS_VM_READ (Erlaubt anderem Prozess Prozessspeicher zu lesen $10)
PROCESS_VM_WRITE (Erlaubt anderem Prozess Prozessspeicher zu schreiben $20)
PROCESS_DUP_HANDLE (Erlaubt Prozess-Handle zu kopieren $40)
PROCESS_CREATE_PROCESS (Intern genutzt $80)
PROCESS_SET_QUOTA ($100)
PROCESS_SET_INFORMATION (Erlaubt Priorität zu ändern $200)
PROCESS_QUERY_INFORMATION (Erlaubt Prozessdaten (Exitcode/Priorität) auszulesen $400)
PROCESS_SUSPEND_RESUME ($800)
SYNCHRONIZE (Erlaubt einem Handle auf ein Complitition I/O zu warten)
WRITE_DAC (Ändern der DACL Einträge)
READ_CONTROL (Lesen der DACL Einträge und Besitzer)
WRITE_OWNER (Eigentümer ändern)
_DELETE (löschen)
GENERIC_READ (Leserecht)
GENERIC_WRITE (Schreibrecht)
GENERIC_EXECUTE (Recht zum Ausführen und Durchsuchen).
GENERIC_ALL (Alle Rechte)
CLEAR AHRechte$[]
LET AHRechte$[1,2]=$1
LET AHRechte$[2,2]=$2
LET AHRechte$[3,2]=$4
LET AHRechte$[4,2]=$8
LET AHRechte$[5,2]=$10
LET AHRechte$[6,2]=$20
LET AHRechte$[7,2]=$40
LET AHRechte$[8,2]=$80
LET AHRechte$[9,2]=$100
LET AHRechte$[10,2]=$200
LET AHRechte$[11,2]=$400
LET AHRechte$[12,2]=$800
LET AHRechte$[13,2]=$1000
LET AHRechte$[14,2]=$2000
LET AHRechte$[15,2]=$4000
LET AHRechte$[16,2]=$8000
LET AHRechte$[17,0]=_DELETE
LET AHRechte$[17,1]=löschen
LET AHRechte$[17,2]=$10000
LET AHRechte$[18,0]=READ_CONTROL
LET AHRechte$[18,1]=(Lesen der DACL Einträge und Besitzer)
LET AHRechte$[18,2]=$20000
LET AHRechte$[19,0]=WRITE_DAC
LET AHRechte$[19,1]=(Ändern der DACL Einträge)
LET AHRechte$[19,2]=$40000
LET AHRechte$[20,0]=WRITE_OWNER
LET AHRechte$[20,1]=(Eigentümer ändern)
LET AHRechte$[20,2]=$80000
LET AHRechte$[21,0]=SYNCHRONIZE
LET AHRechte$[21,1]=(Erlaubt einem Handle auf ein Complitition I/O zu warten)
LET AHRechte$[21,2]=$100000
LET AHRechte$[22,2]=$200000
LET AHRechte$[23,2]=$400000
LET AHRechte$[24,2]=$800000
LET AHRechte$[24,0]=ACCESS_SYSTEM_SECURITY
LET AHRechte$[24,1]=(Zugriff auf den SACL)
LET AHRechte$[25,2]=$1000000
LET AHRechte$[26,2]=$2000000
LET AHRechte$[27,2]=$4000000
LET AHRechte$[28,0]=GENERIC_ALL
LET AHRechte$[28,1]=(Vollzugriff)
LET AHRechte$[28,2]=$10000000
LET AHRechte$[29,0]=GENERIC_EXECUTE
LET AHRechte$[29,1]=(Rechte zum Ausführen und Durchsuchen)
LET AHRechte$[29,2]=$20000000
LET AHRechte$[30,0]=GENERIC_WRITE
LET AHRechte$[30,1]=(Schreibrechte)
LET AHRechte$[30,2]=$40000000
LET AHRechte$[31,0]=GENERIC_READ
LET AHRechte$[31,1]=(Leserechte)
LET AHRechte$[31,2]=$80000000
LET AHRechte$[0,0]=PROCESS_ALL_ACCESS
LET AHRechte$[0,1]=(Vollzugriff)
LET AHRechte$[0,2]=$1F0FFF
LET AHRechte$[1,0]=PROCESS_TERMINATE
LET AHRechte$[1,1]=(Erlaubt Process zu beenden)
LET AHRechte$[2,0]=PROCESS_CREATE_THREAD
LET AHRechte$[2,1]=(Erlaubt einen Remote-Thread zu erzeugen)
LET AHRechte$[3,0]=PROCESS_SET_SESSIONID
LET AHRechte$[3,1]=($4)
LET AHRechte$[4,0]=PROCESS_VM_OPERATION
LET AHRechte$[4,1]=(Erlaubt Zugriff auf Prozessspeicher zu verändern)
LET AHRechte$[5,0]=PROCESS_VM_READ
LET AHRechte$[5,1]=(Erlaubt anderem Prozess Prozessspeicher zu lesen)
LET AHRechte$[6,0]=PROCESS_VM_WRITE
LET AHRechte$[6,1]=(Erlaubt anderem Prozess Prozessspeicher zu schreiben)
LET AHRechte$[7,0]=PROCESS_DUP_HANDLE
LET AHRechte$[7,1]=(Erlaubt Prozess-Handle zu kopieren)
LET AHRechte$[8,0]=PROCESS_CREATE_PROCESS
LET AHRechte$[8,1]=($80)
LET AHRechte$[9,0]=PROCESS_SET_QUOTA
LET AHRechte$[9,1]=($100)
LET AHRechte$[10,0]=PROCESS_SET_INFORMATION
LET AHRechte$[10,1]=(Erlaubt u.a. Priorität zu ändern)
LET AHRechte$[11,0]=PROCESS_QUERY_INFORMATION
LET AHRechte$[11,1]=(Erlaubt Prozessdaten (Exitcode/Priorität) auszulesen
LET AHRechte$[12,0]=PROCESS_SUSPEND_RESUME
LET AHRechte$[12,1]=($800)
LET AHRechte$[13,0]=
LET AHRechte$[13,1]=
LET AHRechte$[14,0]=
LET AHRechte$[14,1]=
LET AHRechte$[15,0]=
LET AHRechte$[15,1]=
LET AHRechte$[16,0]=
LET AHRechte$[16,1]=
LET AHRechte$[23,0]=
LET AHRechte$[23,1]=
LET AHRechte$[24,0]=
LET AHRechte$[24,1]=
LET AHRechte$[25,0]=
LET AHRechte$[25,1]=
LET AHRechte$[27,0]=
LET AHRechte$[27,1]=
LET AHRechte$[27,0]=
LET AHRechte$[27,1]=
LET AHRechte$[32,0]=PROCESS_READ
LET AHRechte$[32,1]=(Leserecht)
LET AHRechte$[32,2]=$20410
LET AHRechte$[33,0]=PROCESS_EXECUTE
LET AHRechte$[33,1]=(Recht zum Ausführen und Durchsuchen)
LET AHRechte$[33,2]=$120000
LET AHRechte$[34,0]=PROCESS_WRITE
LET AHRechte$[34,1]=(Schreibrecht)
LET AHRechte$[34,2]=$020BEB
IF @AND(F_PROC_USER$<>,@OR(@INSTR(+,Hinzu_entfernen$)>0,@INSTR(-,Hinzu_entfernen$)>0))
Clear Needed&
Clear F_SYS$,FSFlags&
Clear ANZAHL_BYTES&
Clear F_PROC_Zähler&,ACE_SIZE&
Clear SecFlag&,ACCESS_MASK&
Clear Vorhanden&,SecFlag&,NEEDED&
Clear ACE_ZÄHLER&,SIZE_ACCOUNT&
LET FSFlags&=0
DIM STRSID#,500
DIM P_STRSID#,4
DIM Needed#,4
LET FSFLAGS$= +@UPPER$(FSFLAGS$)
LET FSFLAGS$=@Translate$(FSFLAGS$,GENERIC_ALL,PROCESS_ALL_ACCESS)
LET FSFLAGS$=@Translate$(FSFLAGS$,GENERIC_READ,PROCESS_READ)
LET FSFLAGS$=@Translate$(FSFLAGS$,GENERIC_WRITE,PROCESS_WRITE)
LET FSFLAGS$=@Translate$(FSFLAGS$,GENERIC_EXECUTE,PROCESS_EXECUTE)
LET Ersatz$=PROCESS_SET_SESSIONID PROCESS_VM_OPERATION PROCESS_CREATE_THREAD PROCESS_VM_WRITE PROCESS_VM_READ PROCESS_DUP_HANDLE
LET ERSATZ$=ERSATZ$+PROCESS_SET_QUOTA PROCESS_SET_INFORMATION PROCESS_QUERY_INFORMATION PROCESS_SUSPEND_RESUME WRITE_DAC
LET ERSATZ$=ERSATZ$+PROCESS_CREATE_PROCESS READ_CONTROL WRITE_OWNER SYNCHRONIZE READ_CONTROL PROCESS_TERMINATE _DELETE
LET FSFLAGS$=@Translate$(FSFLAGS$,PROCESS_ALL_ACCESS,Ersatz$)
LET FSFLAGS$=@Translate$(FSFLAGS$,PROCESS_EXECUTE,SYNCHRONIZE READ_CONTROL)
LET Ersatz$=PROCESS_SET_INFORMATION PROCESS_SET_QUOTA PROCESS_SUSPEND_RESUME PROCESS_CREATE_PROCESS PROCESS_DUP_HANDLE
LET ERSATZ$=ERSATZ$+PROCESS_VM_WRITE PROCESS_VM_OPERATION READ_CONTROL PROCESS_TERMINATE PROCESS_CREATE_THREAD
LET FSFLAGS$=@Translate$(FSFLAGS$,PROCESS_WRITE,Ersatz$)
LET FSFLAGS$=@Translate$(FSFLAGS$,PROCESS_READ,PROCESS_QUERY_INFORMATION READ_CONTROL PROCESS_TERMINATE )
IF @UPPER$(F_PROC_Process$)<>
IF @VAL(F_PROC_Process$)<>0
LET F_PROC_Process&=@VAL(F_PROC_Process$)
Else
THREAD_ID&=@AHGetWindowThreadProcessId(@FINDWINDOW(F_PROC_Process$),@ADDR(PROCESS_ID&))
LET F_PROC_Process&=@AHOpenProcess($40000 | $20000,0,PROCESS_ID&)
endif
else
LET F_PROC_Process&=@AHGetCurrentProcess()
endif
DIM SIDa#,1
DIM PSECURITY_DESCRIPTOR#,1
LET SECFLAG&=$1 | $2 | $4
Long Needed#,0=1
LET FILE_FEHLER&=@AHGetKernelObjectSecurity(F_PROC_Process&,SecFlag&,PSECURITY_DESCRIPTOR#,1,Needed#)
LET NEEDED&=@LONG(Needed#,0)
Dispose PSECURITY_DESCRIPTOR#
CLEAR NEEDED#
CASE NEEDED&=0 : LET NEEDED&=1024
DIM PSECURITY_DESCRIPTOR#,Needed&
Clear PSECURITY_DESCRIPTOR#
LET FILE_FEHLER&=@AHGetKernelObjectSecurity(F_PROC_Process&,SecFlag&,PSECURITY_DESCRIPTOR#,Needed&,Needed#)
DIM ACL_PRESENT#,4
DIM P_ACL#,4
DIM ACL_D#,4
Clear ACL_PRESENT#,P_ACL#,ACL_D#
Let FILE_FEHLER&=@AHGetSecurityDescriptorDACL(PSECURITY_DESCRIPTOR#,ACL_PRESENT#,P_ACL#,ACL_D#)
LET ANZAHL_BYTES&=8 Für ACL HEADER 8 Bytes veranschlagt
IF @AND(FILE_FEHLER&=1,@LONG(ACL_PRESENT#,0)=1)
DIM ACL_INFO#,12
DIM P_ACE#,4
CLEAR ACL_INFO#,P_ACE#
Let FILE_FEHLER&=@AHGetAclInformation(@long(P_ACL#,0),ACL_INFO#,12,2)
LET F_PROC_Zähler&=0
DIM F_PROC_ACCOUNT_NAME#,256
DIM F_PROC_SIZE_ACCOUNT#,4
DIM F_PROC_Domain#,256
DIM SIZE_F_PROC_Domain#,4
DIM F_PROC_SID_NAME_USE#,4
IF @LONG(ACL_INFO#,0)<>0
While F_PROC_Zähler&<@LONG(ACL_INFO#,0)
Sleep 10
Clear P_ACE#
Let FILE_FEHLER&=@AHGetAce(@long(P_ACL#,0),F_PROC_Zähler&,P_ACE#)
DIM ACE#,4
Clear ACE#
@AHCopyMemory(ACE#,@LONG(P_ACE#,0),4)
LET ACE_SIZE&=@Word(ACE#,2) Die Größen aller ACEs werden addiert.
LET ANZAHL_BYTES&=ANZAHL_BYTES&+ACE_SIZE&
Dispose ACE#
DIM ACE#,ACE_SIZE&
Clear F_PROC_SID_NAME_USE#
Clear F_PROC_ACCOUNT_NAME#
Clear F_PROC_Domain#
Clear ACE#
Long F_PROC_SIZE_ACCOUNT#,0=256
LONG SIZE_F_PROC_Domain#,0=256
@AHCopyMemory(ACE#,@LONG(P_ACE#,0),ACE_SIZE&)
DIM SID2#,ACE_SIZE&-8
clear SID2#
@AHCopyMemory(SID2#,@LONG(P_ACE#,0)+8,ACE_SIZE&-8)
LET FILE_FEHLER&=@AHLookupAccountSid(@ADDR(F_SYS$),SID2#,F_PROC_ACCOUNT_NAME#,F_PROC_SIZE_ACCOUNT#,F_PROC_Domain#,SIZE_F_PROC_Domain#,F_PROC_SID_NAME_USE#)
Clear STRSID#
IF @VAL(@LEFT$($WINVER,3))>=5.0
@AHCopyMemory(STRSID#,@LONG(P_STRSID#,0),@AHLocalSize(@LONG(P_STRSID#,0)))
LET FILE_FEHLER&=@AHLocalFree(@LONG(P_STRSID#,0))
endif
IF @UPPER$(@String$(F_PROC_ACCOUNT_NAME#,0))=@UPPER$(F_PROC_USER$)
IF @AND(@BYTE(ACE#,0)=0,@INSTR(+,Hinzu_entfernen$)>0)
LET VORHANDEN&=VORHANDEN& | 1
endif
IF @AND(@BYTE(ACE#,0)=1,@INSTR(-,Hinzu_entfernen$)>0)
LET VORHANDEN&=VORHANDEN& | 1
endif
endif
LET ACCESS_MASK&=@LONG(ACE#,4)
LET F_PROC_Zähler2&=0
While F_PROC_Zähler2&<36
sleep 10
IF @and(@or(ACCESS_MASK&,@VAl(AHRechte$[F_PROC_Zähler2&,2]))=ACCESS_MASK&,@VAl(AHRechte$[F_PROC_Zähler2&,2])<>0)
LET ACCESS_MASK&=ACCESS_MASK&-@VAl(AHRechte$[F_PROC_Zähler2&,2])
endif
Let F_PROC_Zähler2&=F_PROC_Zähler2&+1
wend
LET F_PROC_Zähler&=F_PROC_Zähler&+1
Dispose SID2#
Dispose ACE#
wend
Endif
Clear F_PROC_SID_NAME_USE#,F_PROC_ACCOUNT_NAME#,F_PROC_Domain#,SIDa#,F_SYS$
Long F_PROC_SIZE_ACCOUNT#,0=1
LONG SIZE_F_PROC_Domain#,0=256
LET FILE_FEHLER&=@AHLookupAccountName(@ADDR(F_SYS$),@addr(F_PROC_USER$),SIDa#,F_PROC_SIZE_ACCOUNT#,F_PROC_Domain#,SIZE_F_PROC_Domain#,F_PROC_SID_NAME_USE#)
LET SIZE_ACCOUNT&=@LONG(F_PROC_SIZE_ACCOUNT#,0)
Clear F_PROC_SID_NAME_USE#
Clear F_PROC_ACCOUNT_NAME#
Clear F_PROC_Domain#
Long F_PROC_SIZE_ACCOUNT#,0=SIZE_ACCOUNT&
LONG SIZE_F_PROC_Domain#,0=256
Dispose SIDa#
DIM SIDa#,SIZE_ACCOUNT&
Clear SIDa#
LET FILE_FEHLER&=@AHLookupAccountName(@ADDR(F_SYS$),@addr(F_PROC_USER$),SIDa#,F_PROC_SIZE_ACCOUNT#,F_PROC_Domain#,SIZE_F_PROC_Domain#,F_PROC_SID_NAME_USE#)
IF VORHANDEN&=0
LET Anzahl_Bytes&=Anzahl_Bytes&+@LONG(F_PROC_SIZE_ACCOUNT#,0)+8 Alle ACEs+SID+ACCESS_MASK+ACE_HEADER
endif
IF @INSTR(0,Hinzu_entfernen$)>0
LET Anzahl_Bytes&=@LONG(F_PROC_SIZE_ACCOUNT#,0)+8+8 SID+ACCESS_MASK+ACE_HEADER+ACL_HEADER
endif
Dispose F_PROC_ACCOUNT_NAME#
Dispose F_PROC_SIZE_ACCOUNT#
Dispose F_PROC_Domain#
Dispose SIZE_F_PROC_Domain#
Dispose F_PROC_SID_NAME_USE#
Dispose P_ACE#
Dispose ACL_INFO#
Endif
DIM NEW_ACL1#,Anzahl_Bytes&
LET FILE_FEHLER&=@AHInitializeAcl(NEW_ACL1#,Anzahl_Bytes&,$2)
Clear ACL_PRESENT#,P_ACL#,ACL_D#
Let FILE_FEHLER&=@AHGetSecurityDescriptorDACL(PSECURITY_DESCRIPTOR#,ACL_PRESENT#,P_ACL#,ACL_D#)
LET FILE_FEHLER&=@AHIsValidAcl(@long(P_ACL#,0))
IF @INSTR(-,Hinzu_entfernen$)>0
LET ACE_ZÄHLER&=1
else
LET ACE_ZÄHLER&=0
endif
IF @AND(FILE_FEHLER&=1,@LONG(ACL_PRESENT#,0)=1)
DIM ACL_INFO#,12
DIM P_ACE#,4
CLEAR ACL_INFO#,P_ACE#
Let FILE_FEHLER&=@AHGetAclInformation(@long(P_ACL#,0),ACL_INFO#,12,2)
LET F_PROC_Zähler&=0
DIM F_PROC_ACCOUNT_NAME#,256
DIM F_PROC_SIZE_ACCOUNT#,4
DIM F_PROC_Domain#,256
DIM SIZE_F_PROC_Domain#,4
DIM F_PROC_SID_NAME_USE#,4
IF @LONG(ACL_INFO#,0)<>0
While F_PROC_Zähler&<@LONG(ACL_INFO#,0)
sleep 10
sleep 10
Clear P_ACE#
Let FILE_FEHLER&=@AHGetAce(@long(P_ACL#,0),F_PROC_Zähler&,P_ACE#)
DIM ACE#,4
Clear ACE#
@AHCopyMemory(ACE#,@LONG(P_ACE#,0),4)
LET ACE_SIZE&=@Word(ACE#,2)
LET ANZAHL_BYTES&=ANZAHL_BYTES&+ACE_SIZE&
Dispose ACE#
DIM ACE#,ACE_SIZE&
Clear F_PROC_SID_NAME_USE#
Clear F_PROC_ACCOUNT_NAME#
Clear F_PROC_Domain#
Clear ACE#
Long F_PROC_SIZE_ACCOUNT#,0=256
LONG SIZE_F_PROC_Domain#,0=256
@AHCopyMemory(ACE#,@LONG(P_ACE#,0),ACE_SIZE&)
REM
DIM SID2#,ACE_SIZE&
CLEAR SID2#
@AHCopyMemory(SID2#,@LONG(P_ACE#,0)+8,ACE_SIZE&-8)
LET FILE_FEHLER&=@AHLookupAccountSid(@ADDR(F_SYS$),SID2#,F_PROC_ACCOUNT_NAME#,F_PROC_SIZE_ACCOUNT#,F_PROC_Domain#,SIZE_F_PROC_Domain#,F_PROC_SID_NAME_USE#)
Clear STRSID#
LET ACCESS_MASK&=@LONG(ACE#,4)
IF @UPPER$(@String$(F_PROC_ACCOUNT_NAME#,0))=@UPPER$(F_PROC_USER$)
IF @BYTE(ACE#,0)=0
IF @INSTR(+,Hinzu_entfernen$)>0
CASE @INSTR(0,Hinzu_entfernen$)=0 : LET FSFlags&=ACCESS_MASK&
ElseIF @INSTR(-,Hinzu_entfernen$)>0
if @INSTR(0,Hinzu_entfernen$)=0
LET F_PROC_Zähler2&=0
While F_PROC_Zähler2&<36
sleep 10
IF AHRechte$[F_PROC_Zähler2&,0]<>
IF @AND(@or(ACCESS_MASK&,@val(AHRechte$[F_PROC_Zähler2&,2]))=ACCESS_MASK&,@INSTR( +AHRechte$[F_PROC_Zähler2&,0],@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-@val(AHRechte$[F_PROC_Zähler2&,2])
endif
endif
LET F_PROC_Zähler2&=F_PROC_Zähler2&+1
wend
LONG ACE#,4=ACCESS_MASK&
IF ACCESS_MASK&<>0
LET FILE_FEHLER&=@AHAddAce(NEW_ACL1#,$2,ACE_ZÄHLER&,ACE#,ACE_SIZE&)
LET FILE_FEHLER&=@AHIsValidAcl(NEW_ACL1#)
LET ACE_ZÄHLER&=ACE_ZÄHLER&+1
endif
ENDIF
endif
Elseif @BYTE(ACE#,0)=1
IF @INSTR(+,Hinzu_entfernen$)>0
IF @INSTR(0,Hinzu_entfernen$)=0
LEt F_PROC_Zähler2&=0
While F_PROC_Zähler2&<36
sleep 10
IF AHRechte$[F_PROC_Zähler2&,0]<>
IF @AND(@or(ACCESS_MASK&,@val(AHRechte$[F_PROC_Zähler2&,2]))=ACCESS_MASK&,@INSTR( +AHRechte$[F_PROC_Zähler2&,0],@UPPER$(FSFLAGS$))>0)
LET ACCESS_MASK&=ACCESS_MASK&-@val(AHRechte$[F_PROC_Zähler2&,2])
endif
endif
LET F_PROC_Zähler2&=F_PROC_Zähler2&+1
wend
LONG ACE#,4=ACCESS_MASK&
IF ACCESS_MASK&<>0
LET FILE_FEHLER&=@AHAddAce(NEW_ACL1#,$2,ACE_ZÄHLER&,ACE#,ACE_SIZE&)
LET FILE_FEHLER&=@AHIsValidAcl(NEW_ACL1#)
LET ACE_ZÄHLER&=ACE_ZÄHLER&+1
endif
endif
ElseIF @INSTR(-,Hinzu_entfernen$)>0
IF @INSTR(0,Hinzu_entfernen$)=0
LEt F_PROC_Zähler2&=0
While F_PROC_Zähler2&<36
sleep 10
IF AHRechte$[F_PROC_Zähler2&,0]<>
IF @INSTR( +AHRechte$[F_PROC_Zähler2&,0],@UPPER$(FSFLAGS$))>0
LET ACCESS_MASK&=ACCESS_MASK& | @val(AHRechte$[F_PROC_Zähler2&,2])
endif
endif
LET F_PROC_Zähler2&=F_PROC_Zähler2&+1
wend
LONG ACE#,4=ACCESS_MASK&
IF ACCESS_MASK&<>0
LET FILE_FEHLER&=@AHAddAce(NEW_ACL1#,$2,ACE_ZÄHLER&,ACE#,ACE_SIZE&)
LET FILE_FEHLER&=@AHIsValidAcl(NEW_ACL1#)
LET ACE_ZÄHLER&=ACE_ZÄHLER&+1
endif
endif
endif
endif
else
IF @INSTR(0,Hinzu_entfernen$)=0
IF ACCESS_MASK&<>0
LET FILE_FEHLER&=@AHAddAce(NEW_ACL1#,$2,ACE_ZÄHLER&,ACE#,ACE_SIZE&)
LET FILE_FEHLER&=@AHIsValidAcl(NEW_ACL1#)
LET ACE_ZÄHLER&=ACE_ZÄHLER&+1
endif
endif
endif
LET F_PROC_Zähler&=F_PROC_Zähler&+1
Dispose SID2#
Dispose ACE#
wend
Endif
DIM ACE#,SIZE_ACCOUNT&+8
IF @INSTR(+,Hinzu_entfernen$)>0
Byte ACE#,0=0
LET CFS$=Bei ALLOWED_ACE...
ELSEIF @INSTR(-,Hinzu_entfernen$)>0
Byte ACE#,0=1
LET CFS$=Bei DENIED_ACE...
endif
LEt F_PROC_Zähler2&=0
While F_PROC_Zähler2&<36
sleep 10
IF AHRechte$[F_PROC_Zähler2&,0]<>
IF @INSTR( +AHRechte$[F_PROC_Zähler2&,0],@UPPER$(FSFlags$))>0
LET FSFlags&=@OR(FSFLAGS&,@val(AHRechte$[F_PROC_Zähler2&,2]))
endif
endif
LET F_PROC_Zähler2&=F_PROC_Zähler2&+1
wend
Byte ACE#,1=0
WORD ACE#,2=SIZE_ACCOUNT&+8
LONG ACE#,4=FSFlags&
LET F_PROC_Zähler&=0
WHILE F_PROC_Zähler&<>SIZE_ACCOUNT&
sleep 10
BYTE ACE#,8+F_PROC_Zähler&=@BYTE(SIDa#,F_PROC_Zähler&)
LET F_PROC_Zähler&=F_PROC_Zähler&+1
WEND
IF @INSTR(-,Hinzu_entfernen$)>0
LET ACE_ZÄHLER&=0
endif
IF FSFlags&<>0
LET FILE_FEHLER&=@AHAddAce(NEW_ACL1#,$2,ACE_ZÄHLER&,ACE#,SIZE_ACCOUNT&+8)
Endif
LET FILE_FEHLER&=@AHInitializeSecurityDescriptor(PSECURITY_DESCRIPTOR#,$1)
DIM F_Ab_SD#,1
DIM F_Ab_DACL#,1
DIM F_Ab_SACL#,1
DIM F_Ab_Owner#,1
DIM F_Ab_PG#,1
LET FILE_FEHLER&=@AHMakeAbsoluteSD(PSECURITY_DESCRIPTOR#,F_Ab_SD#,@ADDR(F_Ab_Size&),F_Ab_DACL#,@ADDR(F_Ab_DACLSize&),F_Ab_SACL#,@ADDR(F_Ab_SACLSize&),F_Ab_Owner#,@ADDR(F_Ab_OwnerSize&),F_Ab_PG#,@ADDR(F_Ab_PGSize&))
Dispose F_Ab_SD#
Dispose F_Ab_DACL#
Dispose F_Ab_SACL#
Dispose F_Ab_Owner#
Dispose F_Ab_PG#
DIM F_Ab_SD#,F_Ab_Size&+1
DIM F_Ab_DACL#,F_Ab_DACLSize&+1
DIM F_Ab_SACL#,F_Ab_SACLSize&+1
DIM F_Ab_Owner#,F_Ab_OwnerSize&+1
DIM F_Ab_PG#,F_Ab_PGSize&+1
Clear F_Ab_SD#,F_Ab_DACL#,F_Ab_SACL#,F_Ab_Owner#,F_Ab_PG#
LET FILE_FEHLER&=@AHMakeAbsoluteSD(PSECURITY_DESCRIPTOR#,F_Ab_SD#,@ADDR(F_Ab_Size&),F_Ab_DACL#,@ADDR(F_Ab_DACLSize&),F_Ab_SACL#,@ADDR(F_Ab_SACLSize&),F_Ab_Owner#,@ADDR(F_Ab_OwnerSize&),F_Ab_PG#,@ADDR(F_Ab_PGSize&))
LET FILE_FEHLER&=@AHSetSecurityDescriptorDacl(F_Ab_SD#,1,NEW_ACL1#,0)
LET FILE_FEHLER&=@AHSetKernelObjectSecurity(F_PROC_Process&,$4,F_Ab_SD#)
@AHCloseHandle(F_PROC_Process&)
Dispose F_SELF#
Dispose F_Ab_SD#
Dispose F_Ab_DACL#
Dispose F_Ab_SACL#
Dispose F_Ab_Owner#
Dispose F_Ab_PG#
DISPOSE ACE#
Dispose F_PROC_ACCOUNT_NAME#
Dispose F_PROC_SIZE_ACCOUNT#
Dispose F_PROC_Domain#
Dispose SIZE_F_PROC_Domain#
Dispose F_PROC_SID_NAME_USE#
Dispose P_ACE#
Dispose ACL_INFO#
endif
Dispose PSECURITY_DESCRIPTOR#
Dispose Needed#
Dispose NEW_ACL1#
ef='./../../function-references/XProfan/disponer/'>Disponer ACL_PRESENT#
Disponer P_ACL#
Disponer ACL_D#
Disponer SIDa#
Disponer STRSID#
Disponer P_STRSID#
endif
ENDPROC
|
| | | | |
|
RespuestaThemeninformationenDieses Thema ha 4 subscriber: |