
Code: Alles auswählen
CompilerIf #PB_Compiler_Thread
Procedure CreateThread_M(proc.l,value,flags.b)
Protected result, pbproc, old
!MOV Eax, _PB_CreateThread_THREAD@8
!CMP byte[Eax+0x27], 0x6A
!JNE asm_CreateThread_M_fail
!CMP dword[Eax+0xAC], 0x0008C2C9
!JNE asm_CreateThread_M_fail
!MOV dword[p.v_pbproc], Eax
If VirtualProtect_(pbproc,$100,#PAGE_EXECUTE_READWRITE,@old)
PokeB(pbproc+$28,flags)
result = CreateThread(proc,value)
PokeB(pbproc+$28,$00)
VirtualProtect_(pbproc,$100,old,@old)
ProcedureReturn result
EndIf
!asm_CreateThread_M_fail:
ProcedureReturn #False
EndProcedure
CompilerElse
Procedure CreateThread_M(proc.l,value,flags.b)
Protected result, pbproc, old
!MOV Eax, _PB_CreateThread@8
!CMP byte[Eax+0x0B], 0x6A
!JNE asm_CreateThread_M_fail
!CMP dword[Eax+0x90], 0x0008C2C9
!JNE asm_CreateThread_M_fail
!MOV dword[p.v_pbproc], Eax
If VirtualProtect_(pbproc,$100,#PAGE_EXECUTE_READWRITE,@old)
PokeB(pbproc+$0C,flags)
result = CreateThread(proc,value)
PokeB(pbproc+$0C,$00)
VirtualProtect_(pbproc,$100,old,@old)
ProcedureReturn result
EndIf
!asm_CreateThread_M_fail:
ProcedureReturn #False
EndProcedure
CompilerEndIf
;-Bsp
Procedure a(void)
Debug 1234
ProcedureReturn
EndProcedure
thread = CreateThread_M(@a(),0,#CREATE_SUSPENDED) ;Warten bis ResumeThread
Delay(500)
ResumeThread(thread)
Delay(500)