EnableExplicit

Anfängerfragen zum Programmieren mit PureBasic.
HemSA
Beiträge: 221
Registriert: 16.10.2005 13:59
Wohnort: Manisa / Türkei
Kontaktdaten:

EnableExplicit

Beitrag von HemSA »

Hallole,
Wenn ich den Code mit EnableExplicit am Anfang und diesem Teil im Code

Code: Alles auswählen

Procedure Shutdown( flags.l ) 
  Privileges.TOKEN_PRIVILEGES 
  OpenProcessToken_(GetCurrentProcess_(), 40, @hToken) 
  Privileges\PrivilegeCount           = 1 
  Privileges\Privileges[0]\Attributes = #SE_PRIVILEGE_ENABLED 
  LookupPrivilegeValue_(0, "SeShutdownPrivilege", @Privileges\Privileges[0]\Luid) 
  AdjustTokenPrivileges_(hToken, 0, @Privileges, 0, 0, 0) 
  CloseHandle_(hToken) 
  ExitWindowsEx_(flags, 0) 
EndProcedure
starte bekomme ich immer eine Fehlermeldung wie:

Line 73: With 'EnableExplicit', variables have to be declared: Privileges.

Aber Declare ist ja nur für Proceduren.
Was muss und wie muss ich das Define schreiben damit es keinen Fehler gibt?
Define Privileges klappt jedenfalls nicht und mit anderen Kombinationen hat es auch nicht geklappt.

Die Lösung ist natürlich EnableExplicit nicht zu verwenden, aber das will ich eigentlich nicht.

Danke schon mal.
PB 4.02 (wegen Disphelper), 5.72 (Windows) (x64)
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: EnableExplicit

Beitrag von RSBasic »

Strukturen müssen auch deklariert werden, wenn du diese nutzen möchtest. Um eine Struktur nutzen zu können, brauchst du eine Variable (Verweis auf die Struktur).

So sieht der Code mit EnableExplicit aus:

Code: Alles auswählen

EnableExplicit

Procedure Shutdown( flags.l ) 
  Protected Privileges.TOKEN_PRIVILEGES
  Protected hToken
  
  OpenProcessToken_(GetCurrentProcess_(), 40, @hToken) 
  Privileges\PrivilegeCount           = 1 
  Privileges\Privileges[0]\Attributes = #SE_PRIVILEGE_ENABLED 
  LookupPrivilegeValue_(0, "SeShutdownPrivilege", @Privileges\Privileges[0]\Luid) 
  AdjustTokenPrivileges_(hToken, 0, @Privileges, 0, 0, 0) 
  CloseHandle_(hToken) 
  ExitWindowsEx_(flags, 0)
  
EndProcedure
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Kurzer
Beiträge: 1617
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: EnableExplicit

Beitrag von Kurzer »

Ich kenne zwar den Rest deines Codes nicht, aber innerhalb einer Prozedure kanst du zum Beispiel Protected nutzen, um Variablen darin zu deklarieren.
Schau in der PB Hilfe nach Protected, um dir auch die anderen möglichen Schlüsselwörter anzusehen.

So würde die prozedure ohne Fehler compiliert werden:

Code: Alles auswählen

Procedure Shutdown( flags.l ) 
  Protected Privileges.TOKEN_PRIVILEGES, hToken.i
	
  OpenProcessToken_(GetCurrentProcess_(), 40, @hToken) 
  Privileges\PrivilegeCount           = 1 
  Privileges\Privileges[0]\Attributes = #SE_PRIVILEGE_ENABLED 
  LookupPrivilegeValue_(0, "SeShutdownPrivilege", @Privileges\Privileges[0]\Luid) 
  AdjustTokenPrivileges_(hToken, 0, @Privileges, 0, 0, 0) 
  CloseHandle_(hToken) 
  ExitWindowsEx_(flags, 0) 
EndProcedure
Edith: RSBasic war schneller.
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2024: 56 Jahre.
HemSA
Beiträge: 221
Registriert: 16.10.2005 13:59
Wohnort: Manisa / Türkei
Kontaktdaten:

Re: EnableExplicit

Beitrag von HemSA »

Danke euch beiden, jetzt klappt es ohne Fehlermeldung.
PB 4.02 (wegen Disphelper), 5.72 (Windows) (x64)
HemSA
Beiträge: 221
Registriert: 16.10.2005 13:59
Wohnort: Manisa / Türkei
Kontaktdaten:

Re: EnableExplicit

Beitrag von HemSA »

Hallole,
der Codeabschnitt ist mir sowieso total fremd. Habe ihn von einem Beispiel kopiert.

Was die Protected angeht:
- hToken finde ich ja öfters in dem Codeabschnitt, obwohl das dann wohl auch eher ein Glücksgriff waere.
aber wie komme ich auf
- Privileges.TOKEN_PRIVILEGES?

Das geht mir dann doch schon zu weit.
PB 4.02 (wegen Disphelper), 5.72 (Windows) (x64)
Benutzeravatar
mk-soft
Beiträge: 3845
Registriert: 24.11.2004 13:12
Wohnort: Germany

Re: EnableExplicit

Beitrag von mk-soft »

TOKEN_PRIVILEGES ist eine Window API Struktur.
Siehe Werkzeug -> Strukturverzeichnis
Also bei API Funktionen die MSDN fragen.
Alles ist möglich, fragt sich nur wie...
Projekte ThreadToGUI / EventDesigner V3 / OOP-BaseClass-Modul
Downloads auf MyWebspace / OneDrive
Benutzeravatar
RSBasic
Admin
Beiträge: 8047
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: EnableExplicit

Beitrag von RSBasic »

hToken steht für HandleToken und wird von einer WinAPI-Funktion zurückgegeben und die Handle-Nummer wird für die Weiterverarbeitung benötigt.
TOKEN_PRIVILEGES ist, wie mk-soft bereits sagte, eine WinAPI-Struktur, um mehrere Informationen zu lesen und zu schreiben.
Wie diese Struktur aufgebaut ist und wofür man sie benötigt, findest du nicht in der PB-Hilfe, sondern auf der MSDN-Seite: https://learn.microsoft.com/en-us/windo ... privileges
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Antworten