WMI-API gesucht (Hardware ohne wmi auslesen)

  • So habe folgendes Problem, ich muss Mainboardmodell und Prozessornamen ohne WMI ermitteln.
    (Das Programm läuft unter BartPe, das hat keine WMI unterstützung.)

    Daher wäre meine Frage ob man die entsprechenden Informationen über DLL-Aufrufe bekommt.
    und wenn ja welche DLL und welche Funktion.

    Es betrifft die beiden WMI-Informationen
    Win32_Processor -> Name
    Win32_BaseBoard -> Model


    PS: Wie findet man eigentlich die passende API zu so einer Funktion? Hab beim googeln nichts brauchbares gefunden.

    Einmal editiert, zuletzt von Bitboy (7. April 2010 um 19:48)

  • Bin grad nen bissle faul es selbst zu basteln, aber damit solltest du glücklich werden =)

    Spoiler anzeigen
    [autoit]


    #include <Array.au3>

    [/autoit] [autoit][/autoit] [autoit]

    ; #Konstanten# ==================================================================================================================
    ;
    Global Const $wbemFlagReturnImmediately = 0x10
    Global Const $wbemFlagForwardOnly = 0x20

    [/autoit] [autoit][/autoit] [autoit]

    ; #FUNKTION# ====================================================================================================================
    ;
    ; Name...........: _WinWMI_UserAccount_Name
    ; Beschreibung ..: Benutzernamen und die Anzahl der Benutzer werden vom Zielcomputer ausgelesen.
    ; Syntax.........: _WinWMI_UserAccount_Name($Computer = '127.0.0.1')
    ; Parameter .....: $Computer - IP-Adresse/Hostname des Zielcomputers.
    ; Rückgabewerte .: Erfolg - Benutzer werden in einem Array zurückgegeben. "$Array"[0] gibt die Anzahl der Benutzer zurück.
    ; Fehler - -1 , -2
    ; Autor .........: Daniel Jacobs (Mahagon)
    ; Link ..........: http://msdn.microsoft.com/en-us/library/aa394507(VS.85).aspx | Win32_UserAccount Name
    ; Beispiel ......:
    ;
    ; ===============================================================================================================================

    [/autoit] [autoit][/autoit] [autoit]

    Func _WinWMI_UserAccount_Name($Computer = '127.0.0.1')
    $WMIConnect = ObjGet('winmgmts:{impersonationLevel=impersonate}!\\' & $Computer & '\root\CIMV2')
    If @error Then SetError(-1)
    $ObjList = $WMIConnect.ExecQuery('select * from win32_useraccount', 'WQL', $wbemFlagReturnImmediately + $wbemFlagForwardOnly)
    Local $Array[1]
    For $ObjItem In $ObjList
    _ArrayAdd($Array,$ObjItem.Name)
    Next
    $Array[0] = UBound($Array)
    If $ObjItem.Name = 0 Then
    Return $Array
    Else
    SetError(-2)
    EndIf
    EndFunc

    [/autoit]

    Musst du halt nur auf deine Bedürfnisse anpassen ;)


    EDIT argh sry seh grade ohne WMI (Wer lesen kann ist klar im Vorteil)
    hm .. schon mal mit AIDA32 versucht?

    21 is only half the truth.

  • Wollte es erstmal ohne externe Programme versuchen, wegen dem Lerneffekt und wegen der Geschwindigkeit.

    AIDA hab ich nicht versucht, aber das Programm SIW schafft es die Informationen auch unter BartPE auszulesen.

    Von daher bin ich überzeugt, dass es über die Windows API geht, wüsste nur gern wie.

  • Habs vorerst mal so gemacht:

    Spoiler anzeigen
    [autoit]

    Run(@ScriptDir & "\cpuz.exe")

    [/autoit] [autoit][/autoit] [autoit]

    WinWait("CPU-Z", "Processor")
    Sleep(1000)
    $CPU = StringStripWS(ControlGetText("CPU-Z", "", "Static29"), 7)

    [/autoit] [autoit][/autoit] [autoit]

    ;2 Tabs nach rechts
    ControlCommand ("CPU-Z", "", "SysTabControl321", "TabRight", "")
    Sleep(100)
    ControlCommand ("CPU-Z", "", "SysTabControl321", "TabRight", "")
    Sleep(100)

    [/autoit] [autoit][/autoit] [autoit]

    $MB = StringStripWS(ControlGetText("CPU-Z", "", "Static11"), 7)

    [/autoit] [autoit][/autoit] [autoit]

    WinClose("CPU-Z")

    [/autoit]

    falls noch jemand ne andere idee hat, bitte posten.

  • Win32_BaseBoard -> Model bringt bei mir gar nichts deswegen weiß ich nicht ob folgendes die Information ist welche du benötigst:

    Spoiler anzeigen
    [autoit]

    $Prozessor = RegRead("HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\0", "ProcessorNameString")
    $BoardManufacturer = RegRead("HKLM\HARDWARE\DESCRIPTION\System\BIOS", "BaseBoardManufacturer")
    $BoardProduct = RegRead("HKLM\HARDWARE\DESCRIPTION\System\BIOS", "BaseBoardProduct")
    $BoardVersion = RegRead("HKLM\HARDWARE\DESCRIPTION\System\BIOS", "BaseBoardVersion")

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    ConsoleWrite( "Prozessor:" & @TAB & @TAB & $Prozessor & @CRLF & _
    "Board-Hersteller:" & @TAB & $BoardManufacturer & @CRLF & _
    "Board-Typ:" & @TAB & @TAB & $BoardProduct & @CRLF & _
    "Board-Version:" & @TAB & @TAB & $BoardVersion & @CRLF)

    [/autoit]
  • Zitat

    (Das Programm läuft unter BartPe, das hat keine WMI unterstützung.)


    Das ist nicht ganz richtig, wenn du die XP´-Shell von Gianluigi Tiesi (Sherpya) einbindest, dann geht auch WMI, natürlich ist die Performance nicht die beste und bringt noch andere Nachteile mit sich, zB. kein booten möglich über PXE oder bei Rechnern mit zu wenig RAM, das Laden des Systems dauert auch erheblich länger. Dafür hast du fast komplette XP-Umgebung.

    Zitat

    $Prozessor = RegRead("HKLM\HARDWARE\DESCRIPTION\System\CentralProcessor\0", "ProcessorNameString")


    Diesen Schlüssel gibt es in Standart-PE doch, die anderen drei habe unter dem Pfad nicht gesehen, aber vielleicht liegen diese Infos an einer anderen Stelle in der Registry.
    In XP ist ein InfoTool Onboard "Syteminfo.exe", und spuckt eine Menge Informationen über Konsole aus. Wird aber in PE nicht automatisch eingebunden, ob das Programm in der Umgebung überhaupt läuft, habe ich ebenfalls nicht getestet. Leider wird bei diesem Programm nicht der obengenannte Registryschlüssel angezeigt und die Verarbeitung bis zu Ausgabe dauert, da viele Informationen abgerufen werden.


    Hier findest du ein Parr Screens zu XP-Shell

    http://oss.netfarm.it/winpe/images/xpe.png

    http://oss.netfarm.it/winpe/images/xpe-pnp.jpg

    http://oss.netfarm.it/winpe/images/xpe-media.jpg

    http://oss.netfarm.it/winpe/images/windowpos.jpg

    - MfG OpaEd

    Einmal editiert, zuletzt von opaed (9. April 2010 um 15:21)