WinDDK - Standard Datentypen wie char, int...?



  • Hallo Beisammen,

    ich fummel hier grade mit dem Windows Driver Development Kit rum.
    Ich hab zwar schon einige kurze Test-Treiber geschrieben, aber jetzt wo ich dann doch nicht mehr um Standard Datentypen rumkomme ^^, wie z.B. int, char, WORD, DWORD, etc. gibts ein Problem:
    Der Compiler haut mir andauernd Fehlermeldungen um die Ohren so von wegen dass er die Datentypen nicht kennt. Ich hab die <ntddk.h> inkludiert, sonst nichts.
    Was tun ?...

    Ich hoffe mal ihr könnt mir da ein Stückchen weiterhelfen.

    Grüße, Xzi-Bit



  • Hmm... also "int" und "char" kennt er auf jeden Fall.

    Zeig doch mal ein Stück Code und die passende Fehlermeldung...



  • Ich hab den Code auf das Minimum begrenzt, sieht folgendermaßen aus:

    #include <ntddk.h>
    
    VOID OnUnload (IN PDRIVER_OBJECT DriverObject)
    {
    	DbgPrint ("OnUnload called\n");
    }
    
    NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) 
    {
             DbgPrint("DriverEntry called\n");
    	DriverObject->DriverUnload = &OnUnload;
    
    	DWORD proc = 0;
    
    	return STATUS_SUCCESS;
    }
    

    Es kann also nur daran liegen. Wenn ich die Deklaration

    DWORD proc = 0;
    

    weglasse, so kompiliert er mir den Source einwandfrei.

    Meine Compile-Ausgabe (buildchk_wxp_x86.log) sieht wie folgt aus:

    BUILD: Computing Include file dependencies:
    BUILD: Examining c:\dd directory for files to compile.
    Compiling (NoSync) c:\dd directory ********************
    1>'nmake.exe /nologo BUILDMSG=Stop. -i NTTEST= UMTEST= NOLINK=1 NOPASS0=1 PASS1_NOLIB=1 386=1'
    1>BUILDMSG: Processing c:\dd
    1>cl -nologo -Ii386\ -I. -IC:\WINDDK\inc\mfc42 -I%BUILD%\inc -Iobjchk_wxp_x86\i386 -IC:\WINDDK\inc\wxp -IC:\WINDDK\inc\wxp -IC:\WINDDK\inc\ddk\wxp -IC:\WINDDK\inc\ddk\wdm\wxp -IC:\WINDDK\inc\crt -D_X86_=1 -Di386=1  -DSTD_CALL -DCONDITION_HANDLING=1   -DNT_INST=0 -DWIN32=100 -D_NT1X_=100 -DWINNT=1 -D_WIN32_WINNT=0x0501 /DWINVER=0x0501 -D_WIN32_IE=0x0603    -DWIN32_LEAN_AND_MEAN=1 -DDEVL=1 -DDBG=1 -D__BUILDMACHINE__=WinDDK -DFPO=0  -DNDEBUG -D_DLL=1      /c /Zl /Zp8 /Gy /Gm- -cbstring /W3 /WX /Gz  /GX-  /GR- /GF /GS /G6 /Ze /Gi- /QIfdiv- /hotpatch -Z7 /Od /Oi  /Oy-   -FIC:\WINDDK\inc\wxp\warning.h   .\hello.c 
    1>hello.c
    1>c:\DD\hello.c(16) : error C2065: 'DWORD' : undeclared identifier
    1>c:\DD\hello.c(16) : error C2146: syntax error : missing ';' before identifier 'proc'
    1>c:\DD\hello.c(16) : error C2144: syntax error : '<Unknown>' should be preceded by '<Unknown>'
    1>c:\DD\hello.c(16) : error C2144: syntax error : '<Unknown>' should be preceded by '<Unknown>'
    1>c:\DD\hello.c(16) : error C2143: syntax error : missing ';' before 'identifier'
    1>c:\DD\hello.c(16) : error C2065: 'proc' : undeclared identifier
    1>
    1>Stop.
    Compiling  c:\dd directory ********************
    100>'nmake.exe /nologo BUILDMSG=Stop. -i NTTEST= UMTEST= NOLINK=1 NOPASS0=1 386=1'
    100>BUILDMSG: Processing c:\dd
    100>cl -nologo -Ii386\ -I. -IC:\WINDDK\inc\mfc42 -I%BUILD%\inc -Iobjchk_wxp_x86\i386 -IC:\WINDDK\inc\wxp -IC:\WINDDK\inc\wxp -IC:\WINDDK\inc\ddk\wxp -IC:\WINDDK\inc\ddk\wdm\wxp -IC:\WINDDK\inc\crt -D_X86_=1 -Di386=1  -DSTD_CALL -DCONDITION_HANDLING=1   -DNT_INST=0 -DWIN32=100 -D_NT1X_=100 -DWINNT=1 -D_WIN32_WINNT=0x0501 /DWINVER=0x0501 -D_WIN32_IE=0x0603    -DWIN32_LEAN_AND_MEAN=1 -DDEVL=1 -DDBG=1 -D__BUILDMACHINE__=WinDDK -DFPO=0  -DNDEBUG -D_DLL=1      /c /Zl /Zp8 /Gy /Gm- -cbstring /W3 /WX /Gz  /GX-  /GR- /GF /GS /G6 /Ze /Gi- /QIfdiv- /hotpatch -Z7 /Od /Oi  /Oy-   -FIC:\WINDDK\inc\wxp\warning.h   .\hello.c 
    100>hello.c
    100>c:\DD\hello.c(16) : error C2065: 'DWORD' : undeclared identifier
    100>c:\DD\hello.c(16) : error C2146: syntax error : missing ';' before identifier 'proc'
    100>c:\DD\hello.c(16) : error C2144: syntax error : '<Unknown>' should be preceded by '<Unknown>'
    100>c:\DD\hello.c(16) : error C2144: syntax error : '<Unknown>' should be preceded by '<Unknown>'
    100>c:\DD\hello.c(16) : error C2143: syntax error : missing ';' before 'identifier'
    100>c:\DD\hello.c(16) : error C2065: 'proc' : undeclared identifier
    100>
    100>Stop.
    Compile errors: not linking c:\dd directory ********************
    

    Ich kompiliere den Treiber mit 'build' im 'Windows XP Checked Build Environment'. Hab dazu zwei weitere Dateien in meinem Verzeichnis (in dem der Sourcecode 'hello.c' liegt) erstellt:

    1. MAKEFILE
    sieht so aus:

    !INCLUDE $(NTMAKEENV)\makefile.def
    

    2. SOURCES
    sieht so aus:

    TARGETNAME = hello
    TARGETPATH = obj
    TARGETTYPE = DRIVER
    
    INCLUDES   = %BUILD%\inc
    LIBS       = %BUILD%\lib
    
    SOURCES    = hello.c
    

    Sry an die Moderatoren: ich will hier nicht spammen! XD

    Nun ja, ich hoffe das hilft weiter.

    Bei int und char kommen die selben Fehlermeldungen, sollte ich das noch erwähnen...



  • Naja, ich würde sagen es liegt eher daran, dass Du *C* machst und kein C++!!!

    Ändere es mal nach:

    NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath) 
    {
        DWORD proc = 0;
    
            DbgPrint("DriverEntry called\n");
        DriverObject->DriverUnload = &OnUnload;
    
        return STATUS_SUCCESS;
    }
    


  • Jochen Kalmbach schrieb:

    Naja, ich würde sagen es liegt eher daran, dass Du *C* machst und kein C++!!!

    die ms-compiler kennen leider kein C99, sonst würde das auch so gehen, wie er's gemacht hat.
    🙂



  • Hoppla, ich hatte ganz vergessen zu erwähnen, dass ich das bereits ausprobiert habe.
    Scheint den Compiler aber nicht sonderlich zu interessieren - der bleibt stur und liefert mir seine 12 Syntaxerrors als wäre nichts geschehen.

    Diese verklemmten Compiler...XD

    Ich frage mich nur, ob ich nicht eine Library zu inkludieren vergessen habe.
    Denn ich glaube kaum, dass es am Compiler liegt. ^^

    Danke jedenfalls - das mit der C Konvention war schon mal eine sehr gute Idee.

    Schöne Grüße, Xzi-Bit



  • kann es sein, dass die DDK header kein DWORD kennen (hab' lange nichts mehr gemacht damit)?
    versuch mal ULONG statt DWORD
    🙂



  • kann es sein, dass die DDK header kein DWORD kennen (hab' lange nichts mehr gemacht damit)?
    versuch mal ULONG statt DWORD

    !!!! XD
    Mehr sag ich jetzt mal nicht dazu ^^
    außer vielleicht...DANKE, vista !

    Ich hab zwar zuvor schon mit

    typedef ULONG DWORD
    

    rumgebastelt, aber das hat nicht so ganz geklappt. Auch mit einer define auf meine #includes folgend hab ich's probiert - ohne Erfolg.
    Nun habe ich eine

    #define ULONG DWORD
    

    vor die #includes gepackt und er kompiliert mir den Source einwandfrei.

    Danke auch an Sie, Herr Kalmbach.

    Greetings, Xzi-Bit


Anmelden zum Antworten