![]() |
Handle Access Rights - Verständnisfrage
Hallo Delphifreunde!
Mal wieder stelle ich eine entscheidende Oberflächlichkeit im mikroweichen Entwicklernetzwerk (MSDN) fest, und zwar geht es um die ![]() „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:
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:
SetThreadAffinityMask(OpenThread((THREAD_SET_INFORMATION or Thread_Query_Information) and (THREAD_QUERY_INFORMATION or THREAD_QUERY_LIMITED_INFORMATION),
true, ThreadID), ThreadAffinityMask)
Code:
funktioniert nämlich nach meiner Beobachtung nicht, sondern nur:
SetThreadAffinityMask(OpenThread(THREAD_SET_INFORMATION and Thread_Query_Information,true,ThreadID),ThreadAffinityMask)
Code:
Weiß jemand, was genau gemeint ist?
SetThreadAffinityMask(OpenThread(THREAD_SET_INFORMATION or Thread_Query_Information,true,ThreadID),ThreadAffinityMask)
Im voraus vielen Dank! Mit Gruß Delphi-Laie |
AW: Handle Access Rights - Verständnisfrage
Die "oder" und "und" Wörter im MSDN Text sind eine Wortart (Konjunktion) und haben nicht unbedingt dieselbe logische Aussagekraft, wie die Bitoperatoren in Delphi. Besonders aber hier ist, dass du nicht alle Bestandteile nutzen musst.
Mit Zitat:
entweder THREAD_SET_INFORMATION oder THREAD_SET_LIMITED_INFORMATION mit entweder THREAD_QUERY_INFORMATION oder THREAD_QUERY_LIMITED_INFORMATION mit Delphi-"or" verknüpfen sollst. z.B. "THREAD_SET_INFORMATION or THREAD_QUERY_INFORMATION" Man benutzt dabei den Oder-Bitoperator "or", da er in der Bitmaske alle gesetzten Bits ("1") in das Ergebnis übernimmt, da 1 or 0 = 1, 0 or 1 = 1, 1 or 1 = 1. Mit "and" werden nur alle, bei beiden Konstanten gesetzten Bits übernommen, daher ist die Zugriffsmaske mehr einschränkend. |
AW: Handle Access Rights - Verständnisfrage
Zum besseren Verständnis:
![]() |
AW: Handle Access Rights - Verständnisfrage
Zitat:
Code:
... wohingegen beim Kombinieren von Bits der bitweise Operator benutzt würde (ja, es geht auch kürzer, aber hier geht's um Verständnis):
if (ausdruck || ausdruck2) { ... }
Code:
Man kann zwar prinzipiell auch den bitweisen Operator für Abfragen mißbrauchen:
ausdruck = ausdruck | ausdruck2;
Code:
... darf sich dann aber je nach Kontext nicht über geändertes Laufzeitverhalten oder gar geänderte Logik wundern. Denn bei:
if (ausdruck | ausdruck2) { ... }
Code:
... werden die Checks schon abgebrochen wenn "foo" oder "foo || bar" wahr sind, wohingegen bei:
if (foo || bar || baz) ...
Code:
... alle Werte kombiniert werden und dann geguckt wird, ob sie Null oder nicht Null sind.
if (foo | bar | baz) ...
|
AW: Handle Access Rights - Verständnisfrage
Dank Euch dreien!
Nun, daß die Wortart „Konjunktion“ in der natürlichen Sprache dahintersteckt, war mir durchaus klar, und auch bekannt, welche Ergebnisse die gleichnamigen Logikoperatoren auf verschiedene Bitpaare haben. Meinen Zweifel, daß man mikroweichs natürlichsprachliche (-sprachige?) Formulierung 1:1 in Programmierlogik übersetzen kann, sehe ich bestätigt, zumal es ja so auch nicht funktionierte. Dezipaitor, Deinen Beitrag verstand ich beim ersten Lesen nicht, beim zweiten Lesen schon, danke! Offensichtlich sind die „neueren“ Atrribute überhaupt nicht nötig, so daß ich mich frage, warum Mikroweich sie einführte. Operatoren für Bitverknüpfungen kenne ich leider nicht, bin zu sehr dem Pascal verhaftet. Die Binärwerde der Zugriffsrechte legen allerdings nahe, daß sie intern jeweils ein eigenes Bit belegen. |
AW: Handle Access Rights - Verständnisfrage
Zitat:
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:34 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz