Seite 3 von 4

Re: Treiber aktivieren/deaktivieren

Verfasst: 16.09.2010 11:28
von deify
es ist zwar schule, aber eine ag in der ich an allen pcs die admin-rechte besitze, also auch kein problem (;

eine gina.dll schreiben will ich eigentlich nicht :D weil ich dazu einfach zu blöd bin ^^

Re: Treiber aktivieren/deaktivieren

Verfasst: 18.09.2010 14:39
von Helle
Devcon wurde ja schon empfohlen (nutze ich selber auch); aus Jux habe ich mal getestet, ob der PS/2-Tastatur-Anschluss sich über den guten alten Port 64h (ach, waren die DOS-Zeiten schön...) deaktivieren lässt: Geht, getestet mit Win XP-Prof (32-Bit), Win Server 2003 (64-Bit) und Win 7 Ultimate (64-Bit).
Portzugriff wurde mit WinRing0 erhalten; habe ich eh aktiv. Details dazu und andere Möglichkeiten siehe in der Hardware & Elektronik-Abteilung.
Hier mein Test-Code:

Code: Alles auswählen

;- PS/2-Tastatur über Port 64h aus/einschalten
;- Nutzung der WinRing0-Dll´s (32-und 64-Bit). Copyright (c) 2007-2009 OpenLibSys.org. All rights reserved.
;- "Helle" Klaus Helbing, 18.09.2010, PB 4.51 (x86, x64)

SI.SYSTEM_INFO                                   ;Structure System_Info

#PROCESSOR_ARCHITECTURE_AMD64 = $9

GetSystemInfo_(@SI)

If OpenWindow(0, 0, 0, 250, 100, "Tastatur de/aktivieren", #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget)
  ;ermitteln, ob 32- oder 64-Bit-Betriebssystem
  If SI\wProcessorArchitecture = #PROCESSOR_ARCHITECTURE_AMD64
    OS3264 = 1
  EndIf
  ;die entsprechende DLL öffnen
  If OS3264
    DLLOK = OpenLibrary(0, "WinRing0x64.dll")    ;64-Bit-Version laden
   Else
    DLLOK = OpenLibrary(0, "WinRing0.dll")       ;32-Bit-Version laden
  EndIf

  If DLLOK
    Prototype.i ProtoWinRing0_0()
    WR0_InitializeOls.ProtoWinRing0_0 = GetFunction(0, "InitializeOls")
    WR0_DeinitializeOls.ProtoWinRing0_0 = GetFunction(0, "DeinitializeOls")

    Prototype.i ProtoWinRing0_2(V1w.w, V2b.b)
    WR0_WriteIoPortByte.ProtoWinRing0_2 = GetFunction(0, "WriteIoPortByte")

    If WR0_InitializeOls()
      OptionGadget(0, 30, 20, 150, 20, "Tastatur ist aktiviert")
      OptionGadget(1, 30, 45, 150, 20, "Tastatur ist deaktiviert")
      SetGadgetState(0, 1)
      ActiveGadget_Old = 0
      Repeat
        If GetActiveGadget() <> ActiveGadget_Old
          If GetGadgetState(0)
            WR0_WriteIoPortByte($64, $AE)        ;Tastatur ein
            ActiveGadget_Old = 0
           ElseIf GetGadgetState(1)
            WR0_WriteIoPortByte($64, $AD)        ;Tastatur aus
            ActiveGadget_Old = 1
          EndIf
        EndIf
      Until WaitWindowEvent() = #PB_Event_CloseWindow
      WR0_DeinitializeOls()  
    EndIf   

  EndIf
EndIf

Gruß
Helle

Re: Treiber aktivieren/deaktivieren

Verfasst: 18.09.2010 14:56
von ts-soft
@Helle
Deine Ermittlung des OS (32 oder 64) während der Laufzeit ist doch quatsch.
Eine 32-Bit Exe kann keine 64-Bit DLL laden, somit muss nicht nur die DLL
angepasst werden, sondern auch die Exe. Des weiteren wäre dann eine Compilerdirektive
auch sinnvoller.
Oder sehe ich da was verkehrt?

Gruß
Thomas

Re: Treiber aktivieren/deaktivieren

Verfasst: 18.09.2010 15:38
von deify
@helle

hey danke für die antwort! hab schon gedacht es kommt nichtsmehr (:

ich konnte die dll leider nicht finden, alle downloadlinks sind veraltet oder wurden entfernt!
kann man denn damit auch usb-ports deaktivieren, ich bin mir nämlich nichtmehr ganz sicher was für unsere pcs zutrifft, ich persönlich habe daheim nämlich kein ps2 mehr und kann es somit auch nicht testen (:

Re: Treiber aktivieren/deaktivieren

Verfasst: 18.09.2010 21:14
von hjbremer

Re: Treiber aktivieren/deaktivieren

Verfasst: 19.09.2010 10:01
von GPI
Klasse Post - darf man fragen, was das für eine Datei sein soll und was sie bewirkt?

Re: Treiber aktivieren/deaktivieren

Verfasst: 19.09.2010 10:21
von Lord
Enthält die von Rings benutzte WinRing.dll.

Re: Treiber aktivieren/deaktivieren

Verfasst: 19.09.2010 10:44
von GPI
Lord hat geschrieben:Enthält die von Rings benutzte WinRing.dll.
Nicht böse sein, aber ich bin genauso schlau wie vorher ;)

Re: Treiber aktivieren/deaktivieren

Verfasst: 19.09.2010 11:16
von Helle
Oh je, ist wohl meine Schuld :oops: : Ich habe hier mit einer großen Kanone (WinRing0) auf einen kleinen Spatzen (OUT Port, Wert) geschossen. Für den Schnell-Test hatte ich einfach Teile meiner CPU-Lüfter-Steuerung rauskopiert und für simple OUT-Befehle angepasst. Daher kommt auch die Verwendung von System_Info (wird dort auch für andere Infos benötigt). Wer will kann auch CompilerIf usw. verwenden. Ebenso kann jede andere Port-Ausgabe-Steuerung verwendet werden (InpoutXY, giveio, directnt usw., je nach 32-64-Bit-OS). WinRing0 ist komplizierter in der Anwendung, bietet aber sehr viel Möglichkeiten (zumindest die alte Version, die eben bei mir schon installiert ist).
Die verwendete Software muss nichts weiter umsetzen können als

Code: Alles auswählen

MOV al,0ADh
OUT 64h,al      ;Tastatur sperren
MOV al,0AEh
OUT 64h,al      ;Tastatur aktivieren
Dies funktioniert aber nur für den PS/2-Anschluss! USB-Geräte steuere ich mittels Devcon.

Gruß
Helle

Re: Treiber aktivieren/deaktivieren

Verfasst: 19.09.2010 11:50
von deify
also ich hab mal nachgerfragt, es handelt sich in der schule auch um usb tastaturen! jetzt ist das problem halt, dass sie die tastatur treiber nicht entfernen lassen ): hast du ne idee, wenn du devcon dazu benutzt bist du vielleicht schonmal auf eine lösung gestoßen?