Vous ne trouvez pas de réponse à votre problème ? Alors posez la question dans le forum. Souvenez-vous qu'il n'y a jamais de question bête, mais rester dans l'ignorance parce que l'on n'ose pas poser une question, ça c'est une erreur !

Sujet : KMDF : Problème de compilation [ Système / Noyau ] (lesdis)

mercredi 27 février 2008 à 17:56:52 | KMDF : Problème de compilation

lesdis

Bonjour,

A l'aide du WinDDK, j'essai de programmer un driver générique et surtout de comprendre comment tout cela fonctionne.

Malheureusement et ce qui était prévisible, le compilateur me ressort des erreurs.


[Code]
#include <ntddk.h>
#include <wdf.h>

NTSTATUS
  MyDriverDeviceAdd (
    IN WDFDRIVER Driver,
    IN PWDFDEVICE_INIT DeviceInit
    );
 
VOID
  MyDriverUnload (
    IN WDFDRIVER  Driver
    );

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


    DbgPrint("Lancement du driver\n");

    WDF_DRIVER_CONFIG_INIT(&config,MyDriverDeviceAdd);

    config.EvtDriverUnload = MyDriverUnload;

// Erreur de compilation sur cette fonction
    status = WdfDriverCreate(
    DriverObject,
    RegistryPath,
    WDF_NO_OBJECT_ATTRIBUTES,
    &config,
    WDF_NO_HANDLE
    );

    return STATUS_SUCCESS;
}

NTSTATUS MyDriverDeviceAdd(Driver,DeviceInit){
DbgPrint("Nouveau device conecté");
return STATUS_SUCCESS;
}

VOID MyDriverUnload(Driver){
DbgPrint("unload driver");
}

[/Code]


Lorsque je commente la fonction WdfDriverCreate, cela compile très bien.
Lorsque je "décommente", le compilateur me sort une erreur de lien :

error LNK2001: unresolved external symbol _WdfFunctions
error LNK2001: unresolved external symbol _WdfDriverGlobals



J'ai beau regarder les exemples présent dans le winddk et chercher sur le  net, je ne trouve aucune référence à cette erreur.
J'en appel donc à la communauté pour trouver une piste et régler ce petit soucis

Merci d'avance,

Bonne Prog

mercredi 27 février 2008 à 18:33:54 | Re : KMDF : Problème de compilation

jfrancois

Bonjour,

Ce n'est pas le compilateur qui sort des erreurs mais l'éditeur de liens (error LNK = error LiNK editor) c'est à dire le programme qui réunit "tous les bouts de codes" pour créer l'exécutable final.
 
En l'occurence ici l'éditeur de liens ne trouve pas le code des fonctions "_WdfFunctions" et "_WdfDriverGlobals" parce qu'il manque dans le projet la librairie qui les contient (du genre "wdf.lib" par exemple). Cette librairie "wdf.lib" (ou autre !!!) peut être ajoutée dans le projet ou dans le code avec un #pragma comment(lib,"wdf.lib") après le #include <wdf.h>.

Jean-François


mercredi 27 février 2008 à 18:36:52 | Re : KMDF : Problème de compilation

jfrancois

Complément !!!

Ce n'est pas forcément du code que l'éditeur de liens ne trouve pas ! Ca peut être aussi des données !

Jean-François


mardi 9 septembre 2008 à 17:59:00 | Re : KMDF : Problème de compilation

valblade

Bonjour,

J'ai un peu le même souci, j'utilise le WDK, et j'aimerais compiler un petit driver.

Néanmoins, j'ai un undefined reference sur ZwQuerySystemInformation... j'inclus pourtant wdm.h...

Quelqu'un aurait-il une idée?

Merci d'avance.

mardi 9 septembre 2008 à 18:14:09 | Re : KMDF : Problème de compilation

jfrancois

Bonjour,

... Néanmoins, j'ai un undefined reference sur ZwQuerySystemInformation... j'inclus pourtant wdm.h. ...

Celà n'a rien à voir ! Le fichier d'entête wdm.h contient classiquement des descriptions (fonctions, classes, constantes, ...); il est utilisé par le compilateur. Ce qui manque c'est le fichier utilisé par le linker et qui contient le code de la fonction ZwQuerySystemInformation ! c'est à dire le fichier d'extension lib.

Jean-François


mardi 9 septembre 2008 à 18:52:37 | Re : KMDF : Problème de compilation

valblade

si je comprends bien, tu veux que j'ajoute un #pragma comment(lib,"ntdll.lib")

J'ai testé cela ne marche pas.

Par contre, j'ai vu sur certain extraits de code qu'une déclaration du prototype de ZwQuerySystemInformation est faite avant...



NTSYSAPI
NTSTATUS
NTAPI ZwQuerySystemInformation(
                        IN ULONG SystemInformationClass,
                        IN PVOID SystemInformation,
                        IN ULONG SystemInformationLength,
                        OUT PULONG ReturnLength);

Là par contre, ca compile (pas encore testé si cela marche), mais ca sens le hack pour eviter de faire crier le linker..
Sinon, je commence à peine le dev de driver, à quoi correspondent les macro IN et OUT?

Merci




mardi 9 septembre 2008 à 19:12:31 | Re : KMDF : Problème de compilation

jfrancois

1) Si le prototype est ajouté avant forcément ça compile sans problème mais ça n'a toujours aucun rapport avec le linker qui se contrefiche totalement du code source ! La seule chose qui l'intéresse c'est qu'on lui fournisse le fichier lib qui contient le code de la fonction !!!

2) En cherchant ZwQuerySystemInformation() sur Google, je suis tombé sur MSDN qui annonce que cette fonction n'est plus suivie (ZwQuerySystemInformation may be altered or unavailable in subsequent versions of Windows. Applications should use the alternate functions listed in this topic). C'est peut-être pour ça qu'elle n'est pas trouvée dans ntdll.lib. Il est dit aussi qu'il faut l'utiliser en la chargeant explicitement (This function has no associated import library. You must use the LoadLibrary and GetProcAddress functions to dynamically link to Ntdll.dll) : il n'y a donc pas de fichier lib contenant le chargement implicite.

3) IN et OUT sont des macros qui ne génèrent rien. Elles sont là à titre indicatif pour signaler si le paramètre qui suit est en entrée (IN) ou en sortie (OUT) ... ou optionel (OPTIONAL).

Jean-François


mardi 9 septembre 2008 à 19:17:36 | Re : KMDF : Problème de compilation

jfrancois

Complément ! Le fichier lib contient le code de la fonction si c'est une bibliothèque statique ou le code de chargement implicite de la fonction si elle est disponible en DLL.

Jean-François


mardi 9 septembre 2008 à 19:38:16 | Re : KMDF : Problème de compilation

valblade

Merci pour ton aide, mais le simple ajout du prototype a suffit à faire fonctionner mon driver.

Merci encore pour ton aide.



Cette discussion est classé dans : config, driver, status, ntstatus, wdf


Répondre à ce message

Sujets en rapport avec ce message

URGENT : Infos sur " Device Driver Kits (DDK et SDK) "??????? [ par irokoy ] Je cherche a developper un driver de port serie virtuel.D'apres les infos que j'ai trouve, il faut creer un fichier ".vxd" qui va gerer le flux de don Comment ça marche un driver ? [ par Xaviou ] Salut.Je suis à la recherche d'un code permettant de créer un driver pour une imprimante "virtuelle".Je cherche an fait à créer une telle imprimante p pb initialisation/modification de variables ds une boite de dialogue [ par neub ] Salut,j'ai un leger ennui qui devrait etre certainement simple à resoudre (je suis debutant en vc++):je developpe un module de trajectographie. Ds mon Status Process d une application windows [ par Trinita16 ] est il possible de savoir le status d une application qui tourne en tache de fond sous windows ? je m explique, je voudrais savoir si mon application config.msi [ par coockiesch ] Hello! J'ai créé un exe et créé avec visual studio un installateur. Je peux installer mon prog sans problême mais lorsque je veux le désinstaller j'ob driver sous windows [ par punch95 ] j'ai besoin d'un exemple de driver sous windows car je veux faire un driver pour une liaison i2c merci de me l'envoyer .oliviervernet95@hotmail.com un exemple de driver de webcam [ par ludou ] ben voilà je voulais juste savoir si quelqu'un pouvait me donner un exemple de code tout simple de driver de webcam ou un site qui en propose.bien à v win2000 & ansi.sys [ par anotherfrog ] salut,eske qlq'un sait comment charger le fichier ANSI.SYS sous WINDOWS 2000 PRO ?J'ai un prog fait en c sous win98 qui utilise les séquences d'échapp Quelle fonction permet de rechercher automatiquement et d'indiquer le chemin complet d'un fichier? [ par Benwillis ] Par exemple, j'ai besoin d'indiquer ou se trouve un fichier ini pour lire dedans mais j'aimerai qu'il le trouve à chaque fois ss lui dire où il se tro MciSendString Status [ par Xentor609 ] Salut,J'utilise la commande :char status[5];mciSendString("status cdaudio mode",(LPSTR)status,sizeof(status),NULL);pour connaitre l'etat du lecteur cd


Nos sponsors

Sondage...

CalendriCode

Juillet 2009
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
2728293031  

Consulter la suite du CalendriCode

Téléchargements

Logiciels à télécharger sur le même thème :

Comparez les prix Nouvelle version

Photothèque Nouveau !



Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés
Temps d'éxécution de la page : 0,437 sec

Google Coop CodeS-SourceS Google Coop CodeS-SourceS


Certaines images présentes sur le site (notament certains avatars) sont issues des collections IconShock, donc si vous souhaitez utiliser ces icons vous devez les acheter, ne les copiez pas et ne utilisez pas dans vos sites et applications sans les avoir commandé.