BUG : WnetUseConnection renvoie le message d'erreur ERROR_ALREADY_ASSIGNED dans Windows 2000

Ancien nº de publication de cet article : F257298
Cet article a été archivé. Il est proposé « en l'état » et ne sera plus mis à jour.
Symptômes
Sous Windows 2000, un appel vers WNetUseConnection() avec le membre lpLocalName de la structure NETRESOURCE défini sur " NULL " et dwFlags défini sur " CONNECT_REDIRECT " renvoie l'erreur 85 " ERROR_ALREADY_ASSIGNED ". Ce problème affecte également ShellExecuteEx() lors d'une utilisation en conjonction avec l'indicateur SEE_MASK_CONNECTNETDRV.
Cause
La fonction ne choisit pas le périphérique local correct pour la redirection.
Résolution
Pour résoudre ce problème, procurez-vous le dernier service pack Windows 2000. Pour plus d'informations, consultez l'article suivant dans la Base de connaissances Microsoft :
260910 Procédure pour obtenir le dernier service pack Windows 2000
Statut
Microsoft a confirmé l'existence de ce bogue dans les produits Microsoft répertoriés dans la section "Liste des produits concernés par cet article".

Microsoft a confirmé l'existence de ce problème dans les produits Microsoft répertoriés dans la section "Liste des produits concernés par cet article".

Ce problème a été corrigé dans le Service Pack 1 pour Windows 2000.
Plus d'informations
D'après la documentation de WNetUseConnection() disponible sur MSDN, si la valeur CONNECT_REDIRECT est définie dans le paramètre dwFlags et si lpLocalName est configuré sur " NULL ", la fonction devrait choisir un périphérique local pour la redirection et renvoyer le nom du périphérique dans le paramètre lpAccessName. Sous Windows 2000, la fonction WNetUseConnection() échoue cependant et entraîne l'erreur " ERROR_ALREADY_ASSIGNED ".

Étapes à suivre pour reproduire ce comportement

Utilisez l'extrait de code suivant pour reproduire le problème :
 #include <Windows.h> #include <stdio.h> #include <winnetwk.h>int main(void){   DWORD       nRet;    NETRESOURCE nr;   LPTSTR      buff;   DWORD       buffsize = 256;   nr.lpLocalName  = NULL;   nr.lpRemoteName = (LPSTR) GlobalAlloc(GPTR, 256);   buff	           = (LPSTR) GlobalAlloc(GPTR, 256);	   nr.dwType = RESOURCETYPE_DISK;   lstrcpy(nr.lpRemoteName, "\\\\mycomputer\\testshare");   nr.lpProvider = NULL;   nRet = WNetUseConnection(  NULL,                              &nr,  //connection details                               NULL,                              NULL,                               CONNECT_REDIRECT,                                buff,                              &buffsize,                              0                               );  if (nRet != 0)      printf("La fonction a renvoyé l'erreur %d \n", nRet);  else {     printf("Renvoi de la fonction réussi \n");     printf("AccessName %s \n", buff); }  return 0; };
Propriétés

ID d'article : 257298 - Dernière mise à jour : 02/10/2014 05:45:03 - Révision : 5.0

  • Microsoft Windows 2000 Advanced Server
  • Microsoft Windows 2000 Server
  • Microsoft Windows 2000 Professionel
  • kbnosurvey kbarchive kbbug kbfix kboswin2000 kbsdkplatform kbwin2000sp1fix kbapi kbnetwork kbwin2000presp1fix kbwnet kbgrpnet kbsdkwin32 KB257298
Commentaires