Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]7490[/thread]

Windows Gerätemanager ansteuern: geht das mit perl ?

Leser: 1


<< >> 9 Einträge, 1 Seite
fboneol
 2005-11-23 11:24
#60364 #60364
User since
2003-09-12
32 Artikel
BenutzerIn
[default_avatar]
Hi,

kennt jemand eine Möglichkeit oder ein Modul, mit dem ich den Windows Gerätemanager steuern kann ?
Mir geht es eigentlich nur darum, ein Gerät (z.B. CD-Laufwerk) aus dem Gerätemanager zu entfernen.
Optimal wäre ein eigenes Modul, evtl. aber auch per OLE / API.

Hat jemand sowas schonmal gemacht ?

Gruss,
F.Bone
GwenDragon
 2005-11-23 12:20
#60365 #60365
User since
2005-01-17
14761 Artikel
Admin1
[Homepage]
user image
Also ich nehme an, es geht nur über Win32::API.

Mir sind keine Module bekannt, die den Gerätemanager direkt ansprechen.

Wofür brauchst du das? Zum Deaktivieren oder Deinstallieren von Geräten ?\n\n

<!--EDIT|GwenDragon|1132741478-->
fboneol
 2005-11-23 12:37
#60366 #60366
User since
2003-09-12
32 Artikel
BenutzerIn
[default_avatar]
[quote=GwenDragon,23.11.2005, 11:20]Wofür brauchst du das? Zum Deaktivieren oder Deinstallieren von Geräten ?[/quote]
Genau dafür. Ich habe ein VB-Script, welches die angeschlossenen USB-Geräte überwacht. Wenn ein nicht erlaubtes Gerät angeschlossen wird, wird es sofort deaktiviert.
Das Deaktivieren läuft z.Zt. mit dem Microsoft-Tool 'devcon' per Kommandozeile:
http://support.microsoft.com/default.aspx?scid=kb;EN-US;Q311272

Ich möchte dieses Script nach Perl umschreiben, dann kompilieren und dachte, es geht auch eleganter alles mit Perl, ohne devcon benutzen zu müssen.
GwenDragon
 2005-11-23 12:57
#60367 #60367
User since
2005-01-17
14761 Artikel
Admin1
[Homepage]
user image
Ah ja, so ein ähnliches VBS kenne ich.
USB-Wächter.

Eigentlich brauchst du einen Dienst, der regelmäßig prüft, ob ein neues USB-Gerät eingehängt wurde und dann die Registry mit den dazugehörigen USB überprüfen.

Über Win32::OLE müsstest du alles mögliche steuern können.
Über Win32::Registry die Registry bearbeiten.

Die USB-Geräte sind ja unter
HKLM\SYSTEM\CurrentControlSet\Enum\USB gelistet\n\n

<!--EDIT|GwenDragon|1132743822-->
GwenDragon
 2005-11-23 13:16
#60368 #60368
User since
2005-01-17
14761 Artikel
Admin1
[Homepage]
user image
Geht es um spezielle Geräte wie USB-Stick, Memory-Card, USB-Platte
oder um USB-Geräte allgemein?

Im Grunde genommen müßte z. B.:

* Das Laden der Treiber nur für bestimmte Benutzer erlaubt sein.

* Ein automatisches Starten mit autorun.infg muss unterbunden werden.\n\n

<!--EDIT|GwenDragon|1132745009-->
fboneol
 2005-11-23 13:22
#60369 #60369
User since
2003-09-12
32 Artikel
BenutzerIn
[default_avatar]
unterschiedlich. Z.B. soll der USB-Drucker oder die USB-Maus erlaubt sein, der USB Stick und die USB Festplatte nicht.

Klappt auch alles sehr gut, aber nur mit dem im Hintergrund laufenden VB-Script. Mein Gedanke ist ein komplettes Perlscript, was ich als exe-kompiliere und dann als Windows Systemdienst starte.
Ich kann halt nur perl.....
GwenDragon
 2005-11-23 13:29
#60370 #60370
User since
2005-01-17
14761 Artikel
Admin1
[Homepage]
user image
Aha, dann muß der Zugriff auf Teile der Registry, auf USBSTOR.SYS und andere Dateien unterbunden werden.

Das sind:
HKLM\System\CurrentControlSet\Services\usbstor  

%systemroot%\inf\usbstor.inf
%systemroot%\inf\usbstor.pnf
%systemroot%\system32\drivers\usbstor.sys

Also:
1) Benutzergruppe USBSPPEICHER einrichten, die Wechselplatten, Sticks benutzen darf
2) Benutzer der Gruppe USBSPPEICHER zuweisen
3) Zugriff auf USBSTOR.SYS, usbstor.inf und usbstor.pnf dem SYSTEM per ACL entziehen!
4) Zugriff auf USBSTOR.SYS, usbstor.inf und usbstor.pnf per ACL nur für Gruppe USBSPPEICHER und Administratoren erlauben!
5) Zugriff auf die Registry unter HKLM\System\CurrentControlSet\Services\usbstor  
mit REGEDIT dem SYSTEM entziehen und nur für die Gruppe USBSPPEICHER und Administratoren erlauben!

Dann dürfen nur bestimmte Leute der Gruppe USBSPEICHER Stick und Festplatte benutzen.

Admins können aber immer noch USB-Speicher benutzen, die sind also immer noch ein Risiko.

//Tip ohne Gewähr. Bitte auch ausprobieren, ob es geht.


Microsoft: How to disable the use of USB storage devices\n\n

<!--EDIT|GwenDragon|1132746347-->
pKai
 2005-11-23 14:21
#60371 #60371
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
Geräte auslesen (auch Remote mit entsprechenden Admin-Rechten) kann man folgendermaßen:
Code (perl): (dl )
1
2
3
4
5
6
7
use strict;
use warnings;
use Win32::OLE qw(in);
my $Computer = $ARGV[0] || '.';
my $Wmi = Win32::OLE->GetObject("WinMgmts://$Computer/root/cimv2") or die Win32::OLE->LastError;
my $devices = $Wmi->ExecQuery("SELECT * FROM Win32_PNPEntity Where DeviceID like 'USB%'") or die Win32::OLE->LastError;
print join $/ => map { my $device = $_; map { "$_: " . $device->{$_} } qw(DeviceID PNPDeviceID Description) } in $devices;

Ich kenne allerdings keine Möglichkeit über WMI auf die Devices und deren Status Einfluss zu nehmen.
Die PNPEntity-Klasse ist hier beschrieben.
I sense a soul in search of answers.
fboneol
 2005-11-24 15:40
#60372 #60372
User since
2003-09-12
32 Artikel
BenutzerIn
[default_avatar]
Danke für die Tipps, dann mach ich das wohl doch mit perl und devcon in Kombination.
<< >> 9 Einträge, 1 Seite



View all threads created 2005-11-23 11:24.