2013-01-11 2 views
0

J'utilise PREFast pour vérifier la construction de code de pilote pour Windows7. La ligne suivante de codeWDK7: L'utilisation de IoAttachDeviceToDeviceStack donne l'avertissement "La mémoire doit être conservée" dans PREfast

stackDeviceObject = IoAttachDeviceToDeviceStack(deviceObject, PhysicalDeviceObject); 

donne l'avertissement:

warning 28107: The Memory 'deviceObject' must be held when calling 'IoAttachDeviceToDeviceStack'. 

DeviceObject est obtenu avec un appel antérieur à IoCreateDevice. Est-ce que quelqu'un sait ce que cet avertissement signifie et comment s'en débarrasser? L'aide PREfast indique "Une ressource que le programme doit acquérir avant d'appeler la fonction n'a pas été acquise lors de l'appel de la fonction, ce qui fait échouer l'appel de la fonction."

L'exemple que la page d'aide fournit entourages une paire d'appels à ExAcquireResourceLite et ExReleaseResourceLite (ce qui donne cet avertissement) entre les appels à KaEnterCriticalRegion et KaLeaveCriticalRegion, qui obtient ensuite soi-disant débarrasser de l'avertissement, mais je ne sais pas comment appliquer cette information à mon appel à IoAttachDeviceToDeviceStack.

Tout conseil serait apprécié.

Répondre

0

Je crois avoir une réponse à ma propre question. L'appel à IoCreateObject était dans une fonction séparée qui a été appelée à partir de celui-ci. Je pense que cela empêchait PREfast de voir que cette fonction était appelée et que deviceObject était correctement initialisé avant l'appel de IoAttachDeviceToDeviceStack.

J'ai déplacé l'appel IoCreateObject dans la même fonction que IoAttachDeviceToDeviceStack et l'avertissement a disparu.

Merci à tous ceux qui ont passé du temps à lire ceci et à essayer de trouver une réponse.

Questions connexes