Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - [C - DDK] problema OBJECT_ATTRIBUTES
Forum - C/C++ - [C - DDK] problema OBJECT_ATTRIBUTES

Avatar
asdasd (Normal User)
Newbie


Messaggi: 8
Iscritto: 01/05/2008

Segnala al moderatore
Postato alle 16:20
Giovedì, 04/09/2008
Ciao a tutt isto scrivendo un driver per Windows in C
Devo creare un oggetto (struttura) di tipo OBJECT_ATTRIBUTES
http://msdn.microsoft.com/en-us/library/aa491657.aspx
facendo normalmente cosi'
Codice sorgente - presumibilmente Plain Text

  1. OBJECT_ATTRIBUTES   miavariabile;



Il problema è che quando ho compilato mi dava un errore
Codice sorgente - presumibilmente C/C++

  1. 'OBJECT_ATTRIBUTES' : illegal use of this type as an expression



Allora, visto che la creazione della variabile mi sembrava giusta, mi son messo a commentare tutto il sorgente per individuare l'errore, lo ho semplificato al massimo ( son rimaste poche righe da compilare) e ho forse scoperto dove è il problema ->

Codice sorgente - presumibilmente C/C++

  1. #include <winddk.h>
  2.  
  3. ...
  4. ...
  5.  
  6. NTSTATUS DriverEntry(PDRIVER_OBJECT DriverObject, PUNICODE_STRING RegistryPath)
  7. {
  8.   ...
  9.  
  10.      __asm
  11.        {
  12.         push    eax
  13.         mov             eax, CR0
  14.         or              eax, NOT 0FFFEFFFFh
  15.         mov             CR0, eax
  16.         pop             eax
  17.       }
  18.  
  19. OBJECT_ATTRIBUTES    TDI_Object_Attr;
  20.  
  21.   ...
  22.  return STATUS_SUCCESS;
  23. }



Compilandolo mi da
Codice sorgente - presumibilmente C/C++

  1. error C2143: syntax error : missing ';' before 'type'


alla linea dove dichiaro la variabile.
Commentando tutto il pezzo con asm{...} non dà errori.

Dove è lo (probabilmente stupido) errore?

PM Quote
Avatar
lorelapo (Ex-Member)
Expert


Messaggi: 355
Iscritto: 28/02/2007

Segnala al moderatore
Postato alle 11:30
Venerdì, 05/09/2008
{} non è un commento è una istruzione complessa, se tu non metti le parentesi il compilatore non può capire dove finisce il codice asm e dove inizia la dichiarazione.


☠ B☮Rn T☮ KiLl! ☮ ¡ HeLp ! ¡ hElP ! ¡ HeLp Me ! ¡ wAnT yOu PlEaSe HeLp Me ? !

Linux Registered User #470459
PM Quote
Avatar
asdasd (Normal User)
Newbie


Messaggi: 8
Iscritto: 01/05/2008

Segnala al moderatore
Postato alle 12:44
Lunedì, 08/09/2008
No non hai capito, lo so benissimo che le graffe su asm non sono un commento.

Ho detto solo che se commentavo il pezzo con asm


/* __asm{
     blabla
     blabla
  }
*/

Non dava errori.

Qualche idea?

Ultima modifica effettuata da asdasd il 08/09/2008 alle 12:45
PM Quote
Avatar
gantonio (Normal User)
Guru^2


Messaggi: 1532
Iscritto: 09/09/2007

Segnala al moderatore
Postato alle 12:15
Martedì, 09/09/2008
Quale compilatore usi?

E' possibile che stai usando la compilazione secondo le regole del C e non del C++.

Prova a dichiarare la tua variabile PRIMA del blocco asm (ovvero PRIMA di qualsiasi istruzione all'interno della tua funzione ...)

Ultima modifica effettuata da gantonio il 09/09/2008 alle 12:21
PM Quote
Avatar
asdasd (Normal User)
Newbie


Messaggi: 8
Iscritto: 01/05/2008

Segnala al moderatore
Postato alle 13:52
Domenica, 14/09/2008
Utilizzo il compilatore standard fornito con il DDK

Ovvero creo i file SOURCES e MAKEFILE, imposto i sorgenti e lancio semplicemente build del DDK

Ho fatto come dici tu, mettendo la dichiarazione delle variabili all'inizio e sembra che funzioni

Solo che decommentando tutto mi da altri errori del genere su altre variabili. Ci sto ancora lavorando, vi faccio sapere. comunque devo cambiare qualche opzione?

Grazie per le risposte.

PM Quote