AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Handle Access Rights - Verständnisfrage

Handle Access Rights - Verständnisfrage

Ein Thema von Delphi-Laie · begonnen am 9. Jan 2011 · letzter Beitrag vom 9. Jan 2011
Antwort Antwort
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#1

Handle Access Rights - Verständnisfrage

  Alt 9. Jan 2011, 12:04
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

Geändert von Delphi-Laie ( 9. Jan 2011 um 12:24 Uhr)
  Mit Zitat antworten Zitat
Dezipaitor

Registriert seit: 14. Apr 2003
Ort: Stuttgart
1.701 Beiträge
 
Delphi 7 Professional
 
#2

AW: Handle Access Rights - Verständnisfrage

  Alt 9. Jan 2011, 13:11
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:
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.
ist gemeint, dass du
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.
Christian
Windows, Tokens, Access Control List, Dateisicherheit, Desktop, Vista Elevation?
Goto: JEDI API LIB & Windows Security Code Library (JWSCL)
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.534 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Handle Access Rights - Verständnisfrage

  Alt 9. Jan 2011, 14:25
Zum besseren Verständnis: Effizientes Arbeiten mit Bitmasken
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#4

AW: Handle Access Rights - Verständnisfrage

  Alt 9. Jan 2011, 14:36
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.
Zumal hier eine entscheidende Unterscheidung in Delphi nicht vorhanden ist. In C/C++ und anderen Sprachen unterscheidet man zwichen bitweisen und logischen Operatoren. Die Entsprechung für "or" aus Delphi wäre dann im Kontext einer Abfrage üblicherweise (logischer Operator):

Code:
if (ausdruck || ausdruck2) { ... }
... wohingegen beim Kombinieren von Bits der bitweise Operator benutzt würde (ja, es geht auch kürzer, aber hier geht's um Verständnis):

Code:
ausdruck = ausdruck | ausdruck2;
Man kann zwar prinzipiell auch den bitweisen Operator für Abfragen mißbrauchen:

Code:
if (ausdruck | ausdruck2) { ... }
... darf sich dann aber je nach Kontext nicht über geändertes Laufzeitverhalten oder gar geänderte Logik wundern. Denn bei:

Code:
if (foo || bar || baz) ...
... werden die Checks schon abgebrochen wenn "foo" oder "foo || bar" wahr sind, wohingegen bei:

Code:
if (foo | bar | baz) ...
... alle Werte kombiniert werden und dann geguckt wird, ob sie Null oder nicht Null sind.
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Delphi-Laie

Registriert seit: 25. Nov 2005
1.474 Beiträge
 
Delphi 10.1 Berlin Starter
 
#5

AW: Handle Access Rights - Verständnisfrage

  Alt 9. Jan 2011, 18:26
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.
  Mit Zitat antworten Zitat
Benutzerbild von Assarbad
Assarbad

Registriert seit: 8. Okt 2010
Ort: Frankfurt am Main
1.234 Beiträge
 
#6

AW: Handle Access Rights - Verständnisfrage

  Alt 9. Jan 2011, 18:30
Sag doch konsequenterweise Winzigweich, dann ist's ganz eingedeutscht

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.
In Delphi wird dieser Unterschied ja auch nicht gemacht. Wenn man sich aber klarmacht, daß er existiert ...
Oliver
"... aber vertrauen Sie uns, die Physik stimmt." (Prof. Harald Lesch)
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz