IrDa- Schnittstelle



  • Guten Morgen zusammen,

    ich würde gerne mittels meines Programms den Com- Port der Infrarot- Schnittstelle ermitteln.
    Ist es also möglich zu erfahren, welches die IrDa- Schnittstelle ist ?
    und wie ?

    DANKE für eure Hilfe



  • Guten Morgen zusammen,
    mein Problem ist, dass ich die unbenutzten seriellen Schnittstellen meines Systems ermitteln sollte.
    Dies habe ich bisher so gelöst, dass ich für jede Schnittstelle CreateFile aufgerufen habe und den Handle auswerte. Danach schließe ich mit CloseHandle die Schnittstelle wieder.

    Wenn aber eine IrDa Schnittstelle im System integriert ist, wird der Handle zwar als gültig ausgegeben, aber das CloseHandle führt dann zum Absturz des PC´s.

    Wie könnte ich also nun die IrDa- Schnittstelle ermitellen, damit dann keine CloseHandle ausgeführt wird ?

    DANKE für euer Hilfe



  • Was genau hast du denn vor?
    Evtl. hilft dir das hier weiter: http://www.c-plusplus.net/forum/viewtopic.php?t=46015



  • Hallo flenders,
    ich dank dir erstmal für deinen Link, aber dieser bringt mich leider irgendwie auch nicht so viel weiter.

    Nochmals zum Verständnis:
    Ich möchte in meinem Programm die seriellen Schnittstellen des PC´s ermitteln.
    Bisher habe ich dies, auch wie in deinem Link beschrieben, über den Handle mit CreateFile... abgefragt. Soweit hat auch alles funktioniert. Nun wollte ich mein Programm auf einem Notebook laufen lassen, welches eine IrDa- Schnittstelle besitzt.
    Wenn ich nun den Handle (Com3) dieser Schnittstelle öffne, wird der Handle als gültig angezeigt. Wenn ich dann aber CloseHandle aufrufen stürtz mir der PC komplett ab.

    Um diesen Absturz zu vermeiden, möchte ich nun den IrDa- Com- Port ermitteln um das Problem zu umgehen.

    Wenn´s noch Frage geben soll, versuche ich noch mehr Infos zu geben



  • Weiter unten gibt es aber auch noch eine andere Variante 😉



  • Hallo flenders,
    danke für deinen Tipp.
    Irgendwie habe ich den Thread nur flüchtig gelesen und diese Varainte wohl übergangen.
    Ein kleines Problem habe ich aber mit einem Parameter noch.

    GUID_DEVINTERFACE_COMPORT findet Ihr übrigens in <winioctl.h>

    dieses GUID_DEVINTERFACE_COMPORT finde ich weder in winioctl.h noch sonstwo und wenn ich ich diese Variable selber deklariere, wird mir das Programm zwar übersetzt, aber das Ergebnis ist dann total falsch. (0 Ports found) eigentlich müssten es aber 8 Com Ports sein.

    Kannst du mir evtl. auf die Sprünge helfen ?

    DANKE



  • Dann solltest Du mal dein Platform SDK erneuern...

    //
    // Device interface class GUIDs.
    //
    // need these GUIDs outside conditional includes so that user can
    //   #include <winioctl.h> in precompiled header
    //   #include <initguid.h> in a single source file
    //   #include <winioctl.h> in that source file a second time to instantiate the GUIDs
    //
    #ifdef DEFINE_GUID
    //
    // Make sure FAR is defined...
    //
    #ifndef FAR
    #ifdef _WIN32
    #define FAR
    #else
    #define FAR _far
    #endif
    #endif
    
    DEFINE_GUID(GUID_DEVINTERFACE_DISK,                   0x53f56307L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
    DEFINE_GUID(GUID_DEVINTERFACE_CDROM,                  0x53f56308L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
    DEFINE_GUID(GUID_DEVINTERFACE_PARTITION,              0x53f5630aL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
    DEFINE_GUID(GUID_DEVINTERFACE_TAPE,                   0x53f5630bL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
    DEFINE_GUID(GUID_DEVINTERFACE_WRITEONCEDISK,          0x53f5630cL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
    DEFINE_GUID(GUID_DEVINTERFACE_VOLUME,                 0x53f5630dL, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
    DEFINE_GUID(GUID_DEVINTERFACE_MEDIUMCHANGER,          0x53f56310L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
    DEFINE_GUID(GUID_DEVINTERFACE_FLOPPY,                 0x53f56311L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
    DEFINE_GUID(GUID_DEVINTERFACE_CDCHANGER,              0x53f56312L, 0xb6bf, 0x11d0, 0x94, 0xf2, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
    DEFINE_GUID(GUID_DEVINTERFACE_STORAGEPORT,            0x2accfe60L, 0xc130, 0x11d2, 0xb0, 0x82, 0x00, 0xa0, 0xc9, 0x1e, 0xfb, 0x8b);
    DEFINE_GUID(GUID_DEVINTERFACE_COMPORT,                0x86e0d1e0L, 0x8089, 0x11d0, 0x9c, 0xe4, 0x08, 0x00, 0x3e, 0x30, 0x1f, 0x73);
    DEFINE_GUID(GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR, 0x4D36E978L, 0xE325, 0x11CE, 0xBF, 0xC1, 0x08, 0x00, 0x2B, 0xE1, 0x03, 0x18);
    
    //
    // Obsolete device interface class GUID names.
    // (use of above GUID_DEVINTERFACE_* names is recommended).
    //
    #define DiskClassGuid               GUID_DEVINTERFACE_DISK
    #define CdRomClassGuid              GUID_DEVINTERFACE_CDROM
    #define PartitionClassGuid          GUID_DEVINTERFACE_PARTITION
    #define TapeClassGuid               GUID_DEVINTERFACE_TAPE
    #define WriteOnceDiskClassGuid      GUID_DEVINTERFACE_WRITEONCEDISK
    #define VolumeClassGuid             GUID_DEVINTERFACE_VOLUME
    #define MediumChangerClassGuid      GUID_DEVINTERFACE_MEDIUMCHANGER
    #define FloppyClassGuid             GUID_DEVINTERFACE_FLOPPY
    #define CdChangerClassGuid          GUID_DEVINTERFACE_CDCHANGER
    #define StoragePortClassGuid        GUID_DEVINTERFACE_STORAGEPORT
    #define GUID_CLASS_COMPORT          GUID_DEVINTERFACE_COMPORT
    #define GUID_SERENUM_BUS_ENUMERATOR GUID_DEVINTERFACE_SERENUM_BUS_ENUMERATOR
    
    #endif // DEFINE_GUID
    


  • Hallo Hepi,

    Dank dir vielmals,
    In meiner Header- Datei (winioctl.h) war dieselbe Konstante allerdings unter dem Namen (GUID_CLASS_COMPORT) deklariert.

    Nach dem ich diesen ersetzt habe funktioniert es.

    SUPER
    DANKE



  • Etwas hätte ich doch noch:

    Ich wollte mit der Funktion:

    SetupDiGetDeviceInterfaceDetail(...)

    die Nummer der ComPorts abfragen. Der Returnwert der Funktion ist aber allerdings immer false.
    Evtl. stimmen die Parameter nicht ganz richtig. Es wäre sehr nett, wenn jemand ein Bsp posten könnte.

    DANKE


Log in to reply