none
PIO_STACK_LOCATION RRS feed

  • Frage

  • Hi!

    Ich schreibe derzeit an meinem ersten Pnp - Treiber und orientiere mich zunächst eng am Beispiel diskperf.

    Diskperf kann ich problemlos kompilieren, wenn ich die selben Einstellungen allerdings auf meinen Treiber anwenden möchte, führt das zu folgender Fehlermeldung:

    error C2275: 'PIO_STACK_LOCATION' : illegal use of this type as an expression

    Dabei verwende ich, was makefile und sources Datei betrifft die selben Einstellungen und nutze PIO_STACK_LOCATION auch, wie im Beispiel:

    PIO_STACK_LOCATION sIrp = IoGetCurrentIrpStackLocation(Irp);

    Meine Header:

    #include <ntddk.h>

    Ich verstehe nicht, was ich anders machen muss, damit es klappt!

    Vielen Dank schon mal im Voraus

    developer1800

    Sonntag, 18. Dezember 2011 21:07

Antworten

  • Da es sich wahrscheinlich um C-code handelt (Kernel-Treiber) kannst du Variablen nur am Anfang eines Blockes deklarieren.
    Am besten ganz am Anfang der Funktion:

    NTSTATUS DispatchPnp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
    {
        PIO_STACK_LOCATION sIrp;
        // alle weiteren Variablen
        DbgPrint("DispatchPnp: started...\n");

    Mit freundlichen Gruessen



    Montag, 19. Dezember 2011 14:30

Alle Antworten

  • error C2275: 'PIO_STACK_LOCATION' : illegal use of this type as an expression

    Zeige mehr von Deinem Code. Fehlt davor evtl. ein Semikolon?

    Hast Du evtl. die Variable im Code definiert (C++-Code) und nicht am Anfang des Blocks (C-Code)?


    Martin Richter -- MVP for VC++ [Germany] -- http://blog.m-ri.de
    Montag, 19. Dezember 2011 09:16
    Moderator
  • Vielen Dank für Ihre Antwort!

    Die Definition steht am Anfang einer Funktion:

    NTSTATUS DispatchPnp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
    {
        DbgPrint("DispatchPnp: started...\n");

        PIO_STACK_LOCATION sIrp = IoGetCurrentIrpStackLocation(Irp);

    Es ändert sich allerdings auch nichts an der Fehlermeldung, wenn man folgendes schreibt:

    NTSTATUS DispatchPnp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
    {
        DbgPrint("DispatchPnp: started...\n");

        PIO_STACK_LOCATION sIrp;

        sIrp = IoGetCurrentIrpStackLocation(Irp);

    MFG

    developer1800

    Montag, 19. Dezember 2011 14:20
  • Da es sich wahrscheinlich um C-code handelt (Kernel-Treiber) kannst du Variablen nur am Anfang eines Blockes deklarieren.
    Am besten ganz am Anfang der Funktion:

    NTSTATUS DispatchPnp(IN PDEVICE_OBJECT DeviceObject, IN PIRP Irp)
    {
        PIO_STACK_LOCATION sIrp;
        // alle weiteren Variablen
        DbgPrint("DispatchPnp: started...\n");

    Mit freundlichen Gruessen



    Montag, 19. Dezember 2011 14:30