PC SOFT

FOROS PROFESIONALES
WINDEVWEBDEV y WINDEV Mobile

Inicio → WINDEV Mobile 2024 → Utilisation de "GetDeviceUniqueID", à la place de "SysNumSérie()"
Utilisation de "GetDeviceUniqueID", à la place de "SysNumSérie()"
Iniciado por Yves, 09,ene. 2007 08:35 - 14 respuestas
Publicado el 09,enero 2007 - 08:35
Bonjour, Windev 11 intègre une nouvelle fonction "SysNumSérie()", permettant de récupérer le numéro de série du Pocket.
Cependant, pour fonctionner cette instruction a besoin que l'executable et la dll associés soient signés. Faire signer (par un organisme spécialisé) ses dll et exécutable peut être lourd et cher, surtout en période de test.
J'utilise donc en remplacement la nouvelle API de Windows Mobile 5 "GetDeviceUniqueID" pour fournir un numéro unique par device.

Mais cela ne fonctionne pas telle que je l'utilise (voir code).

Des lien en C et Vb pour vous aider éventuellement:
http://msdn2.microsoft.com/en-us/library/ms893522.aspx
http://www.peterfoot.net/GetDeviceUniqueIDForVB.aspx
http://blogs.msdn.com/windowsmobile/archive/2006/01/09/510997.aspx

Cela devrait intéresser nombre d'autres développeurs.

Protocole de reproduction :
********************************************
bufVarIn est un Buffer
bufVarIn="@^!MyAppName!^@"

bufVarOut est un Buffer sur 40
VarOut est un entier sans signe sur 4 octets
VarOut = Taille(bufVarOut)

Result est un entier

Result = API("coredll.dll","GetDeviceUniqueID",bufVarIn,Taille(bufVarIn),1,bufVarOut,VarOut)

Info(Result) //renvoie toujours le même code quelquesoit "bufVarIn"??
Info(bufVarOut) // ne renvoie rien ??
Info(bufVarOut[[1 A 9]]) // ne renvoie rien??
*************************************
Une âme charitable, spécialiste de l'utilisation des API par Windev Mobile peut elle m'indiquer l'erreur que je fait dans ce code ?
Merci
Publicado el 09,enero 2007 - 09:40
Salut,

Je te conseille d'utiliser le code suivant :

http://codewindev.com.free.fr/fichesource.php…


A+
Adrien
http://codewindev.com.free.fr
Publicado el 09,enero 2007 - 11:36
Merci de cette réponse mais CPUDLL.DLL ne fonctionne pas avec Windows mobile 5 version smartphone.
Cela fonctionne parfaitement avec Windows Mobile 5 version pocket, 2003 et 2002, mais renvoie une erreur avec la version smartphone.
GetDeviceUniqueID de coredll.dll ne renvoie pas d'erreur sous smartphone (et donc est utilisable) mais apparemment je l'utilise mal.

Merci quand même
Publicado el 09,enero 2007 - 23:24
Bonsoir,

Bonjour, Windev 11 intègre une nouvelle fonction "SysNumSérie()",
permettant de récupérer le numéro de série du Pocket.
Cependant, pour fonctionner cette instruction a besoin que l'executable et
la dll associés soient signés. Faire signer (par un organisme spécialisé)
ses dll et exécutable peut être lourd et cher, surtout en période de test.
J'utilise donc en remplacement la nouvelle API de Windows Mobile 5
"GetDeviceUniqueID" pour fournir un numéro unique par device.

Mais cela ne fonctionne pas telle que je l'utilise (voir code).

Des lien en C et Vb pour vous aider éventuellement:
http://msdn2.microsoft.com/en-us/library/ms893522.aspx
http://www.peterfoot.net/GetDeviceUniqueIDForVB.aspx
http://blogs.msdn.com/windowsmobile/archive/2006/01/09/510997.aspx

Cela devrait intéresser nombre d'autres développeurs.

Protocole de reproduction :
********************************************
bufVarIn est un Buffer
bufVarIn="@^!MyAppName!^@"

bufVarOut est un Buffer sur 40
VarOut est un entier sans signe sur 4 octets
VarOut = Taille(bufVarOut)

Result est un entier

Result =
API("coredll.dll","GetDeviceUniqueID",bufVarIn,Taille(bufVarIn),1,bufVarOut,VarOut)

Info(Result) //renvoie toujours le même code quelquesoit "bufVarIn"??
Info(bufVarOut) // ne renvoie rien ??
Info(bufVarOut[[1 A 9]]) // ne renvoie rien??
*************************************
Une âme charitable, spécialiste de l'utilisation des API par Windev Mobile
peut elle m'indiquer l'erreur que je fait dans ce code ?


Il y a au moins un problème : le dernier parametre est un DWORD* donc il
faut faire &VarOut
Et un problème potentiel (Mais je n'ai pas testé donc une erreur est
parfaitement possible et c'est peut-être pas un problème) :
=> bufVarIn="@^!MyAppName!^@"
Je ne suis pas sur que la chaine ne soit pas affectée directement en
unicode. En que ensuite Taille(bufVarIn) ne traite pas la chaine en ansi
(Car c'est un buffer) et renvoie donc une taille de 1 que la fonction rejete
(La documentation parle d'une chaine de taille >=8 au minimum)

Cordialement,
Guillaume.
Publicado el 10,enero 2007 - 12:30
Merci Guillaume,
En mettant le &VarOut, cela ne fonctionne pas mieux. Quand à la taille du buffer, en la rentrant manuellement (15 ou 30), cela ne fonctionne toujours pas, c'est à dire que bufVarOut est toujours vide
Cordialement
Publicado el 11,enero 2007 - 12:27
il y aurait pas une solution tierce qui permettrais de signé "application et DLL" afin de pouvoir utilisé simplement toutes les instructions Windev Mobile ?
Publicado el 11,enero 2007 - 13:31
Pour faire signer un exe ou une dll, on poit passer par un organisme spécialisé. Cela est assez cher (plusieurs centaines d'euros) et relativement laborieux. Le but est d'identifier l'auteur du logiciel dans un but de sécurité. De plus, chaque version doit être signée (Mais je crois que l'on peut acheter des portefeuilles de certificats, un genre de forfait pour un nombre limité).
Bref, c'est loin d'être immédiat et gratuit...
Publicado el 11,enero 2007 - 14:57
merci Yves pour votre réponse, je connaissais en gros le principe de certification...
en effet c'est loin d'être gratuit....et je pense que c'est voulu par divers acteurs tiers.

mais en phase de dévellopement actuellement c'est un frein ->
on ne peut exploité certaines instructions windev mobile systeme qui sont bloqué par cette sécurités coté device.

Comment valider un pilote en dévellopement alors que celui ci est ammené à évolué tant qu il est justement en dévellopement ???? repasser par la case certif à chaque fois ????
impossible...

Il faudrait un outil sous Windev Mobile qui nous permet d'appliquer une "certification dévellopement" afin que pendant le dev et test du pilote on a accès a toutes les ressources systeme (lecture IMEI, lecture SMS...) mise à disposition par windev mobile.
Publicado el 11,enero 2007 - 16:53
C'est sans doute une solution qui serait difficile à mettre en oeuvre, je ne sais pas comment les utilisateurs de Visual Studio ou autre ont contourné le problème.
Parmi les instructions que je n'ai pu utiliser: SysNumSérie(), SysIMEI(), SysMiseEnVeille(), SysRepCarteStockage(), elles nécessitent toutes une signature.
Pour SysNumSérie() si on ne veut pas le numéro de série exact, mais un numéro unique par Pocket PC, l'utilisation de l'API GetDeviceUniqueID serait parfaite (si elle fonctionne, car elle ne nécessite pas de signature).
Pour l'instant j'essaie de la faire fonctionner avec API(), mais toujours sans résultat...

Cordialement
Publicado el 11,enero 2007 - 23:10
pour les dév sous Visual Studio l'explication vient peut etre que le frameworks nécessaire pour l application client est signé "Microsofts"...

je cherche de mon coté, on est un peu pénalisé lors du dév et c'est dommage les instructions sont la pourtant mais dans un sens en "option" !!!
je vous tiens au courant,
CDL Stef
Publicado el 22,enero 2007 - 07:25
on pourrait peut etre faire un exe en vb pour récupérer le numéro IMEI et lancer notre application derriere, faudrai transmettre le numéro IMEI d'une façon laquell je sais pas trop
Publicado el 22,enero 2007 - 09:43
Les exécutables en VB ou VC nécessitant les dll sensibles refusent de tourner si les certificats corrects ne sont pas installés sur la machine.
Cependant, j'ai lu sur un article une possibilité de créer pour ces outils des certificats de test. (article basé sur msdn)

http://www.codeproject.com/useritems/signcode.asp

Je n'ai pas encore essayé de l'appliquer à Windev mobile. Je ne sais pas si c'est possible.
En tout cas, transmettre des infos d'une appli VB vers une appli Windev, pose des problèmes de sécurité (si on ne veut par exemple associer un logiciel à un seul pocket) dans le sens où il ne faut pas que l'on puisse facilement intercepter le message transmis...
Publicado el 22,enero 2007 - 10:08
pour le dev et test je vois qu'une solution de désimlocker le device...
par exemple Orange fournit un outil pour le C500 et C600...
mais cela reste limité...
Publicado el 01,febrero 2007 - 07:55
sandisk propose un sdk qui serait capable de récupérer pas mal d'ID. pour ma part si sa fonctionne je recupérerai l'ID de la MMC et je l'enverai a l'exe windev.
Publicado el 07,febrero 2007 - 07:57
quelqu'un connait sa ?
http://www.componentsource.com/products/sapphire-imei-utility/publisher.html


j'y connait vraiment rien en dll, si qqun reussi a faire quelque chose avec sa prévenez moi.