Maison >développement back-end >Golang >La fonction native Windows IsTpmReady génère l'erreur 'Trop de messages dans le sémaphore'

La fonction native Windows IsTpmReady génère l'erreur 'Trop de messages dans le sémaphore'

王林
王林avant
2024-02-09 16:21:30971parcourir

本机 Windows 函数 IsTpmReady 抛出“对信号量发布了太多帖子”错误

L'éditeur php Yuzai a rencontré une erreur lors de l'utilisation de la fonction native Windows IsTpmReady. Le message d'erreur était "Trop de messages ont été publiés sur le sémaphore". Cette erreur peut empêcher le programme de fonctionner correctement, une solution doit donc être trouvée. Ce qui suit vous expliquera comment résoudre cette erreur, j'espère que cela vous sera utile.

Contenu de la question

J'essaie d'appeler la fonction tpmisready à partir du tpmcoreprovisioning.dll inclus sur Windows. Je ne remarque rien d'anormal dans le code, mais l'erreur est générée malgré tout.

Voici ce que j'ai :

package windows

import (
    "errors"
    "log"
    "syscall"
    "unsafe"
)

var (
    TPMDLL   = syscall.NewLazyDLL("TpmCoreProvisioning.dll")
    TpmReady = TPMDLL.NewProc("TpmIsReady")
)

func IsTpmReady() (bool, error) {
    var enabled byte
    ptr := (uintptr)(unsafe.Pointer(&enabled))
    _, _, err := TpmReady.Call(ptr)
    if errors.Is(err, syscall.Errno(0)) {
        return enabled == 1, nil
    }
    if DEBUG {
        log.Printf("IsTpmReady: %v", err)
    }
    return false, err
}

Est-ce que j'utilise la mauvaise chose ou je ne libère pas de ressources ?

Solution

Bien que ce ne soit pas vraiment mon domaine d'expertise comme @Eelco l'a mentionné la plupart du temps, cela devrait être quelque chose à voir avec votre antivirus. Vous pouvez continuer grâce à cette checklist :

  1. Désactivez tout logiciel antivirus que vous utilisez, y compris Windows Defender
  2. Exécutez-le en tant qu'administrateur (je suppose que vous avez déjà essayé ceci)
  3. Vérifiez si vous utilisez la dernière version de Windows

Si cela ne fonctionne toujours pas, essayez d'effectuer un démarrage en mode minimal

  1. Appuyez sur Windows + R et tapez « msconfig »

  2. Il devrait ouvrir « Configuration du système » à partir duquel vous devez accéder à « Onglet Services » et cocher « Masquer tous les services Microsoft » et appuyer sur le bouton Désactiver

  3. Accédez à l'onglet Démarrage et désactivez tous les programmes de la même manière et cliquez sur Appliquer après avoir fermé la fenêtre du Gestionnaire des tâches à l'intérieur de l'onglet

  4. Allez-y, redémarrez votre ordinateur et exécutez à nouveau le programme

Si cela ne fonctionne toujours pas, redémarrez peut-être votre ordinateur en mode sans échec (en utilisant le réseau car il est plus facile de rechercher quelque chose si nécessaire) et réessayez.

Si cela ne fonctionne toujours pas : à ce stade, je ne sais pas quoi d'autre pourrait fonctionner. Mais vous pouvez essayer de l'exécuter sur un autre ordinateur et voir si l'erreur persiste. Vous pouvez réinitialiser la machine, mais cela peut être gênant. Vérifiez si vous avez des programmes susceptibles d’être en conflit ou en extension.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer