Hallo Delphifreunde!
Mal wieder stelle ich eine entscheidende Oberflächlichkeit im mikroweichen Entwicklernetzwerk (
MSDN) fest, und zwar geht es um die
SetThreadAffinityMask Function. Dort steht
„This
handle must have the THREAD_SET_INFORMATION or THREAD_SET_LIMITED_INFORMATION
access right and the THREAD_QUERY_INFORMATION or THREAD_QUERY_LIMITED_INFORMATION
access right. For more information, see Thread Security and
Access Rights.
Windows Server 2003 and Windows XP/2000: The
handle must have the THREAD_SET_INFORMATION and THREAD_QUERY_INFORMATION
access rights.“
Wie löst man die "and"s and "or"s logisch auf? Ab Windows Vista wäre die 1:1-Umsetzung so:
Code:
SetThreadAffinityMask(OpenThread((THREAD_SET_INFORMATION or Thread_Query_Information) and (THREAD_QUERY_INFORMATION or THREAD_QUERY_LIMITED_INFORMATION),
true,
ThreadID),
ThreadAffinityMask)
Doch das funktioniert nicht, der Rückgabewert zeigt das an. Außerdem stellte ich fest, daß für „Windows davor“ die Erläuterung „The
handle must have the THREAD_SET_INFORMATION and THREAD_QUERY_INFORMATION
access rights“ auch nicht 1:1 umsetzbar ist, denn:
Code:
SetThreadAffinityMask(OpenThread(THREAD_SET_INFORMATION and Thread_Query_Information,true,ThreadID),ThreadAffinityMask)
funktioniert nämlich nach meiner Beobachtung nicht, sondern nur:
Code:
SetThreadAffinityMask(OpenThread(THREAD_SET_INFORMATION or Thread_Query_Information,true,ThreadID),ThreadAffinityMask)
Weiß jemand, was genau gemeint ist?
Im voraus vielen Dank!
Mit Gruß
Delphi-Laie