Beiträge von Homer J. S.

    Hallo Zusammen,

    ich habe mal wieder ein Problem, was ich hoffe mit euch lösen zu können.


    Ich würde gerne mit AutoIt eine Windows Benutzeranmeldung realisieren. Dafür habe ich ein AutoIt-Programm was als Dienst (System-User-Rechte) mit Windows startet. Allerdings habe ich noch keinen Befehl/Programm gefunden, um einen definierten Benutzer mit Passwort auf dem Speerbildschirm anzumelden.


    Hat einer eine Idee, wie man dies bewerkstelligen könnte?


    Vielen Dank schonmal für eure Hilfe.


    Gruß

    Homer J. S.

    Hast du Win10 auf einer SSD installiert? Ich wollte einen meiner Rechner mit einer SSD upgraden und hätte dann eine übrig.

    Das wäre für Win10 jedenfalls nötig denke ich.

    Hast du da ein spezielles Image verwendet?

    Ich habe ein Windows 11 Arm preview installiert, wie es oben in dem verlinkten Video zu sehen ist. Als Speichermedium habe ich aus Platzgründen (Abmessungen) einen USB 3.0 Stick von SanDisk geholt. Eine SSD mit USB-Adapter soll aber noch schneller sein.



    Hier mein "quick and dirty"-Code für die Temperatur auszulesen. Wenn es meine Zeit erlaubt, dann will ich noch eine UDF mit mehr Funktionen erstellen. Nochmals vielen Dank für deine Hilfe!



    Gruß

    Homer J. S.


    PS: Ich setze das Thema auf gelöst :thumbup:

    Andy :

    Ich bin nicht so bewandert mit Strucs und Pointern. Ich habe mal das Struct in der Struct erstellt - Stimmt das so?





    Gruß

    Homer J. S.

    Andy :
    Sorry für die späte Antwort und danke für den Link. Jetz bin ich schonmal ein Stück weiter:


    Der Aufruf vom Handle sollte funktionieren (Handle wird zurückgegeben). Jetzt bin ich am Aufruf von _WinAPI_DeviceIoControl dran.



    AutoIt
    ;>> Ursprünglicher C-Code (data.c)
    ;DeviceIoControl(hDevice, IOCTL_MAILBOX_PROPERTY, (LPVOID)(&mailbox), sizeof(mailbox), (LPVOID)(&mailbox), sizeof(mailbox), &bytesReturned, 0);
    _WinAPI_DeviceIoControl($hDevice, IOCTL_MAILBOX_PROPERTY(), $pInBuffer = 0 [, $iInBufferSize = 0 [, $pOutBuffer = 0 [, $iOutBufferSize = 0]]]] )

    Was theoretisch schon mal gehen sollte, ist "hDevice" und "IOCTL_MAILBOX_PROPERTY". Jetzt kommt die "mailbox"-Geschichte, woran ich bisher scheitere.


    In dem File "rpiq.h" stehen aber die Definitionen drin. Hier der Link:

    PiMon/rpiq.h at master · driver1998/PiMon
    A simple hardware monitor for your Raspberry Pi running Windows. - PiMon/rpiq.h at master · driver1998/PiMon
    github.com



    Gruß

    Homer J. S.

    Halte mich/uns mit diesem Projekt bitte auf dem Laufenden, ich habe einen Raspi 400 zum rumspielen und experimentieren.

    Sorry, das habe ich vorhin überlesen.


    >> Allgmeine Infos zu Windows 11 Arm auf einem Raspberry PI 4: <<


    Hardware Voraussetzung:

    - Raspberry PI 4 oder 400 mit mindestens 4GB Ram
    - USB 3.0-Stick >=64GB oder besser USB-HDD für Betriebssystem (mein Test mit einer SD-Karte waren erschreckend langsam)

    - Kühler für den Prozessor ist pflicht (der PI hat wohl deutlich mehr mit Windows zu tuen wie mit einem Raspberry Pi OS)


    >> Link Prozessor Kühler:

    JOY-IT Armor Case "BLOCK ACTIVE" für den Raspberry Pi 4B
    Das Armor Gehäuse "BLOCK ACTIVE" für den Raspberry Pi® 4 B ist Ihr idealer Partner wenn es hart auf hart kommt und richtig heiß wird. Das auf Aluminium…
    www.pollin.de


    Software Voraussetzung:

    - Aktuelle Firmware auf dem PI für USB-Boot zu ermöglichen


    Einschränkungen:

    - Kein natives WLAN bisher möglich -> Dies betrifft den Adapter intern wie auch USB Dongle

    - Windows läuft bisher ausschließlich im Testmodus, da die Treiber nicht zertifiziert sind


    >> Link Videotutorial:

    Windows 11 Installation auf Raspberry Pi 4 / 400 - Schritt für Schritt
    Windows 11 Insider Preview gibt es auch für ARM Prozessoren. Da bietet es sich an, dies einmal auf einem Rapberry Pi 4 / 400 zu installieren. Die genaue Anle...
    www.youtube.com


    >> Link UUP dump:

    UUP dump
    Download UUP files from Windows Update servers with ease. This project is not affiliated with Microsoft Corporation.
    uupdump.net


    >> Link Wor-Projekt:

    Home | Windows on Raspberry


    >> Link RPi-Windows-Drivers (ARM64):

    GitHub - worproject/RPi-Windows-Drivers: Windows on ARM device drivers for the Raspberry Pi single-board computer.
    Windows on ARM device drivers for the Raspberry Pi single-board computer. - GitHub - worproject/RPi-Windows-Drivers: Windows on ARM device drivers for the…
    github.com


    >> Link FTDI-Drivers (ARM64):

    D2XX Drivers - FTDI


    >> Link PI Hardware Monitor:

    1 - https://www.worproject.ml/downloads#pimon

    2 - https://github.com/driver1998/PiMon



    Ich hoffe, ich konnte dir bzw. anderen einen guten Einstieg in Windows PI Welt geben?!


    Gruß

    Homer J. S.

    das solltest du hinbekommen, das ist ein ganz simpler API-Aufruf mit entsprechenden Parametern. Die Parameter sind imho. alle im Programm als Konstanten definiert.

    So, das habe ich schon mal vorbereitet. Allerdings bin ich mir mit dem Parameter [RPIQ_USERMODE_PATH] unsicher.


    Hier mein Code:


    ich lese mich derweil mal in das Interface-Gedöns ein. Da ist allerlei wg. Endianess und Alignment gefordert...

    Das hört sich nach viel Arbeit an. Vielen Dank schon mal...



    Gruß

    Homer J. S.

    Hast du denn mal das vorliegende Programm compiliert und laufen lassen? Funktioniert es denn?

    Jein, ich habe es fertig kompiliert bei https://www.worproject.ml/downloads#pimon gedownloadet und dann erfolgreich getestet - Also es funktioniert.



    Was ich bisher herausgefunden habe ist, dass dies über "Microsoft's RPIQ driver for communicating with VC Mailbox in Windows" läuft. Dazu habe ich folgenden Link gefunden:

    Mailbox property interface · raspberrypi/firmware Wiki
    This repository contains pre-compiled binaries of the current Raspberry Pi kernel and modules, userspace libraries, and bootloader/GPU firmware. - Mailbox…
    github.com


    Hier ist ein Ausschnitt aus dem Beispiel von dem “data.c“ File:


    ...aber so wirklich schlau werde ich daraus nicht :Face:.


    Gruß

    Homer J. S.

    Hallo Andy,
    vielen Dank für deine Antwort bzw. deinen Lösungsvorschlag. Allerding glaube ich, dass du mich missverstanden hast. Das Windows 11 ARM läuft auf dem PI selbst und auf diesem möchte ich in meiner eigenen GUI die Temperatur anzeigen. Das Ganze funktioniert wohl über IOCTL bzw. “_WinAPI_DeviceIoControl“, wie ich dem “data.c“ File von meinem Link oben entnommen habe.


    Gruß

    Homer J. S.

    Hallo Zusammen,

    ich benötige eure Hilfe für das Auslesen der Prozessortemperatur eines Rasberry PI4 mit Windows 11 ARM. Es gibt hierfür schon ein Monitor-Tool auf GitHub, was dies über IOCTL bewerkstelligt. Die genaue Beschreibung der Befehle stehen in folgender Datei:


    PiMon/data.c at master · driver1998/PiMon
    A simple hardware monitor for your Raspberry Pi running Windows. - PiMon/data.c at master · driver1998/PiMon
    github.com


    Allerdings habe ich keinen Plan, wie ich dies mit AutoIt umsetzten könnte. Daher hoffe ich, das einer von euch mir unter die Arme greifen kann/möchte.


    Vielen Dank schonmal für eure Unterstützung!


    Gruß

    Homer J. S.

    alpines: Ich musste beruflich kurzfristig verreisen, deshalb sorry für die späte Antwort.


    Was du übergibst ist ein void**. Schau dir an was in den Funktionen davon als Buffer verwendet wird (ich schätze mal int[] oder char[] respektive byte[])

    Du hattest mal wieder Recht. Ich habe es jetzt wie folgt erfolgreich umgesetzt:



    Vielen Dank für deine Hilfe/Unterstützung!


    Gruß

    Homer J. S.


    PS: Ich setzte das Thema wieder auf gelöst

    Hallo Zusammen,

    ich bin ein gutes Stück weiter gekommen mit dieser DLL. Allerdings habe ich ein Problem mit dem Aufruf der Funktion “EApiI2CWriteReadRaw“. Es wäre schön, wenn mir nochmal eine(r) auf die Sprünge helfen könnte.


    Hier der Aufruf aus der Dokumentation:

    Code
    EApiStatus_t EAPI_CALLTYPE EApiI2CWriteReadRaw (__IN EApiId_t Id, __IN uint8_t Addr, __INOPT void* pWBuffer, __IN uint32_t WriteBCnt, __OUTOPT void *pRBuffer, __IN uint32_t RBufLen, __IN uint32_t ReadBCnt)


    Hier mein Aufruf mit AutoIt (Auszug):

    Code
    $tWBuffer=DllStructCreate("ptr")
    $pWBuffer=DllStructGetPtr($tWBuffer, 1)
    DllStructSetData($tWBuffer, 1, Null)
    $tRBuffer=DllStructCreate("ptr")
    $pRBuffer=DllStructGetPtr($tRBuffer, 1)
    $DllResult=DllCall($DllHandle, "uint:cdecl", "EApiI2CWriteReadRaw", "unit", 0, "byte", 0xA0, "ptr", $pWBuffer ,"uint", 0, "ptr", $pRBuffer, "uint", 1, "uint", 1)

    Wenn ich dieses so Aufrufe, dann gibt mir @error eine 1 zurück.


    Link zu Dokumentation aus Post #9 (ab Seite 10): Dokumentation



    Vielen Dank schonam für eure Hilfe!


    Gruß

    Homer J. S.

    Dein Parametertyp für $pBuflen ist "uint_ptr*", das wäre (wenn das überhaupt möglich ist in AutoIt, was es nicht ist) ein Pointer vom Pointer. Es darf aber nur ein einfacher Pointer sein -> "uint_ptr", "uint*" oder "ptr" nutzen!

    Du solltest für das Initialize und UnInitialize ebenfalls :cdecl nutzen, da diese auch API Calls sind und keine Std Calls.

    Das habe ich jetzt auch umgesetzt. An dem Problem mit der Bufferlänge hat sich nichts geändert. Allerdings ist das auch nicht wirklich ein Problem, da ich die Bufferlänge auch selbst nach dem Empfang ermitteln kann. Daher stelle ich jetzt das Thema auf gelöst. Vielen Dank für deine professionelle Hilfe!


    Gruß

    Homer J. S.

    alpines :


    Hier ist mein vollständiger Testcode:


    BugFix :

    Häufig verwenden Dll folgenden Mechanismus: Aufruf der Dll mit allen Parametern und als Bufferlänge null (Wert "0" oder "Null"), dann wird die Bufferlänge auf den erforderlichen Wert gesetzt. Den Wert verwende ich dann um meinen Buffer auf die richtige Länge zu setzen und rufe dann die Dll korrekt auf. Ggf. muss zur Länge 1 addiert werden, falls der Buffer einen null-terminierten String halten soll (sowas steht in der Doku).

    Danke für die Idee, aber leider funktioniert es nicht. Aber im Anhang findest du die PDF mit der Dokumentation, falls du mal drüber schauen möchtest...



    Gruß

    Homer J. S.

    Vielleicht passt er auch die Buffergröße an, übergib mal einen sehr kleinen Buffer und schau dir an was er zurückgibt und was in *pBuffer und *pBufferLen drinsteht.


    Ich habe mal folgendes getestet:


    Test 1:

    Buffer= char[20]

    Buflen = 1 (Vorbelegung)

    Rückgabewert Buffer = String mit 5 Zeichen (müssen 5 Zeichen sein)

    Rückgabewert Buflen = 1

    => Kein Fehler wird zurückgegeben ($EAPI_STATUS_SUCCESS=0)


    Test 2:

    Buffer= char[1]

    Buflen = 20 (Vorbelegung)

    Rückgabewert Buffer = String mit 1 Zeichen (müssten 5 Zeichen sein)

    Rückgabewert Buflen = 20

    => Kein Fehler wird zurückgegeben ($EAPI_STATUS_SUCCESS=0)


    Test 3:

    Buffer= char[1]

    Buflen = 1 (Vorbelegung)

    Rückgabewert Buffer = String mit 1 Zeichen (müssten 5 Zeichen sein)

    Rückgabewert Buflen = 1

    => Kein Fehler wird zurückgegeben ($EAPI_STATUS_SUCCESS=0)


    Test 4:

    Buffer= char[1]

    Buflen = / (Keine Vorbelegung)

    Rückgabewert Buffer = String mit 1 Zeichen (müssten 5 Zeichen sein)

    Rückgabewert Buflen = 0

    => Kein Fehler wird zurückgegeben ($EAPI_STATUS_SUCCESS=0)


    Test 5:

    Buffer= char[20]

    Buflen = / (Keine Vorbelegung)

    Rückgabewert Buffer = String mit 5 Zeichen (müssen 5 Zeichen sein)

    Rückgabewert Buflen = 0

    => Kein Fehler wird zurückgegeben ($EAPI_STATUS_SUCCESS=0)



    Es sieht ein wenig so aus, als ob die DLL nicht das macht, was sie sollte - Oder?


    Gruß

    Homer J. S.

    alpines:

    Vielen Dank für deine Unterstützung - Dein Code funktioniert einwandfrei :party:


    Jetzt verstehe ich ein wenig mehr, was die Kommunikation mit DLL´s angeht. Somit habe ich mich auch an das Auslesen der Boardinformationen gemacht. Dies funktioniert auch schon, allerdings ändert die DLL die Bufferlänge nicht. Laut Dokumentation ist das eine “__INOUT“ Funktion und daher habe ich “by reference“ angegeben, aber die Bufferlänge bleibt bei meiner Vorgabe. Vieleicht hast du ja noch einen Tipp für mich?




    Den Code habe ich nicht gesäubert, und er sieht ehrlich gesagt ziemlich beschissen aus, du solltest ihn sauberer schreiben.

    Das dieser nicht wunderschön ist, das war/ist mir bewusst. Ich teste am Anfang immer ein wenig rum und dann wird es ins reine geschrieben. Zudem wollte ich später wahrscheinlich eine UDF daraus machen.



    Gruß

    Homer J. S.

    Hallo Zusammen,

    ich benötige nach langer Zeit nochmals eure Hilfe. Ich möchte von meinem Mainboard Informationen (Temperatur, GPIO, usw...) abrufen bzw. setzen. Allerdings komme ich mit der DLL nicht wirklich weiter. Nach der Dokumentation (pdf im Anhang) muss man erst ein "EApiLibInitialize" ausführen um gewisse andere Funktionen ausführen zu können und dies funktioniert schon mal ohne Fehlermeldung. Nach Beendigung des Programms muss man ein "EApiLibUnInitialize" ausführen was auch ohne Fehlermeldung funktioniert. Allerdings wenn ich eine andere Funktion aufrufe, dann schließt sich das Script ohne Fehlermeldung oder sonstiges. Ich muss zugeben, dass ich mit DLL´s nicht wirklich bewandert bin. Daher bitte ich euch, mir unter die Arme zu greifen und somit zu helfen.


    Enthaltene Dateien im Anhang (Zip-File):

    1 - aaeonEAPI.dll
    2 - aaeonEAPI.h
    3 - aaeonEAPI.lib
    4 - aaeonEAPI.pdf



    Mein Testcode:


    Ich bedanke mich im voraus für eure Unterstützung/Hilfe!



    Gruß

    Homer J. S.