IOCTL_SCSI_MINIPORT_HYBRID IOCTL (ntddscsi.h)
El código de control IOCTL_SCSI_MINIPORT_HYBRID envía una solicitud de control de disco híbrido a un controlador de miniport específico de HBA. La solicitud IOCTL_SCSI_MINIPORT_HYBRID es un sub-IOCTL de IOCTL_SCSI_MINIPORT. StorPort recibe y vuelve a formatear este IOCTL y, a continuación, se envía al miniport como un STORAGE_REQUEST_BLOCK (SRB) con un tipo de función de SRB_FUNCTION_IO_CONTROL. Los datos de entrada y salida se encuentran en el bloque de datos SRB.
IOCTL_SCSI_MINIPORT_HYBRID está diseñado para su uso por aplicaciones de terceros o unidades de filtro que administran características de seguridad como el comportamiento de cifrado o escritura a través.
Código principal
Búfer de entrada
El búfer especificado en el miembro dataBuffer del SRB debe contener una estructura SRB_IO_CONTROL y una estructura HYBRID_REQUEST_BLOCK. Dependiendo de la función miembro de HYBRID_REQUEST_BLOCK, se pueden proporcionar datos adicionales.
Longitud del búfer de entrada
dataTransferLength indica el tamaño, en bytes, del búfer, que debe ser al menos tamaño de (SRB_IO_CONTROL) + sizeof(HYBRID_REQUEST_BLOCK), con almacenamiento adicional para los datos de función si el DataBufferLength miembro del HYBRID_REQUEST_BLOCK es distinto de cero.
Búfer de salida
Se devuelve una estructura SRB_IO_CONTROL actualizada al búfer de datos de la SRB.
Longitud del búfer de salida
Los dataBufferOffset y dataBufferLength miembros de HYBRID_REQUEST_BLOCK son distintos de cero cuando se devuelven datos para la función de especificada. El dataTransferLength miembro del SRB se actualiza cuando se devuelven datos para la función de solicitud.
Bloque de estado
El estado resultante de la solicitud de función se establece en el returnCode miembro de SRB_IO_CONTROL. A continuación se muestran los códigos de estado IOCTL del disco híbrido.
Código devuelto | Descripción |
---|---|
HYBRID_STATUS_SUCCESS | La función se completó correctamente. |
HYBRID_STATUS_ILLEGAL_REQUEST | La solicitud contiene un código de función no válido. |
HYBRID_STATUS_INVALID_PARAMETER | Los parámetros de entrada o salida tienen un formato incorrecto. |
HYBRID_STATUS_OUTPUT_BUFFER_TOO_SMALL | La longitud de datos dada en dataBufferLength es demasiado pequeña para contener la salida de la solicitud. |
Observaciones
Una estructura HYBRID_REQUEST_BLOCK sigue inmediatamente la estructura SRB_IO_CONTROL en el búfer de datos. HYBRID_REQUEST_BLOCK se define en ntddscsi.h como se indica a continuación.
typedef struct _HYBRID_REQUEST_BLOCK {
ULONG Version;
ULONG Size;
ULONG Function;
ULONG Flags;
ULONG DataBufferOffset;
ULONG DataBufferLength;
} HYBRID_REQUEST_BLOCK, *PHYBRID_REQUEST_BLOCK;
Los requisitos de parámetro dependen del código de función de la solicitud de disco híbrido. En la tabla siguiente se enumeran los parámetros necesarios para cada función.
Función | Parámetros de entrada | Parámetros de salida |
---|---|---|
HYBRID_FUNCTION_GET_INFO |
HYBRID_REQUEST_BLOCK |
HYBRID_REQUEST_BLOCK + |
HYBRID_FUNCTION_DISABLE_CACHING_MEDIUM |
HYBRID_REQUEST_BLOCK |
|
HYBRID_FUNCTION_ENABLE_CACHING_MEDIUM |
HYBRID_REQUEST_BLOCK |
|
HYBRID_FUNCTION_SET_DIRTY_THRESHOLD |
HYBRID_REQUEST_BLOCK + HYBRID_DIRTY_THRESHOLDS |
|
HYBRID_FUNCTION_DEMOTE_BY_SIZE |
HYBRID_REQUEST_BLOCK + HYBRID_DEMOTE_BY_SIZE |
La estructura de HYBRID_REQUEST_BLOCK se encuentra después de la estructura de SRB_IO_CONTROL en el DataBuffer del SRB. Los datos de función incluidos con la solicitud se encuentran en el desplazamiento en dataBufferOffset después del principio de la estructura de SRB_IO_CONTROL.
En el ejemplo siguiente se muestra la recuperación de los datos de función para una solicitud de HYBRID_FUNCTION_SET_DIRTY_THRESHOLD.
PSRB_IO_CONTROL srbIoCtl = (PSRB_IO_CONTROL)srb->DataBuffer;
PHYBRID_REQUEST_BLOCK hybridRequest = (PHYBRID_REQUEST_BLOCK)(srbIoCtl + 1);
PHYBRID_DIRTY_THRESHOLDS hybridDirtyThresholds = NULL;
if (hybridRequest->DataBufferOffset >= sizeof(SRB_IO_CONTROL) + sizeof(HYBRID_REQUEST_BLOCK))
{
if (hybridRequest->DataBufferLength >= sizeof(HYBRID_FUNCTION_SET_DIRTY_THRESHOLD))
{
hybridDirtyThresholds = (PHYBRID_DIRTY_THRESHOLDS)((PUCHAR)srbIoCtl + hybridRequest->DataBufferOffset);
}
else
{
srbIoCtl->ReturnCode = HYBRID_STATUS_INVALID_PARAMETER;
}
}
HYBRID_DIRTY_THRESHOLDS
La función HYBRID_FUNCTION_SET_DIRTY_THRESHOLD usa la estructura HYBRID_DIRTY_THRESHOLDS para sus parámetros de entrada. HYBRID_DIRTY_THRESHOLDS se define en ntddscsi.h como se indica a continuación.
typedef struct _HYBRID_DIRTY_THRESHOLDS {
ULONG Version;
ULONG Size;
ULONG DirtyLowThreshold;
ULONG DirtyHighThreshold;
} HYBRID_DIRTY_THRESHOLDS, *PHYBRID_DIRTY_THRESHOLDS;
- versión de
- Versión de la estructura. Establezca en HYBRID_REQUEST_INFO_STRUCTURE_VERSION.
- tamaño de
- Tamaño de la estructura. Establezca en sizeof(HYBRID_DIRTY_THRESHOLDS).
- DirtyLowThreshold
- Valor de umbral bajo fraccionario para la caché de disco híbrido que se va a sincronizar con el disco.
- DirtyHighThreshold
- Valor de umbral alto fraccionario para la caché de disco híbrido que se va a sincronizar con el disco.
Los valores de DirtyLowThreshold y DirtyHighThreshold se expresan como la parte más pequeña de una relación entre el valor de umbral y una base de fracción. La base de fracción viene determinada por el miembro FractionBase de la estructura HYBRID_INFORMATION.
HYBRID_DEMOTE_BY_SIZE
La función HYBRID_FUNCTION_DEMOTE_BY_SIZE usa la estructura HYBRID_DEMOTE_BY_SIZE para sus parámetros de entrada. HYBRID_DEMOTE_BY_SIZE se define en ntddscsi.h como se indica a continuación.
typedef struct _HYBRID_DEMOTE_BY_SIZE {
ULONG Version;
ULONG Size;
UCHAR SourcePriority;
UCHAR TargetPriority;
USHORT Reserved0;
ULONG Reserved1;
ULONGLONG LbaCount;
} HYBRID_DEMOTE_BY_SIZE, *PHYBRID_DEMOTE_BY_SIZE;
- versión de
- Versión de la estructura. Establezca en HYBRID_REQUEST_INFO_STRUCTURE_VERSION.
- tamaño de
- Tamaño de la estructura. Establezca en sizeof(HYBRID_DEMOTE_BY_SIZE).
- SourcePriority
- Nivel de prioridad original de los datos que se van a degradar. Este valor debe ser <= el valor de la maximumHybridPriorityLevel miembro de la estructura HYBRID_INFORMATION devuelta por desde una solicitud de función de HYBRID_FUNCTION_GET_INFO. Este valor debe ser > 0.
- TargetPriority
- Nivel de prioridad de destino de los datos que se van a degradar del nivel de sourcePriority de. Este valor debe ser < SourcePriority.
- Reserved0
- Reservado.
- Reserved1
- Reservado.
- LbaCount
- Número de LBA que se degradan al nuevo nivel de prioridad.
La estructura SRB_IO_CONTROL de este IOCTL contiene IOCTL_MINIPORT_SIGNATURE_HYBRDISK en su miembro signature de y IOCTL_SCSI_MINIPORT_HYBRID en el miembro ControlCode.
Requisitos
Requisito | Valor |
---|---|
cliente mínimo admitido | Disponible a partir de Windows 8.1. |
encabezado de | ntddscsi.h (incluya Ntddscsi.h) |