Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Un processus de console utilise des handles pour accéder aux mémoires tampons d’entrée et d’écran de sa console. Un processus peut utiliser la fonction GetStdHandle, CreateFile ou CreateConsoleScreenBuffer pour ouvrir l’un de ces handles.
La fonction GetStdHandle fournit un mécanisme permettant de récupérer les handles d’entrée standard (STDIN), de sortie standard (STDOUT) et d’erreurSTDERR standard () associés à un processus. Lors de la création de la console, le système crée ces handles. Initialement, STDIN il s’agit d’un handle vers la mémoire tampon d’entrée de la console et STDOUTSTDERR il s’agit de handles de la mémoire tampon d’écran active de la console. Toutefois, la fonction SetStdHandle peut rediriger les handles standard en modifiant le handle associé à STDIN, STDOUTou STDERR. Étant donné que les handles standard du parent sont hérités par n’importe quel processus enfant, les appels suivants à GetStdHandle retournent le handle redirigé. Un handle retourné par GetStdHandle peut donc faire référence à d’autres éléments que les E/S de la console. Par exemple, avant de créer un processus enfant, un processus parent peut utiliser SetStdHandle pour définir un handle de canal comme STDIN handle hérité par le processus enfant. Lorsque le processus enfant appelle GetStdHandle, il obtient le handle de canal. Cela signifie que le processus parent peut contrôler les handles standard du processus enfant. Les handles retournés par GetStdHandle ont GENERIC_READ | GENERIC_WRITE accès, sauf si SetStdHandle a été utilisé pour définir le handle standard pour avoir un accès moindre.
La valeur des handles retournés par GetStdHandle n’est pas 0, 1 et 2. Par conséquent, les constantes de flux prédéfinis standard dans Stdio.h (STDINSTDOUTet STDERR) ne peuvent pas être utilisées dans les fonctions qui nécessitent un handle de console.
La fonction CreateFile permet à un processus d’obtenir un handle vers la mémoire tampon d’entrée de sa console et la mémoire tampon d’écran active, même si STDIN elle STDOUT a été redirigée. Pour ouvrir un handle dans la mémoire tampon d’entrée d’une console, spécifiez la CONIN$ valeur dans un appel à CreateFile. Spécifiez la CONOUT$ valeur dans un appel à CreateFile pour ouvrir un handle dans la mémoire tampon d’écran active d’une console.
CreateFile vous permet de spécifier l’accès en lecture/écriture du handle qu’il retourne.
La fonction CreateConsoleScreenBuffer crée une mémoire tampon d’écran et retourne un handle. Ce handle peut être utilisé dans n’importe quelle fonction qui accepte un handle pour la sortie de la console. La nouvelle mémoire tampon d’écran n’est pas active (affichée) tant que son handle n’est pas spécifié dans un appel à la fonction SetConsoleActiveScreenBuffer . Notez que la modification de la mémoire tampon d’écran active n’affecte pas le handle retourné par GetStdHandle. De même, l’utilisation de SetStdHandle pour modifier le STDOUT handle n’affecte pas la mémoire tampon d’écran active.
Les handles de console retournés par CreateFile et CreateConsoleScreenBuffer peuvent être utilisés dans l’une des fonctions de console qui nécessitent un handle à la mémoire tampon d’entrée d’une console ou d’une mémoire tampon d’écran de console. Les handles retournés par GetStdHandle peuvent être utilisés par les fonctions de console s’ils n’ont pas été redirigés pour faire référence à d’autres éléments que les E/S de la console. Si un handle standard a été redirigé pour faire référence à un fichier ou à un canal, toutefois, le handle ne peut être utilisé que par les fonctions ReadFile et WriteFile .
GetFileType peut aider à déterminer le type d’appareil auquel le handle fait référence. Un handle de console s’affiche sous la forme FILE_TYPE_CHAR.
Un processus peut utiliser la fonction DuplicateHandle pour créer un handle de console en double qui dispose d’un accès ou d’une hériter différent du handle d’origine. Notez toutefois qu’un processus peut créer un handle de console en double uniquement pour sa propre utilisation. Cela diffère des autres types de handles (tels que les objets de fichier, de canal ou mutex), pour lesquels DuplicateHandle peut créer un doublon valide pour un autre processus. L’accès à une console doit être partagé lors de la création de l’autre processus ou peut être demandé par l’autre processus via le mécanisme AttachConsole .
Pour fermer un handle de console, un processus peut utiliser la fonction CloseHandle .