lesdis
Messages postés403Date d'inscriptionmercredi 19 avril 2006StatutMembreDernière intervention 7 août 2020
-
27 févr. 2008 à 17:56
valblade
Messages postés3Date d'inscriptionsamedi 20 septembre 2003StatutMembreDernière intervention 9 septembre 2008
-
9 sept. 2008 à 19:38
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.
#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");
}
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
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 27 févr. 2008 à 18:33
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>.
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 9 sept. 2008 à 18:14
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
valblade
Messages postés3Date d'inscriptionsamedi 20 septembre 2003StatutMembreDernière intervention 9 septembre 2008 9 sept. 2008 à 18:52
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?
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 9 sept. 2008 à 19:12
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).
cs_jfrancois
Messages postés482Date d'inscriptionvendredi 26 août 2005StatutMembreDernière intervention 5 décembre 20092 9 sept. 2008 à 19:17
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.