Probleme SetPropertyValue() (conversion)

pyr0123 Messages postés 48 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 13 juillet 2010 - 29 janv. 2009 à 13:20
pyr0123 Messages postés 48 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 13 juillet 2010 - 3 févr. 2009 à 00:33
Bonjour,

Je code un petit tool qui permet d'afficher l'adresse MAC (et d'autres infos) de ma carte wifi, et donne la possibilité de la changer.
J'utilise :




ManagementObject.GetPropertyValue("MacAddress").ToString();




pour récupérer mon adresse MAC.

Pour la modifier je pense utiliser :

ManagementObject.SetPropertyValue("MacAddress", maNouvelleMac) ;

qui s'utilise, d'apres la MSDN :
publicvoid SetPropertyValue (
string propertyName,
Object propertyValue
)

Mon problème est que je ne vois pas comment transformer une chaine de type "11:22:33:44:55:66" entré par l'utilisateur, en un object comme demandé ?

Merci pour l'aide.

9 réponses

SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
29 janv. 2009 à 13:42
Hello,

Après avoir jeté un petit coup d'oeil sur ce forum, on voit que ça doit être un tableau de byte.
Et si on lit un peu plus loin, tu verras aussi qu'il y a peu de chance que ta carte réseau te permette de le faire.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
0
pyr0123 Messages postés 48 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 13 juillet 2010
29 janv. 2009 à 14:07
Merci pour ta réponse.
J'avais justement vu ce forum, mais comme la réponse n'est pas bonne, je voulais "relancer" le sujet.
Je ne vois pas pourquoi on pourrait changer manuellement l'adresse MAC soit en passant par la base de registre, soit par les propriétés de la carte réseaux, soit meme par des programmes qui font cela, et que là en C# on soit bloqué.. ?
0
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
29 janv. 2009 à 14:32
Hello,

La MAC address n'est pas simplement une clé de registre, c'est une valeur de la carte physique.
Il y a certains moyens de la modifier, ou de faire croire qu'elle a été modifiée, mais ce n'est pas simple, et WMI ne peut le faire que si la carte le permet.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
0
pyr0123 Messages postés 48 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 13 juillet 2010
30 janv. 2009 à 02:13
ok. Sous linux on a besoin d'une petite ligne de commande mais là c'est plus compliqué.. :/

Partons du principe que ma carte le permet, comment puis-je convertir mon adresse en un tableau de byte, puis en un object ?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
pyr0123 Messages postés 48 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 13 juillet 2010
30 janv. 2009 à 02:36
J'ai essayé avec GetBytes() :




newMAC = txtbxMacAddress.Text;
System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
           
o.SetPropertyValue("MacAddress", encoding.GetBytes(newMAC));
o.Put();




Exception : "La référence d'objet n'est pas définie à une instance d'un objet."
Le tableau de byte n'est donc pas la bonne solution..
0
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
30 janv. 2009 à 06:52
Hello,

Non, il faut faire la conversion différemment :

string input = "11:22:33:44:55:66";
byte[] mac = new byte[6];

string[] splittedInput = input.Split(new char[]{':'});

for (int i =0;i<mac.Length;i++)
     mac[i]= int.Parse(splittedInput[i]);

J'ai pas testé, mais ça devair être ok.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
0
SharpMao Messages postés 1024 Date d'inscription mardi 4 février 2003 Statut Membre Dernière intervention 7 juin 2010 69
30 janv. 2009 à 06:56
Re-Hello,

Si le but est de développer ton propre programme de changem,ent d'adresse mac, essaie comme ça.

Par contre, si tu veux juste la changer, quel que soit le moyen, essaie avec macshift.
Je ne l'ai pas essayé personnellement, mais ça à l'air pas mal.

Amicalement, SharpMao

"C'est pas parce qu'ils sont nombreux à avoir tort qu'ils ont raison!"
(Coluche / 1944-1986 / Pensées et anecdotes)
0
pyr0123 Messages postés 48 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 13 juillet 2010
30 janv. 2009 à 11:29
Merci SharpMao.
Oui je voudrais créer mon propre mac changer.
Dans ton code il faut juste rajouter le cast :
    mac[i]= (byte)int.Parse(splittedInput[i]);
sinon il compile pas.

Mais au final :/ j'ai toujours la NullReferenceException sur le SetPropertyValue() "La référence d'objet n'est pas définie à une instance d'un objet."
0
pyr0123 Messages postés 48 Date d'inscription lundi 28 juillet 2003 Statut Membre Dernière intervention 13 juillet 2010
3 févr. 2009 à 00:33
up :/
0
Rejoignez-nous