Du übergibst auch direkt das
Handle, und nicht einen Pointer auf das
Handle:
ThreadHandle := BeginThread(nil, 0, @SecondaryThread,
@PrimaryThreadHandle, 0, ThreadID);
Somit übergibst Du tatsächlich einen Pointer, den Du dann mit p^ dereferenzieren kannst und das
Handle erhältst.