Fehler in der MS-Dokumentation?

  • Themenstarter Themenstarter sw33tlull4by
  • Beginndatum Beginndatum
S

sw33tlull4by

Guest
Hallo!
Also, ich habe einen KMDF Treiber (ab)-geschrieben.
Nun wollte ich EvtDeviceDriverAdd hinzufügen.

http://msdn.microsoft.com/en-us/library/ff541693.aspx

Legt nahe wie man das macht.
Mein problem ist nicht die deklaration der Funktion(dank Chromatin) sondern die Implementierung.

Wie man auf der Seite sieht ist der Rückgabewert der Funktion void.
Mein compiler wirft dann allerdings den error c2371.
Also habe ich das void durch NTSTATUS ersetzt, da im Text darüber davon auch die Rede war was passiert wenn STATUS_SUCCESS nicht zurrückgegeben wird.
Ich will ja keinen fehlerhaften Code in den Kernel einführen, weswegen ich hier mal nachfrage.

evtdriver() wird nicht ausgeführt da ich kein PnPdevice habe, sondern nur einen Filter den ich mit dem OsrLoader lade,weswegen ich auf dem Wege zZ kein Feedback über die qualität des Codes erhalte.
Mfg

sw33t
PHP:
#include <ntddk.h>
#include <../wdf/kmdf/1.9/wdf.h>

NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath);//Deklaration des driverentries
EVT_WDF_DRIVER_DEVICE_ADD evtdriver;//das hier ist auch eine Funktion aber etwas umständlich deklariert,

NTSTATUS evtdriver(
               IN WDFDRIVER Driver,
               IN PWDFDEVICE_INIT DeviceInit
               ){
                   KdPrint(("This is EVT_WDF_DRIVER_DEVICE_ADD-Callbackfunction writing"));
                   return STATUS_SUCCESS;
                }

NTSTATUS DriverEntry(IN PDRIVER_OBJECT DriverObject,IN PUNICODE_STRING RegistryPath){
    NTSTATUS status = STATUS_SUCCESS;
    WDF_DRIVER_CONFIG config;

    KdPrint(("Toaster Function Driver Sample-"
             "Driver Framework Edition.\n"));
    KdPrint(("Built %s %s\n",__DATE__,__TIME__));

    WDF_DRIVER_CONFIG_INIT( //INITIALISIERT WDF_DRIVER_CONFIG,fest vorgegebene Funktion einfach benutzen
        &config,
     evtdriver//NULL //Variable wäre für Plug-n-Play hilfreich werde hier aber erstmal drauf verzichten
        );

    status = WdfDriverCreate(
        DriverObject,//wird beim treiberstart übergeben,evtl pointer auf Speicher wo Treiberobjekt initialisiert wird(FrameWorkObjekt welches den Treiber repräsentiert
        RegistryPath,//Pfad in die Registry
        WDF_NO_OBJECT_ATTRIBUTES,
        &config,//Pointer auf das Objekt was die konfigurationen enthält.
        WDF_NO_HANDLE
        );
    if(!NT_SUCCESS(status)){
        KdPrint(("WdfDriverCreate failed with"
                 "status 0x%x\n",status));
    }
    return status;
}
 
Ich kann dir da leider nicht weiterhelfen aber kannst du mir vielleicht ein Tutorial empfehlen welches sich mit Treiber Entwicklung in C beschäftigt ?
Oder wie hast du es gelernt bzw. lernst du es ?
 
Hey sw33tlull4by!

Laut MSDN Dokumentation ist der Syntax der Funktion:
Code:
NTSTATUS EvtDriverDeviceAdd(
  __in  WDFDRIVER Driver,
  __in  PWDFDEVICE_INIT DeviceInit
)

Also nehme ich an das der Rückgabewert NTSTATUS und nicht void ist.
Weiter unten steht dann tatsächlich aber als Beispiel:
Code:
VOID 
 MyDriverDeviceAdd (
    IN WDFDRIVER Driver,
    IN PWDFDEVICE_INIT DeviceInit
    )

Sieht für mich nach einem Fehler in der Doku aus.

MfG
Inliferty
 
@nookstar
Wenn du es lernen willst, bedenke aber bitte das es auch ein älteres Modell gibt Treiber für WIndows zu schreiben.
Das alte Modell heisst WDM(Windows Driver Model), das neue heisst WDF(Windows Driver Foundation)und baut auf WDM auf.
@all
Vielen dank.
mfg

sw33t
 
Zuletzt bearbeitet:
Hmm mal was komplett OT:
Der Link zur Codeprojektseite:
Wir da nicht ein WDM-Treiber erklärt?
Gibt es auch schon WDF-TreiberTutorials,würde mein Unterfangen einfacher machen.
Mfg

sw33t


//edit nur um noch genauer zu sein was ich meine.
In einem Dokument was man bei MS runterladen kann, werde IRP's beschrieben.
Ua steht dort als Beispielcode:
KEVENT event;........

Nun habe ich mich erstmal gefragt was der Datentype KEVENT ist, nach langer recherche(man findet ja kaum was zu Datentypen in WDF) stellt sich heraus das es WDM code ist und das die ersetzung in WDF WdfWaitLockAcquire lautet.
(Quelle: http://www.winvistatips.com/wdf-wait-lock-usage-t801532.html )
 
Zuletzt bearbeitet:
Zurück
Oben