IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Discussion :

" KeTickCount " ?


Sujet :

Windows

  1. #1
    Membre habitué Avatar de - Robby -
    Inscrit en
    Juillet 2003
    Messages
    266
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 266
    Points : 170
    Points
    170
    Par défaut " KeTickCount " ?
    Bonjour,

    Cette fonction de l'api kernel (KeTickCount) semble s'introduire "surnoisement" lors de l'implémentation d'un driver. Quand j'analyse le code de mon driver (le .sys), je retrouve cette fonction dans les "fonctions importées" ... en plus des fonctions importées connues et composant le driver. Pas trouvé grand chose sur le net. Quelqu'un a-t-il des infos à ce sujet. Merci.

  2. #2
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Points : 1 956
    Points
    1 956
    Par défaut
    Bonjour,

    KeTickCount est une variable et non une fonction exportée par le kernel.

    On la retrouve dans diverses fonctions du Kernel et elle correspond grosso modo à la partie basse de la structure renvoyé par QueryCounterPerformance() en ring3 soit KeQueryTickCount() en kernel mode (ring0).

    L'initialisation de cette variable semble se faire dans KeUpdateSystemTime() [ en tout cas c'est la seule initialisation que j'ai trouvé ].

    Disasm de ntoskrnl.exe sous XP SP2, fonction KeUpdateSystemTime() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    0040C796 000                 mov     dword_47A988, edx
    0040C79C 000                 mov     KeTickCount, ecx ; !!!!
    0040C7A2 000                 mov     dword_47A984, edx
    On retrouve cette variable dans plein de fonctions liées au temps (normal...) mais aussi dans IoCreateDriver pour créer un nom de driver aléaoire si le driver n'a pas de nom :

    Driver.c de ReactOS, fonction IoCreateDriver:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    01716     /* First, create a unique name for the driver if we don't have one */
    01717     if (!DriverName) {
    01718 
    01719         /* Create a random name and set up the string*/
    01720         NameLength = swprintf(NameBuffer, L"\\Driver\\%08u", KeTickCount); //  !!!!!!
    01721         LocalDriverName.Length = NameLength * sizeof(WCHAR);
    01722         LocalDriverName.MaximumLength = LocalDriverName.Length + sizeof(UNICODE_NULL);
    01723         LocalDriverName.Buffer = NameBuffer;
    01724 
    01725     }
    soit en disasm (même fonction, toujours XP SP2) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    0050D5C6                 sub     esp, 0Ch
    0050D5C9                 mov     edi, esp
    0050D5CB                 mov     esi, offset KeTickCount ; /!\ ici !!!
    0050D5D0                 movsd
    0050D5D1                 movsd
    0050D5D2                 push    offset str->Driver08u ; "\\Driver\\%08u"
    0050D5D7                 lea     eax, [ebp-7Ch]
    0050D5DA                 push    3Bh
    0050D5DC                 push    eax
    0050D5DD                 movsd
    0050D5DE                 call    _snwprintf
    Bien sûr la variable n'est pas documentée officiellement...

    Voilà, j'ai pas mieux

  3. #3
    Membre habitué Avatar de - Robby -
    Inscrit en
    Juillet 2003
    Messages
    266
    Détails du profil
    Informations forums :
    Inscription : Juillet 2003
    Messages : 266
    Points : 170
    Points
    170
    Par défaut
    Merci Neitsa ... une varaible et non une fonction ... déjà, ça, c'est une belle info. Ta réponse me donne une direction de choix dans ma réflextion ... non documentée ? bein voyons ... tu m'étonnes .... encore merci à toi.

+ Répondre à la discussion
Cette discussion est résolue.

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo