Bonjour a tous,
Mon problème parait simple mais je n'aie pas trouvé de réponse, en tout cas pas qui répondent a ma problématique
Pour simplifier les choses, je souhaite avoir une fonction, que j'appelle avec comme paramètres l'interface réseaux(ou l'ancienne IP) et une nouvelle IP Masque de sous réseaux et Gateway. Cette fonction doit m?affecter immédiatement cette IP a cette carte réseaux. Je veux être bloqué durant cette affectation.
Et les points qui me posent problème :
- Je veux changer d'IP et non pas en affecter une supplémentaire
- Je ne veux pas redémarrer
- Cela doit marcher sous XP, Vista et Seven
Pour le langage j'ai posté en C, mais si c'est du C++ je m?arrangerais sans problème .
Je possède sous XP une solution qui me convient :
APP_DWORD ChangeIpAddress(APP_DWORD dwOldIpAddr,APP_DWORD dwNewdIpAddr,APP_DWORD dwSubnetMask,APP_DWORD dwGatway)
{
APP_DWORD Error;
HINSTANCE HndLib;
PSETADAPTERIPADDRESS SetAdapterIpAddress;
APP_CHAR AdapterGUID[50];
/*First : find IP AdapterGUID*/
OS_MEMSET(AdapterGUID,0 , 50);
GetGuuiInterfaceName(AdapterGUID, dwOldIpAddr);
Error = ERROR_NOT_SUPPORTED;
/* Chargement de la DLL */
HndLib = (HINSTANCE)LoadLibrary(TEXT("iphlpapi.dll"));
if(HndLib != NULL)
{
/* Récupération de l'adresse de la procédure */
SetAdapterIpAddress = (PSETADAPTERIPADDRESS)GetProcAddress(HndLib,"SetAdapterIpAddress");
if(SetAdapterIpAddress != NULL)
{
/* Appel de la procédure */
Error = SetAdapterIpAddress(AdapterGUID,0,dwNewdIpAddr,dwSubnetMask,dwGatway);
}
}
return Error;
}
Cette solution a deux problème : elle utilise une fonction non documentée de Windows (ce qui n'est pas beau !) et sous Seven (je n'ai pas essayé sous Vista) elle ajoute une IP au lieu de me la changer, de plus elle n'est pas bloquante .
Les solutions que j'ai commencé à trouver sur le Net :
- La registry : problème cela demande un reboot à priori
- WMI mais ca a l'air un peux compliquer a mettre en place juste pour cela. De plus je voudrais éviter d'avoir à installer un SDK supplémentaire. Et je n'ai trouver aucun exemple simple (tuto tres basique du style: tu click la )
- Appeler netsh : crée un process est attendre qu'il ait finit. Le problème c'est que la je dois devenir administrateur. Or sous Seven cela signifie une boite de dialogue se que je ne veux pas ! (ou alors elle doit n'apparaitre qu'une seul foi pour toute l'application, même âpres des reboot PC).
Juste pour rassurer : non ce n'est pas un virus si je souhaite empêcher la fenêtre de dialogue a chaque démarrage de mon application c'est que celle-ci peut être placée dans le menu démarrer et se trouver sur des pc sans écran.
Désolé ce message st un peut long mais je voulais faire gagner du temps en montrant les piste déjà abordées .
Merci d'avance