ID d’événement Windows

Existe-t-il une plage spécifique d’ID d’événement dans Windows réservée aux développeurs d’applications?

Je travaille sur une application .Net qui va écrire des erreurs dans le journal des événements Windows. Cette application cible en réalité les serveurs et sera exécutée en tant que tâche planifiée par des administrateurs système paranoïaques qui voudront la verrouiller autant que possible (y compris l’exécuter avec un compte de maintenance avec privilèges réduits). L’application ne sera pas officiellement installée – en fait, je ne crée même pas un installateur pour cela; juste un fichier zip avec le fichier .exe et app.config.

Voici le truc: sous Windows, vous avez besoin de privilèges d’administrateur pour créer une source dans le journal des événements de l’application. Comme je ne peux pas compter sur cela et que je ne veux pas que les administrateurs système surmenés aient besoin d’en créer un, j’utilise “Erreur d’application” (utilisé par MS Office) comme solution de secours. (Choisir une meilleure solution de rechange est sur ma liste de tâches, car le bureau n’est pas aussi souvent installé sur les serveurs).

Le problème est que je veux toujours que mes événements se démarquent un peu, plutôt que de simplement se faire passer pour Office. De cette façon, mes administrateurs système peuvent facilement filtrer ces événements dans Event Viewer ou dans l’agrégateur de journaux de leur choix. La meilleure solution que je connaisse actuellement consiste à utiliser l’ID d’événement, mais je suis inquiet au sujet des conflits avec les événements Windows internes, en particulier compte tenu de mon public cible.

J’ai regardé, mais je ne trouve aucune documentation à ce sujet. Alors, y a-t-il une gamme spécifique d’ID d’événement que je devrais utiliser, est-ce que je pourrai utiliser n’importe quoi, ou devrais-je envisager une option complètement différente ici?

Pas vraiment. Au plus haut niveau, vous avez une source d’événement. Chaque source d’événement a ses propres catégories d’événement. Chaque message d’événement est “possédé” par une source d’événement et tombe dans l’une de ses catégories d’événement. Si vous comptez enregistrer vos événements sous la source de l’événement de quelqu’un d’autre, vous ne respectez pas cette convention et vous risquez d’avoir des collisions d’ID d’événement.

D’autre part, les ID d’événement sont structurellement similaires à HRESULT et vous pouvez définir un bit client. Il existe également un champ Code d’installation, mais Microsoft ne fournit qu’une seule fonctionnalité pour les tiers (le rest est réservé). Même si vous vous trompez avec ces bits, vous êtes toujours à la merci du propriétaire de la source de l’événement; Si Microsoft devait écrire quelque chose sur la source d’événements que vous utilisez et définir le bit client ou le code de la fonction (par exemple, des composants non Windows tels qu’Office ou autre), vous risqueriez de tomber dans le même danger de collision. Ou si un autre développeur décide de faire la même chose que vous. Le moyen le plus sûr est de définir votre propre source d’événement.

Il semble que ce soit le noeud du problème

Je suis préoccupé par le conflit avec les événements Windows internes, en particulier compte tenu de mon public cible.

Je ne pense pas que vous ayez à vous inquiéter car les ID d’événement correspondent à une source d’événement spécifique, donc à moins que vous n’utilisiez exactement la même source, les administrateurs ne seront pas dérangés. Par exemple, MS utilise parfois le même identifiant avec différentes sources.

Si vous souhaitez obtenir des informations sur les éditeurs et les identifiants d’événements enregistrés, vous pouvez utiliser Wevtutil. Par exemple, cette liste répertorie les éditeurs.

wevtutil ep 

A partir de cela, vous pouvez obtenir les identifiants d’événement spécifiques utilisés pour un éditeur que vous pouvez utiliser comme suit (Event Log a été utilisé dans cet exemple)

 wevtutil gp Microsoft-Windows-EventLog /ge /gm:true 

Si vous êtes doué chez powershell, je suis sûr que vous pourriez trouver un script pour obtenir tous les identifiants d’événements enregistrés