Quels sont les caractères valides pour les clés de Registre et valuenames?
Plus précisément, quelle est la source de référence pour l'information?
Cela peut ressembler à un non-programmation de la question, mais j'ai besoin de savoir si un chemin d'accès du registre de la fed de mon code contient une expression régulière ou non. J'ai décidé que la meilleure façon de le faire est de supposer que toute occurrence d'un caractère non valide (comme '*') signifie une recherche générique.
- Il dépend. Ce lien vous sera utile pour vous: en.wikipedia.org/wiki/Windows_Registry
Vous devez vous connecter pour publier un commentaire.
Pour les clés et les noms de valeurs, consultez la page MSDN sur La Structure de la base de Registre. En particulier:
Valeur de registre types sont expliqués dans détails sur MSDN ici, dans le cas où vous avez besoin de connaître les valeurs admissibles.
Pour toutes les choses de Windows, MSDN doit être la source de référence -- l'article sur Registre De La Taille De L'Élément De Limites implique Unicode est bon et La Structure de la base de Registre dit que la barre oblique inverse et les caractères non-imprimables sont interdits dans les noms de clé. Les valeurs ne doivent être entièrement les caractères imprimables.
Juste fait une expérience avec Windows 7 registre: par programme la création d'un nom de clé avec l'01 Hex ASCII(SOH) caractère devant le mot 'TEST' (en Delphi, qui est la chaîne de caractères: #1'Test'). C'est quelque chose que REGEDIT ne vous permettra pas de le faire en tapant - même avec ALT-Clavier opérations.
Elle a permis non seulement de créer de la clé, il a montré la clé dans REGEDIT comme ayant une "échelle" de l'espace où le #1 caractère résidé.
De copier et de coller cette nouvelle sous-clé nom dans TEXTPAD m'a permis de vérifier qu'il est en effet toujours un #1 caractère.
Je n'ai jamais lu nulle part que le #1 est considérée comme "imprimable", mais dans Windows autre chose que de l'00 Hex peut être mis dans une chaîne d'impression et littéralement tout ce qui peut être envoyé à une imprimante, donc je suppose que la MSDN déclaration au sujet de cette limitation est un oxymore: parce que dans Windows étant un caractère implique d'être imprimable, ergo caractère non imprimable devient ...bien, pas de sens.
Tout en vous ne peut pas type que le n ° 1 de caractères directement dans REGEDIT comme un keyname (à l'aide de la touche ALT-clavier-numéro de méthode d'entrée), vous peut néanmoins coller de TEXTPAD à REGEDIT dans le cadre d'un renommez-le fonctionnement. REGEDIT va encore se plaindre si vous vous collez à renommer l'autre par les pairs de la sous-clé pour votre original parce que la " clé spécifié existe déjà.
Fait intéressant, j'ai aussi expérimenté le caractère #256 (qui n'est plus en ASCII, mais est en théorie une Unicode Widechar, mais pas nécessairement considéré comme un "imprimable" si l'une des pièces de la saisie, de stockage et de sortie des mécanismes de la rejeter).
Alors que j'ai pu créer une telle clé de la programmation, et de voir un étrange " A " dans REGEDIT, il est devenu un peu moins fiable en couper-coller. Je suppose que les opérations de presse-papiers et les interactions avec les différentes applications de faire ce genre de chose très douteuse pratique depuis TEXTPAD, par exemple, peut-être de faire des hypothèses quant à savoir si vous étiez le collage de caractères (octets ou de caractères larges qui ne sont pas tout à fait correspondre à ce que REGEDIT mettre dans le presse-papiers - et vice-versa. Si le code derrière ces opérations sont juste attendre des chaînes ANSI ou UTF-16 de Large-Cordes, et il nous est donné quelque chose de différent, y compris l'ordre des octets des différences et de l'UTF-8 ou similaires, les différences qu'ils ne s'y attendaient pas, alors les choses sont très susceptibles de se tromper.
Enfin, j'ai expérimenté avec une tentative d'injecter un widechar avec l'ordre 0FFFF hex. Qui n'a pas vraiment donné d'présence visuelle du personnage dans REGEDIT - comment "non imprimables", c'est que, alors?. Mais le nom n'inclut pas le invisible caractère. J'ai confirmé ce que le fait d'essayer de créer un distincte par les pairs de la sous-clé dans REGEDIT sans l'offenser caractère et comme un résultat obtenu en ce que visuellement ressemblait à deux clés identiques!
Donc en résumé: Il semble que vous pouvez mettre littéralement n'importe quel caractère dans un nom de sous-clé tant qu'il n'est pas un '\'. Mais il n'est probablement pas une très bonne idée de le faire. Et je pense que le terme "non imprimables" dans Windows en général s'applique uniquement à 00 hex - et c'est parce qu'il est généralement utilisé comme un terminateur de chaîne et est donc un peu difficile à "envoyer" par le biais de l'API du registre en tant que caractère!
Ce qui est très inquiétant, c'est la capacité que de ce fait, les pirates pour semer la confusion et induire en erreur. Vous pourriez littéralement créer toute une série de sous-clés de registre qui semblent n'avoir pas de nom à tous et ne peuvent être valablement utilisées par les applications, pas des humains. Oui, vous pouvez le faire avec de l'espace-personnages, mais certains caractères unicode (comme FFFFh) n'ont pas de largeur, et vous pouvez utiliser n'importe quel nombre d'entre eux ensemble pour créer un unique et invisible nom, ou de parties dans un nom! Cela les rend presque impossible à détecter sans l'aide d'un laborieux couper-coller, ou un outil automatisé. Dans REGEDIT, ils ont tous l'air d'un nom identique ou, en fait, sans nom, des clés.