struttura IO_STACK_LOCATION (wdm.h)
La struttura IO_STACK_LOCATION definisce una posizione dello stack I/O, ovvero una voce nello stack di I/O associata a ogni IRP. Ogni posizione dello stack I/O in un'IRP include alcuni membri comuni e alcuni membri specifici della richiesta.
Sintassi
typedef struct _IO_STACK_LOCATION {
UCHAR MajorFunction;
UCHAR MinorFunction;
UCHAR Flags;
UCHAR Control;
union {
struct {
PIO_SECURITY_CONTEXT SecurityContext;
ULONG Options;
USHORT POINTER_ALIGNMENT FileAttributes;
USHORT ShareAccess;
ULONG POINTER_ALIGNMENT EaLength;
} Create;
struct {
PIO_SECURITY_CONTEXT SecurityContext;
ULONG Options;
USHORT POINTER_ALIGNMENT Reserved;
USHORT ShareAccess;
PNAMED_PIPE_CREATE_PARAMETERS Parameters;
} CreatePipe;
struct {
PIO_SECURITY_CONTEXT SecurityContext;
ULONG Options;
USHORT POINTER_ALIGNMENT Reserved;
USHORT ShareAccess;
PMAILSLOT_CREATE_PARAMETERS Parameters;
} CreateMailslot;
struct {
ULONG Length;
ULONG POINTER_ALIGNMENT Key;
ULONG Flags;
LARGE_INTEGER ByteOffset;
} Read;
struct {
ULONG Length;
ULONG POINTER_ALIGNMENT Key;
ULONG Flags;
LARGE_INTEGER ByteOffset;
} Write;
struct {
ULONG Length;
PUNICODE_STRING FileName;
FILE_INFORMATION_CLASS FileInformationClass;
ULONG POINTER_ALIGNMENT FileIndex;
} QueryDirectory;
struct {
ULONG Length;
ULONG POINTER_ALIGNMENT CompletionFilter;
} NotifyDirectory;
struct {
ULONG Length;
ULONG POINTER_ALIGNMENT CompletionFilter;
DIRECTORY_NOTIFY_INFORMATION_CLASS POINTER_ALIGNMENT DirectoryNotifyInformationClass;
} NotifyDirectoryEx;
struct {
ULONG Length;
FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass;
} QueryFile;
struct {
ULONG Length;
FILE_INFORMATION_CLASS POINTER_ALIGNMENT FileInformationClass;
PFILE_OBJECT FileObject;
union {
struct {
BOOLEAN ReplaceIfExists;
BOOLEAN AdvanceOnly;
};
ULONG ClusterCount;
HANDLE DeleteHandle;
};
} SetFile;
struct {
ULONG Length;
PVOID EaList;
ULONG EaListLength;
ULONG POINTER_ALIGNMENT EaIndex;
} QueryEa;
struct {
ULONG Length;
} SetEa;
struct {
ULONG Length;
FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass;
} QueryVolume;
struct {
ULONG Length;
FS_INFORMATION_CLASS POINTER_ALIGNMENT FsInformationClass;
} SetVolume;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT FsControlCode;
PVOID Type3InputBuffer;
} FileSystemControl;
struct {
PLARGE_INTEGER Length;
ULONG POINTER_ALIGNMENT Key;
LARGE_INTEGER ByteOffset;
} LockControl;
struct {
ULONG OutputBufferLength;
ULONG POINTER_ALIGNMENT InputBufferLength;
ULONG POINTER_ALIGNMENT IoControlCode;
PVOID Type3InputBuffer;
} DeviceIoControl;
struct {
SECURITY_INFORMATION SecurityInformation;
ULONG POINTER_ALIGNMENT Length;
} QuerySecurity;
struct {
SECURITY_INFORMATION SecurityInformation;
PSECURITY_DESCRIPTOR SecurityDescriptor;
} SetSecurity;
struct {
PVPB Vpb;
PDEVICE_OBJECT DeviceObject;
ULONG OutputBufferLength;
} MountVolume;
struct {
PVPB Vpb;
PDEVICE_OBJECT DeviceObject;
} VerifyVolume;
struct {
struct _SCSI_REQUEST_BLOCK *Srb;
} Scsi;
struct {
ULONG Length;
PSID StartSid;
PFILE_GET_QUOTA_INFORMATION SidList;
ULONG SidListLength;
} QueryQuota;
struct {
ULONG Length;
} SetQuota;
struct {
DEVICE_RELATION_TYPE Type;
} QueryDeviceRelations;
struct {
const GUID *InterfaceType;
USHORT Size;
USHORT Version;
PINTERFACE Interface;
PVOID InterfaceSpecificData;
} QueryInterface;
struct {
PDEVICE_CAPABILITIES Capabilities;
} DeviceCapabilities;
struct {
PIO_RESOURCE_REQUIREMENTS_LIST IoResourceRequirementList;
} FilterResourceRequirements;
struct {
ULONG WhichSpace;
PVOID Buffer;
ULONG Offset;
ULONG POINTER_ALIGNMENT Length;
} ReadWriteConfig;
struct {
BOOLEAN Lock;
} SetLock;
struct {
BUS_QUERY_ID_TYPE IdType;
} QueryId;
struct {
DEVICE_TEXT_TYPE DeviceTextType;
LCID POINTER_ALIGNMENT LocaleId;
} QueryDeviceText;
struct {
BOOLEAN InPath;
BOOLEAN Reserved[3];
DEVICE_USAGE_NOTIFICATION_TYPE POINTER_ALIGNMENT Type;
} UsageNotification;
struct {
SYSTEM_POWER_STATE PowerState;
} WaitWake;
struct {
PPOWER_SEQUENCE PowerSequence;
} PowerSequence;
#if ...
struct {
union {
ULONG SystemContext;
SYSTEM_POWER_STATE_CONTEXT SystemPowerStateContext;
};
POWER_STATE_TYPE POINTER_ALIGNMENT Type;
POWER_STATE POINTER_ALIGNMENT State;
POWER_ACTION POINTER_ALIGNMENT ShutdownType;
} Power;
#else
struct {
ULONG SystemContext;
POWER_STATE_TYPE POINTER_ALIGNMENT Type;
POWER_STATE POINTER_ALIGNMENT State;
POWER_ACTION POINTER_ALIGNMENT ShutdownType;
} Power;
#endif
struct {
PCM_RESOURCE_LIST AllocatedResources;
PCM_RESOURCE_LIST AllocatedResourcesTranslated;
} StartDevice;
struct {
ULONG_PTR ProviderId;
PVOID DataPath;
ULONG BufferSize;
PVOID Buffer;
} WMI;
struct {
PVOID Argument1;
PVOID Argument2;
PVOID Argument3;
PVOID Argument4;
} Others;
} Parameters;
PDEVICE_OBJECT DeviceObject;
PFILE_OBJECT FileObject;
PIO_COMPLETION_ROUTINE CompletionRoutine;
PVOID Context;
} IO_STACK_LOCATION, *PIO_STACK_LOCATION;
Members
MajorFunction
Codice della funzione principale IRP che indica il tipo di operazione di I/O da eseguire.
MinorFunction
Codice di sottofunzione per MajorFunction. Il gestore PnP, i driver di power manager, i driver del file system e i driver di classe SCSI impostano questo membro per alcune richieste.
Flags
Valori specifici del tipo di richiesta usati quasi esclusivamente dai driver del file system. I driver di dispositivo rimovibili controllano se questo membro è impostato con SL_OVERRIDE_VERIFY_VOLUME per le richieste di lettura per determinare se continuare l'operazione di lettura anche se i flag dell'oggetto dispositivo sono impostati con DO_VERIFY_VOLUME. I driver intermedi caricati su un driver di dispositivo multimediale rimovibile devono copiare questo membro nella posizione dello stack I/O del driver inferiore successivo in tutte le richieste di IRP_MJ_READ in ingresso.
Per la documentazione di altri SL_*
flag per IRP_MJ_CREATE, vedere IRP_MJ_CREATE (IFS).
I valori del flag possibili includono:
Flag | valore | Descrizione |
---|---|---|
SL_KEY_SPECIFIED | 0x01 |
Indica che la IO_STACK_LOCATION.Parameters.Read(OrWrite).Key copia di un determinato settore deve essere letto quando la ridondanza è abilitata. Oggi questo flag viene usato solo con operazioni di IRP_MJ_READ. |
SL_OVERRIDE_VERIFY_VOLUME | 0x02 |
Questo flag viene usato per determinare se continuare l'operazione di lettura anche se i flag dell'oggetto dispositivo vengono impostati con DO_VERIFY_VOLUME. |
SL_WRITE_THROUGH | 0x04 |
Questo flag informa il driver di archiviazione per impostare flag appropriati in modo che il disco ignora la cache di scrittura per forzare la scrittura del disco nel supporto di archiviazione permanente. Questo flag è specifico del dispositivo; non tutte le unità disco supportano il bypass della cache su disco. |
SL_FT_SEQUENTIAL_WRITE | 0x08 |
Riservato per l'utilizzo nel sistema. |
SL_FORCE_DIRECT_WRITE | 0x10 |
Questo flag consente ai driver in modalità kernel di scrivere in aree del volume che normalmente non possono scrivere a a causa del blocco della scrittura diretta nello stack di file system e driver di archiviazione. Il blocco di scrittura diretto consente di migliorare la sicurezza. Questo flag viene controllato sia nel livello dello stack di file system che nello stack di archiviazione. Per altre informazioni sul blocco di scrittura diretta, vedere Blocco delle operazioni di scrittura diretta nei volumi e nei dischi. |
SL_REALTIME_STREAM | 0x20 |
Questo flag indica che l'I/O è per le richieste di streaming in tempo reale a un driver di classe CD-ROM. Questo hint indica al driver di eseguire operazioni READ/WRITE a una velocità garantita per lo streaming in tempo reale. Questo flag è valido solo con supporti ottici. |
SL_PERSISTENT_MEMORY_FIXED_MAPPING | 0x20 |
Il mapping di memoria persistente dei byte nella richiesta di scrittura non può modificare durante la gestione di questa richiesta di scrittura. Questo flag è valido solo con un dispositivo di memoria persistente e IRP_MJ_WRITE. |
Per i dispositivi di memoria persistente, uno dei motivi per la ripetizione del mapping (modifica dell'indirizzo fisico di un determinato LBA) nei dispositivi di memoria persistente consiste nel fornire un'atomicità efficiente a livello di settore. Se il flag non è impostato, il mapping è consentito soprattutto se genera l'atomicità del settore. I file system (o il richiedente) preferiscono che un driver di dispositivo di memoria persistente fornisca l'atomicità del settore. Se il flag è impostato, un driver di memoria persistente non esegue il mapping degli indirizzi fisici corrispondenti agli LBAs. Se ciò significa che l'atomicità del settore non può essere fornita, quindi essere. Tuttavia, il driver è più di benvenuto per fornire l'atomicità del settore, purché non vi sia alcun remapping.
Control
I driver possono controllare questo membro per determinare se è impostato con SL_PENDING_RETURNED e in quali condizioni viene chiamato CompletamentoRoutine . I driver hanno accesso di sola lettura a questo membro. I driver chiamano IoSetCompletionRoutine o IoSetCompletionRoutineEx per specificare queste condizioni.
Parameters
Unione che dipende dai valori principali e secondari del codice di funzione IRP contenuti in MajorFunction e MinorFunction. Nella tabella seguente vengono illustrati i singoli membri dell'unione Parametri .
Nome del membro | IRP che usano questo membro |
---|---|
Creare | IRP_MJ_CREATE |
Lettura | IRP_MJ_READ |
Scrittura | IRP_MJ_WRITE |
QueryFile | IRP_MJ_QUERY_INFORMATION |
SetFile | IRP_MJ_SET_INFORMATION |
QueryVolume | IRP_MJ_QUERY_VOLUME_INFORMATION |
Deviceiocontrol | IRP_MJ_DEVICE_CONTROL e IRP_MJ_INTERNAL_DEVICE_CONTROL |
MountVolume | IRP_MN_MOUNT_VOLUME |
VerifyVolume | IRP_MN_VERIFY_VOLUME |
Scsi | IRP_MJ_INTERNAL_DEVICE_CONTROL (SCSI) |
QueryDeviceRelations | IRP_MN_QUERY_DEVICE_RELATIONS |
QueryInterface | IRP_MN_QUERY_INTERFACE |
DeviceCapabilities | IRP_MN_QUERY_CAPABILITIES |
FilterResourceRequirements | IRP_MN_FILTER_RESOURCE_REQUIREMENTS |
ReadWriteConfig | IRP_MN_READ_CONFIG e IRP_MN_WRITE_CONFIG |
SetLock | IRP_MN_SET_LOCK |
QueryId | IRP_MN_QUERY_ID |
QueryDeviceText | IRP_MN_QUERY_DEVICE_TEXT |
UsageNotification | IRP_MN_DEVICE_USAGE_NOTIFICATION |
WaitWake | IRP_MN_WAIT_WAKE |
PowerSequence | IRP_MN_POWER_SEQUENCE |
Elettricità | IRP_MN_SET_POWER e IRP_MN_QUERY_POWER |
StartDevice | IRP_MN_START_DEVICE |
WMI | IRP secondari WMI |
Altro | IrP specifici del driver |
Per altre informazioni, vedere Codici di funzione principali di IRP.
Parameters.Create
Parametri del servizio di sistema per NtCreateFile.
Parameters.Create.SecurityContext
Parameters.Create.Options
Parameters.Create.FileAttributes
Parameters.Create.ShareAccess
Parameters.Create.EaLength
Parameters.CreatePipe
Parametri del servizio di sistema per NtCreateNamedPipeFile.
Parameters.CreatePipe.SecurityContext
Parameters.CreatePipe.Options
Parameters.CreatePipe.Reserved
Parameters.CreatePipe.ShareAccess
Parameters.CreatePipe.Parameters
Parameters.CreateMailslot
Parametri del servizio di sistema per NtCreateMailslotFile.
Parameters.CreateMailslot.SecurityContext
Parameters.CreateMailslot.Options
Parameters.CreateMailslot.Reserved
Parameters.CreateMailslot.ShareAccess
Parameters.CreateMailslot.Parameters
Parameters.Read
Parametri del servizio di sistema per NtReadFile.
Parameters.Read.Length
Parameters.Read.Key
Parameters.Read.Flags
Parameters.Read.ByteOffset
Parameters.Write
Parametri del servizio di sistema per NtWriteFile.
Parameters.Write.Length
Parameters.Write.Key
Parameters.Write.Flags
Parameters.Write.ByteOffset
Parameters.QueryDirectory
Parametri del servizio di sistema per NtQueryDirectoryFile.
Parameters.QueryDirectory.Length
Parameters.QueryDirectory.FileName
Parameters.QueryDirectory.FileInformationClass
Parameters.QueryDirectory.FileIndex
Parameters.NotifyDirectory
Parametri del servizio di sistema per NtNotifyChangeDirectoryFile.
Parameters.NotifyDirectory.Length
Parameters.NotifyDirectory.CompletionFilter
Parameters.NotifyDirectoryEx
Parametri del servizio di sistema per NtNotifyChangeDirectoryFileEx.
Parameters.NotifyDirectoryEx.Length
Parameters.NotifyDirectoryEx.CompletionFilter
Parameters.NotifyDirectoryEx.DirectoryNotifyInformationClass
Parameters.QueryFile
Parametri del servizio di sistema per NtQueryInformationFile.
Parameters.QueryFile.Length
Parameters.QueryFile.FileInformationClass
Parameters.SetFile
Parametri del servizio di sistema per NtSetInformationFile.
Parameters.SetFile.Length
Parameters.SetFile.FileInformationClass
Parameters.SetFile.FileObject
Parameters.SetFile.ReplaceIfExists
Parameters.SetFile.AdvanceOnly
Parameters.SetFile.ClusterCount
Parameters.SetFile.DeleteHandle
Parameters.QueryEa
Parametri del servizio di sistema per NtQueryEaFile.
Parameters.QueryEa.Length
Parameters.QueryEa.EaList
Parameters.QueryEa.EaListLength
Parameters.QueryEa.EaIndex
Parameters.SetEa
Parametri del servizio di sistema per NtSetEaFile.
Parameters.SetEa.Length
Parameters.QueryVolume
Parametri del servizio di sistema per NtQueryVolumeInformationFile.
Parameters.QueryVolume.Length
Parameters.QueryVolume.FsInformationClass
Parameters.SetVolume
Parametri del servizio di sistema per NtSetVolumeInformationFile.
Parameters.SetVolume.Length
Parameters.SetVolume.FsInformationClass
Parameters.FileSystemControl
Parametri del servizio di sistema per NtFsControlFile.
Parameters.FileSystemControl.OutputBufferLength
Parameters.FileSystemControl.InputBufferLength
Parameters.FileSystemControl.FsControlCode
Parameters.FileSystemControl.Type3InputBuffer
Parameters.LockControl
Parametri del servizio di sistema per LockFile/NtUnlockFile.
Parameters.LockControl.Length
Parameters.LockControl.Key
Parameters.LockControl.ByteOffset
Parameters.DeviceIoControl
Parametri del servizio di sistema per NtDeviceIoControlFile.
Parameters.DeviceIoControl.OutputBufferLength
Parameters.DeviceIoControl.InputBufferLength
Parameters.DeviceIoControl.IoControlCode
Parameters.DeviceIoControl.Type3InputBuffer
Parameters.QuerySecurity
Parametri del servizio di sistema per NtQuerySecurityObject.
Parameters.QuerySecurity.SecurityInformation
Parameters.QuerySecurity.Length
Parameters.SetSecurity
Parametri del servizio di sistema per NtSetSecurityObject.
Parameters.SetSecurity.SecurityInformation
Parameters.SetSecurity.SecurityDescriptor
Parameters.MountVolume
Parametri del servizio di sistema per MountVolume.
Parameters.MountVolume.Vpb
Parameters.MountVolume.DeviceObject
Parameters.MountVolume.OutputBufferLength
Parameters.VerifyVolume
Parametri del servizio di sistema per VerifyVolume.
Parameters.VerifyVolume.Vpb
Parameters.VerifyVolume.DeviceObject
Parameters.Scsi
Parametri per Scsi con controllo del dispositivo interno.
Parameters.Scsi.Srb
Parameters.QueryQuota
Parametri del servizio di sistema per NtQueryQuotaInformationFile.
Parameters.QueryQuota.Length
Parameters.QueryQuota.StartSid
Parameters.QueryQuota.SidList
Parameters.QueryQuota.SidListLength
Parameters.SetQuota
Parametri del servizio di sistema per NtSetQuotaInformationFile.
Parameters.SetQuota.Length
Parameters.QueryDeviceRelations
Parametri per IRP_MN_QUERY_DEVICE_RELATIONS.
Parameters.QueryDeviceRelations.Type
Parameters.QueryInterface
Parametri per IRP_MN_QUERY_INTERFACE.
Parameters.QueryInterface.InterfaceType
Parameters.QueryInterface.Size
Parameters.QueryInterface.Version
Parameters.QueryInterface.Interface
Parameters.QueryInterface.InterfaceSpecificData
Parameters.DeviceCapabilities
Parametri per IRP_MN_QUERY_CAPABILITIES.
Parameters.DeviceCapabilities.Capabilities
Parameters.FilterResourceRequirements
Parametri per IRP_MN_FILTER_RESOURCE_REQUIREMENTS.
Parameters.FilterResourceRequirements.IoResourceRequirementList
Parameters.ReadWriteConfig
Parametri per IRP_MN_READ_CONFIG e IRP_MN_WRITE_CONFIG.
Parameters.ReadWriteConfig.WhichSpace
Parameters.ReadWriteConfig.Buffer
Parameters.ReadWriteConfig.Offset
Parameters.ReadWriteConfig.Length
Parameters.SetLock
Parametri per IRP_MN_SET_LOCK.
Parameters.SetLock.Lock
Parameters.QueryId
Parametri per IRP_MN_QUERY_ID.
Parameters.QueryId.IdType
Parameters.QueryDeviceText
Parametri per IRP_MN_QUERY_DEVICE_TEXT.
Parameters.QueryDeviceText.DeviceTextType
Parameters.QueryDeviceText.LocaleId
Parameters.UsageNotification
Parametri per IRP_MN_DEVICE_USAGE_NOTIFICATION.
Parameters.UsageNotification.InPath
Parameters.UsageNotification.Reserved[3]
Parameters.UsageNotification.Type
Parameters.WaitWake
Parametri per IRP_MN_WAIT_WAKE.
Parameters.WaitWake.PowerState
Parameters.PowerSequence
Parametro per IRP_MN_POWER_SEQUENCE.
Parameters.PowerSequence.PowerSequence
Parameters.Power
Parametri per IRP_MN_SET_POWER e IRP_MN_QUERY_POWER.
Parameters.Power.SystemContext
Parameters.Power.SystemPowerStateContext
Parameters.Power.Type
Parameters.Power.State
Parameters.Power.ShutdownType
Parameters.StartDevice
Parametri per StartDevice.
Parameters.StartDevice.AllocatedResources
Parameters.StartDevice.AllocatedResourcesTranslated
Parameters.WMI
Parametri per i provider di integrazione WMI.
Parameters.WMI.ProviderId
Parameters.WMI.DataPath
Parameters.WMI.BufferSize
Parameters.WMI.Buffer
Parameters.Others
Parametri per altre operazioni specifiche del driver.
Parameters.Others.Argument1
Parameters.Others.Argument2
Parameters.Others.Argument3
Parameters.Others.Argument4
DeviceObject
Puntatore alla struttura di DEVICE_OBJECT creata dal driver che rappresenta il dispositivo fisico, logico o virtuale di destinazione per il quale questo driver deve gestire l'IRP.
FileObject
Puntatore a una struttura FILE_OBJECT che rappresenta l'oggetto file, se presente, associato al puntatore DeviceObject .
CompletionRoutine
Routine di completamento richiamata a seconda dei flag nel campo Controllo di questa struttura.
Context
Contesto definito dal driver usato per archiviare l'indirizzo del parametro di contesto passato a CompletionRoutine.
Commenti
Per ogni IRP è presente una struttura IO_STACK_LOCATION per ogni driver in uno stack di driver. Ogni set di percorsi dello stack I/O di ogni IRP viene aggiunto all'IRP, seguendo la struttura IRP .
Ogni driver di livello superiore è responsabile della configurazione della posizione dello stack di I/O per il driver inferiore successivo in ogni IRP. Un driver deve chiamare IoGetCurrentIrpStackLocation per ottenere un puntatore alla propria posizione dello stack per ogni IRP. I driver di livello superiore possono chiamare IoGetNextIrpStackLocation per ottenere un puntatore alla posizione dello stack del driver inferiore successivo.
Il driver di livello superiore deve configurare il contenuto della posizione dello stack prima di chiamare IoCallDriver per passare un IRP al driver di livello inferiore. Se il driver passerà l'IRP di input al driver di livello inferiore successivo, la routine dispatch deve chiamare IoSkipCurrentIrpStackLocation o IoCopyCurrentIrpStackLocationToNext per configurare il percorso dello stack di I/O del driver inferiore successivo.
Una chiamata di driver di livello superiore a IoCallDriver imposta il membro DeviceObject sull'oggetto dispositivo di destinazione del driver di livello inferiore successivo, nella posizione dello stack di I/O del driver inferiore. Il gestore di I/O passa ogni routine IoCompletion del driver di livello superiore a un puntatore al proprio oggetto dispositivo quando la routine IoCompletion viene chiamata al completamento dell'IRP.
Se un driver di livello superiore alloca i provider di integrazione per effettuare richieste proprie, alla routine IoCompletion viene passato un puntatore NULL DeviceObject se tale driver non alloca una posizione dello stack per se stessa né configura il puntatore DeviceObject nella propria posizione dello stack dell'IRP appena allocato.
In alcuni casi, un driver di livello superiore su un driver di dispositivo di archiviazione di massa è responsabile della suddivisione di richieste di trasferimento di grandi dimensioni per il driver di dispositivo sottostante. In particolare, i driver di classe SCSI devono controllare Parameters.Read.Length e Parameters.Write.Length, determinare se le dimensioni del trasferimento richiesto superano le funzionalità di trasferimento dell'HBA sottostante e, in tal caso, suddividere la lunghezza della richiesta originale in una sequenza di trasferimenti parziali per soddisfare l'IRP originale.
Requisiti
Requisito | Valore |
---|---|
Intestazione | wdm.h (include Wdm.h, Ntddk.h, Ntifs.h) |
Vedi anche
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per