Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    18

    [c-c++] Funzione Kernel ZwCreateFile per realizzazione Driver

    Salve
    sto costruendo un driver e non riesco a creare un file a livello kernel utilizzando la funzione

    ZwCreateFile all'interno dell'inizializzazione del driver.Questa è la parte che interessa la

    creazione

    Qualcuno mi aiutiiiii!!!

    Grazie mille !!!


    //**********************VARIBILI GLOBALI PER LA CREAZIONE DEL FILE****************************
    NTSTATUS NtStatus = STATUS_SUCCESS;
    PVOID pFileObject= NULL;
    PNDIS_BUFFER *pCurrentBuffer = NULL;
    PUINT nBufferCount = NULL;
    PUINT TotalPacketLength = NULL;
    HANDLE hfile;
    OBJECT_ATTRIBUTES ObjectAttributes;
    IO_STATUS_BLOCK StatusBlock;
    UNICODE_STRING pathname ;
    ULONG Length;
    //************************************************** *******************************************




    //************************************************** ***ZwCreateFile****************************

    RtlInitUnicodeString(&pathname,L"C:\\InfoPacket.da t"); //Inizializziamo stringa Unicode

    InitializeObjectAttributes(&ObjectAttributes,&path name,OBJ_CASE_INSENSITIVE|OBJ_KERNEL_HANDLE,

    NULL, NULL) //Inzializziamo struttura

    NtStatus = ZwCreateFile(
    &hfile,
    GENERIC_WRITE,
    &ObjectAttributes,

    &StatusBlock, //Creazione del File
    NULL,
    FILE_ATTRIBUTE_NORMAL,
    0,
    FILE_OVERWRITE_IF,
    FILE_SYNCHRONOUS_IO_NONALERT,
    NULL,
    0
    );


    if(NT_SUCCESS(NtStatus))

    NtStatus = ObReferenceObjectByHandle(hfile,GENERIC_WRITE, NULL,KernelMode,pFileObject, NULL);


    else

    ZwClose(hfile);







    //************************************************** *******************************************

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    E qual e' il problema?

    Errori? Status?

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    18
    Il problema e che non mi crea il file e mi da come status il codice C000003B

    Grazie

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    L'errore

    STATUS_OBJECT_PATH_SYNTAX_BAD

    riguarda la sintassi del nome del file.
    Dovrebbe essere

    RtlInitUnicodeString(&pathname,L"\\DosDevices\\c:\ \InfoPacket.dat");

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    18
    Ho provato con DosDevices ma sto lavorando sotto Windows Xp dunque ho messo Device e l'errore non me lo da più mi mette invece l'errore C000003A non so come ricavare in base al codice l'errore ma credo sia dovuto al fatto che la scheda di rete non è collegata ad una LAN dato che il driver funziona solo cosi.
    Dunque proverò a collegarmi con la LAN e vedere se funziona tutto.Se tu sai che non è quello l'errore saresti gentile da dirmi cosa è? Grazie per Tutto!!!!

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    C000003A equivale a STATUS_OBJECT_PATH_NOT_FOUND

    Non devi utilizzare Devices ma DosDevices

    Perche' lo hai cambiato? Che c'entra il fatto che hai XP?

  7. #7
    se usi Device, credo, che dovresti dare la path completa relativa alla partizione

    \Devices\Harddisk0\Partition0\InfoPacket.dat

    però non potresti essere sicuro che sia "realmente" C: ... dovresti andare a implementare dei check aggiuntivi

    invece se fai come ti ha detto oregon sei matematicamente certo che vai a scrivere in C:

    quando passi percorsi alle funzioni che lavorano in kernel-mode devi passare percorsi relativi ai devices che sono validi per l'object manager di windows altrimenti se la prende a male

    cmq ... un consiglio ... ti conviene vedere qual'è l'unità sulla quale sta il sistema operativo per essere certo di dove vai a scrivere ... non so perché stai sviluppando un driver, comunque potrebberò esserci più sistemi operativi sul disco e quindi andresti a scrivere su una unità che non è quella del tuo sistema operativo (non so se questo può essere importante per te però è sempre meglio prevenire che curare)

    ---

    oregon, scusa la domanda, ma come converti il codice nel corrispondente messaggio d'errore? all'interno del ddk potresti dirmi dove trovo l'elenco dei messaggi d'errore?

    danka

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Originariamente inviato da daniele_dll
    oregon, scusa la domanda, ma come converti il codice nel corrispondente messaggio d'errore? all'interno del ddk potresti dirmi dove trovo l'elenco dei messaggi d'errore?
    Figurati ... cerca nel file ntstatus.h ... non e' nel ddk ma semplicemente tra gli include del tuo compilatore (insomma, del sdk) ...

  9. #9
    Originariamente inviato da oregon
    Figurati ... cerca nel file ntstatus.h ... non e' nel ddk ma semplicemente tra gli include del tuo compilatore (insomma, del sdk) ...
    ah ok

    danka

  10. #10
    Utente di HTML.it
    Registrato dal
    Nov 2005
    Messaggi
    18
    il fatto è che se metto DosDevice mi si pianta il pc con una schermata blu riguardante problemi di indirizzamento della memoria e devo riavviare il pc..

    Per Danka.. Grazie per il consiglio il comunque ho solo windows xp installato!

    Grazie a tutti!!!

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.