Announcement

Collapse
No announcement yet.

Hot-PlugNPlay mit Delphi

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Hot-PlugNPlay mit Delphi

    Hey Leute

    Ich habe ein Notebook mit PCMCIA-Schacht und einem Selectable Bay (Schacht für mehrere Einschübe). Ab Windows 2000 kann man über "Hardware entfernen" diese Laufwerke bzw. Medien auswerfen. Ich möchte nun in einem Delphi-Programm diese Funktion einbauen. Welche API-Routinen muß ich verwenden, um diese Funktionen zu verwenden ??

  • #2
    Ich weiss jetzt auch nicht genau wie das geht, aber auf jeden Fall ist das ein selten genutztes API. Wenn ueberhaupt, dann ist das API nur in der Win32 Konversion von Marcel van Brakel enthalten (http://delphi-jedi.org/APILIBRARY). Moeglicherweise ist es auch Bestandteil des Windows 2000 DDK. Ich frage mal rum. Dieses API interessiert mich . Das braucht man auch fuer USB-Geraete

    Comment


    • #3
      Hallo Robert

      Ich habe mir mal die API runtergeladen, aber kann eigentlich keine Funktion finden. Wäre super wenn du was rausbekommen würdest

      Comment


      • #4
        Es ist der Configuration Manager aus dem Windows 2000 DDK. Die Funktionen beginnen alle mit CM_. Soweit ich weiss ist das API noch nicht konvertiert

        Comment


        • #5
          Ist bei den vielen __fastcall, unions und Vorwärts-Deklarationen relativ unwarscheinlich, daß das 2000-er DDK mal eben übersetzt wird.<br>
          (mit jeder Delphi-Compiler-Version stieg bisher die Möglichkeit dazu...)

          - nic

          Comment


          • #6
            Was ist eigentlich mit den DeviceIOControl Funktionen. Kommt man damit nicht an diese Funktionalitäten heran ?

            Comment


            • #7
              Wenn der Treiber die IOCTLs unterstützt, ja.

              - nic

              Comment


              • #8
                Hey Leute

                Ich habe mir mal das DDK angesehen und die Funktion IORequestDeviceEject zum Auswerfen von Medien und Laufwerken gefunden. Diese benötigt einen DeviceObject Pointer, den ich mir mit IOGetDeviceObjectPointer ermitteln kann. Der ermittelt sich den Pointer aus einem Buffer der den Namen des DeviceObject enthalten muß. Schätze mal der ist in der Registry vermerkt. Welcher Schlüssel enthält aber den Namen und wie kann ich diese Infos aus einem gegebenen Laufwerk ermitteln ?

                Comment


                • #9
                  Kannst du vergessen. Ist eine Kernel-Mode-Funktion also nur fuer Treiber

                  Comment


                  • #10
                    Die richtige Funktion ist offensichtlich CM_Request_Device_Eject. cfgmgr32.h ist nicht so schwierig zu konvertieren. Ich mache mich mal ran

                    Comment


                    • #11
                      Ich hatte heute ein wenig Zeit... ist zwar nicht JEDI-konform, sollte aber zum Testen ausreichen.

                      http://www.bendlins.de/nico/delphi/ntddk/cfgmgr32.zip

                      - nico

                      ps: ansonsten <b>IOCTL_STORAGE_EJECT_MEDIA</b> <a href="/webx?13@@.ee7dec1/0">Tim Henford "Laufwerk "sperren" (DeviceIOControl)" 30.03.2001 19:20</a&gt

                      Comment


                      • #12
                        Hey Nico

                        Habe auch schin mit IOCTL_STORAGE_EJECT_MEDIA gearbeitet. Leider funktioniert das für Hot-PlugNPlay PCMCIA-Speicherkarten nicht (Kein Zugriff auf das Medium). Ich teste mal deine Version

                        Comment


                        • #13
                          Nico, nicht schlecht die Konversion. Wenn du willst kann man sie Jedi-konform machen. Der Betreuer bin dann ich. [email protected]

                          Comment


                          • #14
                            http://www.bendlins.de/nico/delphi/ntddk/CmEject.zip

                            Ich habe leider keine Geräte hier, die Eject unterstützen.<br>
                            (deswegen ist es etwas ins blaue programmiert<br>
                            Würde mich interessieren, ob es so funktioniert.

                            - nico

                            ps: Robert, ich weiß nicht, ob ich die Zeit dafür habe (vielleicht nach dem aktuellen Projekt...

                            Comment


                            • #15
                              Hallo Nico

                              Ich habe mal deine Anwendung ausprobiert. Um mein Gerät (SUN-Disk in einem PCMCIA-Laufwerk) auch auswerfen zu können, habe ich die Mask um
                              CM_DEVCAP_REMOVABLE und CM_DEVCAP_DOCKDEVICE erweitert. Leider funktioniert das Auswerfen nicht. Ich bekomme als Rückgabewert CR_FAILURE (Vetotype: PNP_VetoTypeUnknown). Das Laufwerk und das Medium wurden korrekt erkannt (PCMCIA\SUNDISK-SDP-1E2E\1)

                              Comment

                              Working...
                              X