PMRX_CALLDOWN función de devolución de llamada (mrx.h)
RDBSS llama a esta devolución de llamada para solicitar que el minidirector de red realice una acción basada en el IRP proporcionado.
Sintaxis
PMRX_CALLDOWN PmrxCalldown;
NTSTATUS PmrxCalldown(
[in, out] IN OUT PRX_CONTEXT RxContext
)
{...}
Parámetros
[in, out] RxContext
Puntero a la estructura RX_CONTEXT. Este parámetro contiene el IRP que solicita la operación.
Valor devuelto
Esta devolución de llamada devuelve STATUS_SUCCESS si se ejecuta correctamente o un valor NTSTATUS adecuado, como el siguiente:
Código devuelto | Descripción |
---|---|
STATUS_ACCESS_DENIED | Se realizó una solicitud para detener o iniciar el minidirector de red, pero el autor de la llamada no tenía la seguridad adecuada para esta operación. |
STATUS_BUFFER_OVERFLOW | El búfer para recibir la información del atributo extendido era demasiado pequeño. Este valor devuelto debe considerarse correcto y se deben devolver tantos datos válidos como sea posible en el miembro Info.Buffer de la estructura RX_CONTEXT a la que apunta el parámetro RxContext . |
STATUS_BUFFER_TOO_SMALL | El búfer es demasiado pequeño para recibir los datos solicitados. Si se devuelve este valor, el miembro InformationToReturn de la estructura RX_CONTEXT a la que apunta el parámetro RxContext debe establecerse en el tamaño mínimo del búfer esperado para que la llamada se realice correctamente. |
STATUS_CONNECTION_DISCONNECTED | La conexión se desconectó. |
STATUS_EA_CORRUPT_ERROR | Se recibió información de atributo extendida no válida del servidor remoto. |
STATUS_EA_TOO_LARGE | La información de atributo extendida que se pasa es mayor que el tamaño admitido por el recurso compartido remoto. |
STATUS_FILE_CLOSED | Se adquirió la estructura FCB, pero se ha cerrado la estructura de SRV_OPEN asociada. |
STATUS_INSUFFICIENT_RESOURCES | No había recursos suficientes para completar la operación. |
STATUS_INTERNAL_ERROR | Error interno en el minidirector de red. |
STATUS_INVALID_BUFFER_SIZE | El tamaño del búfer solicitado era demasiado grande. |
STATUS_INVALID_DEVICE_REQUEST | Se envió una solicitud de dispositivo no válida al minidirector de red. |
STATUS_INVALID_NETWORK_RESPONSE | Se recibió una respuesta no válida del servidor remoto. |
STATUS_INVALID_PARAMETER | Se especificó un parámetro no válido en RxContext. |
STATUS_LINK_FAILED | Error al intentar volver a conectarse a un servidor remoto para completar la solicitud. |
STATUS_MORE_PROCESSING_REQUIRED | Un minidirector de red devuelve este valor para deshabilitar la contracción de esta solicitud abierta. |
STATUS_NETWORK_ACCESS_DENIED | Se denegó el acceso a la red. Este error se puede devolver si se ha pedido al minidirector de red que abra un nuevo archivo en un recurso compartido de solo lectura. |
STATUS_NETWORK_NAME_DELETED | Se eliminó un nombre de red. |
STATUS_NONEXISTENT_EA_ENTRY | No hay atributos extendidos en el objeto de archivo y el usuario proporcionó un índice de atributo extendido. |
STATUS_NOT_IMPLEMENTED | No se implementa una característica solicitada, como el arranque remoto o un archivo de página remoto. |
STATUS_NOT_SUPPORTED | No se admite una característica solicitada, como atributos extendidos. |
STATUS_OBJECT_NAME_COLLISION | Se pidió al minidirector de red que creara un archivo que ya existe. |
STATUS_OBJECT_NAME_NOT_FOUND | No se encontró el nombre del objeto. Este error se puede devolver si se ha pedido al minidirector de red que abra un archivo que no existe. |
STATUS_OBJECT_PATH_NOT_FOUND | No se encontró la ruta de acceso del objeto. Este error se puede devolver si se solicitó un objeto de secuencia NTFS y el sistema de archivos remoto no admite secuencias. |
STATUS_ONLY_IF_CONNECTED | La estructura SRV_OPEN no está conectada. |
STATUS_REDIRECTOR_HAS_OPEN_HANDLES | Se trata de una solicitud para detener el minidirector de red, pero el redirector tiene identificadores abiertos que impiden que se detenga en este momento. |
STATUS_REDIRECTOR_NOT_STARTED | Se trata de una solicitud para detener el minidirector de red, pero no se inició el redirector. |
STATUS_REDIRECTOR_STARTED | Se trata de una solicitud para iniciar el minidirector de red, pero el redirector ya se ha iniciado. |
STATUS_REPARSE | Se requiere un análisis para controlar un vínculo simbólico. |
STATUS_REQUEST_ABORTED | Se anuló la solicitud de red. |
STATUS_RETRY | Se debe reintentar la operación. Este error se puede devolver si el minidirector de red encontró una infracción de uso compartido o un error de acceso denegado. |
STATUS_SHARING_VIOLATION | Se ha producido una infracción de uso compartido. |
STATUS_UNSUCCESSFUL | La llamada no se realizó correctamente. |
Comentarios
RDBSS llama a la rutina MRxCloseSrvOpen para solicitar que el minidirector de red cierre una estructura de SRV_OPEN.
RDBSS llama a MRxCloseSrvOpen como parte de las operaciones de limpieza y cierre en un objeto de archivo. Se supone que el minidirector de red cerrará un archivo a través de la red.
Antes de llamar a MRxCloseSrvOpen, RDBSS modifica los siguientes miembros de la estructura RX_CONTEXT, a los que apunta el parámetro RxContext :
MajorFunction se establece en IRP_MJ_CLOSE
pFcb se establece en la estructura FCB para la que se va a iniciar el procesamiento de cierre.
pFobx se establece en la estructura FOBX para la que se va a iniciar el procesamiento de cierre.
RDBSS y un minidirector de red no cierran necesariamente las estructuras de SRV_OPEN cuando el usuario cierra un archivo. Para mejorar el rendimiento en algunos casos, un minidirector de red puede intentar reutilizar la SRV_OPEN y los datos almacenados en caché sin ningún contacto con el servidor. Algunas aplicaciones de Microsoft Windows presentan un comportamiento que abre, lee y cierra un archivo y, a continuación, vuelve a abrir rápidamente el mismo archivo. En estos casos, la reutilización de las estructuras de SRV_OPEN puede mejorar el rendimiento.
RDBSS llama a MRxCloseSrvOpen para el procesamiento de cierre retrasado mientras se quita una estructura FOBX. Esto sucede cuando el procesamiento de cierre se retrasó en previsión de una solicitud abierta y no había solicitudes abiertas próximamente.
MRxCloseSrvOpen no puede devolver un valor de STATUS_RETRY que indique que se debe reintentar la llamada. Si es necesario un bucle de reintento, se debe controlar internamente en la rutina MRxCloseSrvOpen mediante el minidirector de red.
RDBSS llama a la rutina MRxCollapseOpen para solicitar que el minidirector de red contraiga una solicitud de sistema de archivos abierto en una estructura de SRV_OPEN existente.
RDBSS llama a MRxCollapseOpen para contraer una estructura de SRV_OPEN localmente. Se consulta el minidirector de red para determinar si un colapso es posible, por lo que no hay ninguna razón para llamar al minidirector de red dos veces. Si el minidirector de red decide contraer la estructura de SRV_OPEN, lo hará y devolverá un estado devuelto. Un valor devuelto de STATUS_SUCCESS es un valor devuelto de terminación. Un valor devuelto diferente, por ejemplo, STATUS_MORE_PROCESSING_REQUIRED, se considera un valor devuelto que no termina.
Antes de llamar a MRxCollapseOpen, RDBSS modifica los siguientes miembros de la estructura RX_CONTEXT a la que apunta el parámetro RxContext :
pRelevantSrvOpen se establece en la estructura SRV_OPEN que se va a contraer.
Create.pSrvCall se establece en la estructura SRV_CALL asociada al SRV_OPEN.
Si el minidirector de red decide contraer la estructura de SRV_OPEN, el miembro SrvOpen de la estructura de RX_CONTEXT debe establecerse en la estructura de SRV_OPEN contraída.
RDBSS llama a la rutinaMRxCreate para solicitar que el minidirector de red cree un objeto de sistema de archivos.
RDBSS llama a MRxCreate para solicitar que el minidirector de red abra un objeto de sistema de archivos a través de la red. RdBSS emite esta llamada en respuesta a la recepción de una solicitud de IRP_MJ_CREATE .
Antes de llamar a MRxCreate, RDBSS modifica los siguientes miembros de la estructura RX_CONTEXT a la que apunta el parámetro RxContext :
pRelevantSrvOpen se establece en la estructura SRV_OPEN.
Create.pSrvCall se establece en la estructura SRV_CALL.
Create.NtCreateParameters se establece en el NT_CREATE_PARAMETERS solicitado.
En el contexto de un minidirector de red, un objeto de archivo hace referencia al bloque de control de archivos (FCB) asociado y a las estructuras de extensión de objeto de archivo (FOBX). Hay una correspondencia de uno a uno entre objetos de archivo y FOBXs. Muchos objetos de archivo harán referencia al mismo FCB, que representa un único archivo en un servidor remoto. Un cliente puede tener varias solicitudes abiertas diferentes (solicitudes NtCreateFile) en el mismo FCB y cada una de ellas creará un nuevo objeto de archivo. RdBSS y miniireccionadores de red pueden optar por enviar menos solicitudes MRxCreate que las solicitudes NtCreateFile recibidas, en efecto compartiendo una estructura de SRV_OPEN entre varios FOBX.
Si la solicitud MRxCreate era para una sobrescritura de archivos y MRxCreate devolvió STATUS_SUCCESS, RDBSS adquirirá el recurso de E/S de paginación y truncará el archivo. Si el administrador de caché almacena en caché el archivo, RDBSS actualizará los tamaños que el administrador de caché tiene con los que acaba de recibir del servidor.
Antes de devolver, MRxCreate debe establecer el miembro CurrentIrp-IoStatus.Information> de la estructura RX_CONTEXT a la que apunta el parámetro RxContext.
RDBSS llama a la rutina MRxDevFcbXXXControlFile para pasar una solicitud de control FCB de dispositivo (una solicitud IOCTL o FSCTL) al minidirector de red.
MRxDevFcbXXXControlFile controla las solicitudes IOCTL y FSCTL relacionadas con el FCB del dispositivo que se envían al minidirector de red.
Antes de llamar a MRxDevFcbXXXControlFile, RDBSS modifica el siguiente miembro de la estructura RX_CONTEXT a la que apunta el parámetro RxContext :
MajorFunction se establece en la función principal del IRP.
Si se trata de una solicitud de IRP_MJ_FILE_SYSTEM_CONTROL, RDBSS modifica los siguientes miembros de la estructura RX_CONTEXT a la que apunta el parámetro RxContext :
LowIoContext.ParamsFor.FsCtl.MinorFunction se establece en el código de función secundaria para el código FSCTL.
LowIoContext.ParamsFor.FsCtl.FsControlCode se establece en el código FSCTL del IRP.
Si se trata de una solicitud de IRP_MJ_DEVICE_CONTROL o IRP_MJ_INTERNAL_DEVICE_CONTROL, RDBSS modifica el siguiente miembro de la estructura RX_CONTEXT a la que apunta el parámetro RxContext :
LowIoContext.ParamsFor.FsCtl.FsControlCode se establece en el código de control del IRP.
Si MRxDevFcbXXXControlFile devuelve STATUS_SUCCESS, la rutina se realizó correctamente. Cualquier otro valor devuelto indica que se produjo un error.
RDBSS llama a la rutina MRxFlush para solicitar que un minidirector de red escriba el contenido de un objeto del sistema de archivos en el almacenamiento. RDBSS emite esta llamada en respuesta a la recepción de una solicitud de IRP_MJ_FLUSH_BUFFERS .
MRxFlush controla las solicitudes de red para el vaciado de archivos.
RDBSS llama a la rutina MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] para solicitar que un minidirector de red abra un bloqueo exclusivo en un objeto de archivo.
RDBSS llama a MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] en respuesta a recibir una solicitud de IRP_MJ_LOCK_CONTROL con un código menor de IRP_MN_LOCK si IrpSp-Flags> tiene establecido el bit SL_EXCLUSIVE_LOCK.
Antes de llamar a MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK], RDBSS modifica los siguientes miembros de la estructura RX_CONTEXT a la que apunta el parámetro RxContext :
El miembro LowIoContext.Operation se establece en LOWIO_OP_EXCLUSIVELOCK.
El miembro LowIoContext.ResourceThreadId se establece en el subproceso del proceso que inició la operación en RDBSS.
El miembro LowIoContext.ParamsFor.Locks.ByteOffset se establece en el valor de IrpSp-Parameters.LockControl.ByteOffset.QuadPart>.
El miembro LowIoContext.ParamsFor.Locks.Key se establece en el valor de IrpSp-Parameters.LockControl.Key>.
El miembro LowIoContext.ParamsFor.Locks.Flags se establece en el valor de IrpSp-Flags>.
El miembro LowIoContext.ParamsFor.Locks.Length se establece en el valor de IrpSp-Parameters.LockControl.Length.QuadPart>.
El miembro LowIoContext.Operation de la estructura RX_CONTEXT especifica la operación de E/S baja que se va a realizar. Es posible que varias de las rutinas de E/S bajas apunten a la misma rutina en un minidirector de red porque este miembro LowIoContext.Operation se puede usar para diferenciar la operación de E/S baja solicitada. Por ejemplo, todas las llamadas de E/S relacionadas con bloqueos de archivo podrían llamar a la misma rutina de E/S baja en el minidirector de red y esa rutina podría usar el miembro LowIoContext.Operation para diferenciar entre la operación de bloqueo y desbloqueo solicitada.
Si la rutina MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK] puede tardar mucho tiempo en completarse, el controlador minidirector de red debe liberar la estructura FCB antes de iniciar la comunicación de red. La estructura FCB se puede liberar llamando a RxReleaseFcbResourceForThreadInMRx. Mientras se procesa la rutina MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK], se garantiza que el miembro LowIoContext.ResourceThreadId de RX_CONTEXT indique el subproceso del proceso que inició la operación en RDBSS.
El miembro LowIoContext.ResourceThreadId de RX_CONTEXT se puede usar para liberar la estructura FCB en nombre de otro subproceso. Cuando se completa una rutina asincrónica, se puede liberar la estructura FCB adquirida a partir del subproceso inicial.
RDBSS llama a la rutina MRxLowIOSubmit[LOWIO_OP_FSCTL] para solicitar que un minidirector de red emita una solicitud de control del sistema de archivos en el archivo remoto.
RDBSS llama a MRxLowIOSubmit[LOWIO_OP_FSCTL] en respuesta a la recepción de una solicitud de IRP_MJ_FILE_SYSTEM_CONTROL .
Antes de llamar a MRxLowIOSubmit[LOWIO_OP_FSCTL], RDBSS modifica los siguientes miembros de la estructura RX_CONTEXT a la que apunta el parámetro RxContext :
El miembro LowIoContext.Operation se establece en LOWIO_OP_FSCTL.
El miembro LowIoContext.ResourceThreadId se establece en el subproceso del proceso que inició la operación en RDBSS.
El miembro LowIoContext.ParamsFor.FsCtl.FsControlCode se establece en el código de control principal FSCTL.
El miembro LowIoContext.ParamsFor.FsCtl.MinorFunction se establece en el código de control secundario FSCTL.
El miembro LowIoContext.ParamsFor.FsCtl.pInputBuffer se establece en el búfer de entrada.
El miembro LowIoContext.ParamsFor.FsCtl.InputBufferLength se establece en la longitud del búfer de entrada.
El miembro LowIoContext.ParamsFor.FsCtl.pOutputBuffer se establece en el búfer de salida.
El miembro LowIoContext.ParamsFor.FsCtl.OutputBufferLength se establece en la longitud del búfer de salida.
Las solicitudes de código de control del sistema de archivos (FSCTL) administradas por un minidirector de red se pueden clasificar en una de varias categorías:
FSCTLs implementados y usados por RDBSS y el minidirector de red
FSCTLs que se implementan y usan solo en el minidirector de red
FSCTLs que nunca debería ser visto por el minidirector de red. Estas FSCTL están pensadas únicamente como ayuda de depuración.
Mientras se procesa la rutina MRxLowIOSubmit[LOWIO_OP_FSCTL], se garantiza que el miembro LowIoContext.ResourceThreadId de RX_CONTEXT indique el subproceso del proceso que inició la operación en RDBSS. El miembro LowIoContext.ResourceThreadId de RX_CONTEXT se puede usar para liberar el recurso de entrada en nombre de otro subproceso. Cuando se completa una rutina asincrónica, se puede liberar el recurso de entrada que se adquirió del subproceso inicial.
RDBSS llama a la rutina MRxLowIOSubmit[LOWIO_OP_IOCTL] para emitir una solicitud de control del sistema de E/S al minidirector de red.
RDBSS llama a MRxLowIOSubmit[LOWIO_OP_IOCTL] en respuesta a recibir una solicitud de IRP_MJ_DEVICE_CONTROL o IRP_MJ_INTERNAL_DEVICE_CONTROL .
Antes de llamar a MRxLowIOSubmit[LOWIO_OP_IOCTL], RDBSS modifica los siguientes miembros de la estructura RX_CONTEXT a la que apunta el parámetro RxContext :
El miembro LowIoContext.Operation se establece en LOWIO_OP_IOCTL.
El miembro LowIoContext.ResourceThreadId se establece en el subproceso del proceso que inició la operación en RDBSS.
El miembro LowIoContext.ParamsFor.IoCtl.IoControlCode se establece en el código de control IOCTL.
El miembro LowIoContext.ParamsFor.IoCtl.pInputBuffer se establece en el búfer de entrada.
El miembro LowIoContext.ParamsFor.IoCtl.InputBufferLength se establece en la longitud del búfer de entrada.
El miembro LowIoContext.ParamsFor.IoCtl.pOutputBuffer se establece en el búfer de salida.
El miembro LowIoContext.ParamsFor.IoCtl.OutputBufferLength se establece en la longitud del búfer de salida.
Mientras se procesa la rutina MRxLowIOSubmit[LOWIO_OP_IOCTL], se garantiza que el miembro LowIoContext.ResourceThreadId de RX_CONTEXT indique el subproceso del proceso que inició la operación en RDBSS. El miembro LowIoContext.ResourceThreadId de RX_CONTEXT se puede usar para liberar el recurso de entrada en nombre de otro subproceso. Cuando se completa una rutina asincrónica, se puede liberar el recurso de entrada que se adquirió del subproceso inicial.
RDBSS llama a la rutina MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY] para emitir una solicitud al minidirector de red para una operación de notificación de cambio de directorio.
RDBSS llama a MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY] en respuesta a recibir una solicitud de IRP_MJ_DIRECTORY_CONTROL .
Antes de llamar a MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY], RDBSS modifica los siguientes miembros de la estructura RX_CONTEXT a la que apunta el parámetro RxContext :
El miembro LowIoContext.Operation se establece en LOWIO_OP_NOTIFY_CHANGE_DIRECTORY.
El miembro LowIoContext.ResourceThreadId se establece en el subproceso del proceso que inició la operación en RDBSS.
El miembro LowIoContext.ParamsFor.NotifyChangeDirectory.WatchTree se establece en TRUE si IrpSp-Flags> tiene establecido el bit SL_WATCH_TREE.
El miembro LowIoContext.ParamsFor.NotifyChangeDirectory.CompletionFilter se establece en el valor de IrpSp-Parameters.NotifyDirectory.CompletionFilter>.
El miembro LowIoContext.ParamsFor.NotifyChangeDirectory.NotificationBufferLength se establece en el valor de IrpSp-Parameters.NotifyDirectory.Length>.
El miembro LowIoContext.ParamsFor.NotifyChangeDirectory.pNotificationBuffer se establece en el valor devuelto llamando a MmGetSystemAddressForMdlSafe pasando Irp-MdlAddress> y NormalPagePriority. El búfer de usuario también se sondea y bloquea para el acceso de escritura.
Normalmente, un minidirector de red implementa una operación de notificación de cambio de directorio como una operación asincrónica, ya que puede tardar mucho tiempo. La operación normalmente consiste en enviar una solicitud de red al servidor remoto que solicita la notificación de cambios. La respuesta se obtiene cuando el cambio deseado se ve afectado en el servidor. Este es un ejemplo de una operación para la que el minidirector de red puede necesitar registrar un valor de contexto único para controlar las cancelaciones iniciadas localmente.
Mientras se procesa la rutina MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY], se garantiza que el miembro LowIoContext.ResourceThreadId de RX_CONTEXT indique el subproceso del proceso que inició la operación en RDBSS. El miembro LowIoContext.ResourceThreadId se puede usar para liberar la estructura FCB en nombre de otro subproceso. Cuando se completa una rutina asincrónica, se puede liberar la estructura FCB adquirida a partir del subproceso inicial. La estructura FCB se puede liberar llamando a RxReleaseFcbResourceForThreadInMRx.
RDBSS llama a la rutina MRxLowIOSubmit[LOWIO_OP_READ] para emitir una solicitud de lectura al minidirector de red.
RDBSS llama a MRxLowIOSubmit[LOWIO_OP_READ] en respuesta a la recepción de una solicitud de IRP_MJ_READ .
Antes de llamar a MRxLowIOSubmit[LOWIO_OP_READ], RDBSS modifica los siguientes miembros de la estructura RX_CONTEXT a la que apunta el parámetro RxContext :
El miembro LowIoContext.Operation se establece en LOWIO_OP_READ.
El miembro LowIoContext.ResourceThreadId se establece en el subproceso del proceso que inició la operación en RDBSS.
El miembro LowIoContext.ParamsFor.ReadWrite.Key se establece en el valor de IrpSp-Parameters.Read.Key>.
El miembro ParamsFor.ReadWrite.Flags tiene el bit de LOWIO_READWRITEFLAG_PAGING_IO se establece en si Irp-Flags> tiene el bit de IRP_PAGING_IO.
El miembro ParamsFor.ReadWrite.Buffer se establece en el búfer de usuario bloqueado para IoReadAccess.
El miembro LowIoContext.ParamsFor.ReadWrite.ByteCount se establece en el valor de IrpSp-Parameters.Read.Length>.
Normalmente, una minidirectora de red implementa una solicitud de lectura como una operación asincrónica porque puede tardar mucho tiempo. Normalmente, la operación consiste en enviar una solicitud de red al servidor remoto. La respuesta se obtiene cuando se completa la solicitud de lectura en el servidor. Este es un ejemplo de una operación para la que el minidirector de red puede necesitar registrar un contexto para controlar las cancelaciones iniciadas localmente.
Aunque la rutina MRxLowIOSubmit[LOWIO_OP_READ] está procesando, se garantiza que el miembro LowIoContext.ResourceThreadId de RX_CONTEXT indique el subproceso del proceso que inició la operación en RDBSS. El miembro LowIoContext.ResourceThreadId se puede usar para liberar la estructura FCB en nombre de otro subproceso. Cuando se completa una rutina asincrónica, se puede liberar la estructura FCB adquirida a partir del subproceso inicial. La estructura FCB se puede liberar llamando a RxReleaseFcbResourceForThreadInMRx.
RDBSS llama a la rutina MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] para solicitar que un redirector de red abra un bloqueo compartido en un objeto de archivo.
RDBSS llama a MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] en respuesta a recibir una solicitud de IRP_MJ_LOCK_CONTROL con un código menor de IRP_MN_LOCK si IrpSp-Flags> no tiene establecido el bit SL_EXCLUSIVE_LOCK.
Antes de llamar a MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK], RDBSS modifica los siguientes miembros de la estructura RX_CONTEXT a la que apunta el parámetro RxContext :
El miembro LowIoContext.Operation se establece en LOWIO_OP_SHAREDLOCK.
El miembro LowIoContext.ResourceThreadId se establece en el subproceso del proceso que inició la operación en RDBSS.
El miembro LowIoContext.ParamsFor.Locks.ByteOffset se establece en el valor de IrpSp-Parameters.LockControl.ByteOffset.QuadPart>.
El miembro LowIoContext.ParamsFor.Locks.Key se establece en el valor de IrpSp-Parameters.LockControl.Key>.
El miembro LowIoContext.ParamsFor.Locks.Flags se establece en el valor de IrpSp-Flags>.
El miembro LowIoContext.ParamsFor.Locks.Length se establece en el valor de IrpSp-Parameters.LockControl.Length.QuadPart>.
El miembro LowIoContext.Operation de la estructura RX_CONTEXT especifica la operación de E/S baja que se va a realizar. Es posible que varias de las rutinas de E/S bajas apunten a la misma rutina en un minidirector de red porque el miembro LowIoContext.Operation se puede usar para diferenciar la operación de E/S baja solicitada. Por ejemplo, todas las llamadas de E/S relacionadas con bloqueos de archivo podrían llamar a la misma rutina de E/S baja en el minidirector de red y esta rutina podría usar el miembro LowIoContext.Operation para diferenciar entre la operación de bloqueo y desbloqueo solicitada.
Si la rutina MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] puede tardar mucho tiempo en completarse, el controlador minidirector de red debe liberar la estructura FCB antes de iniciar la comunicación de red. La estructura FCB se puede liberar llamando a RxReleaseFcbResourceForThreadInMRx. Aunque la rutina MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK] está procesando, se garantiza que el miembro LowIoContext.ResourceThreadId de RX_CONTEXT indique el subproceso del proceso que inició la operación en RDBSS.
El miembro LowIoContext.ResourceThreadId de la estructura RX_CONTEXT se puede usar para liberar la estructura FCB en nombre de otro subproceso. Cuando se completa una rutina asincrónica, se puede liberar la estructura FCB adquirida a partir del subproceso inicial.
RDBSS llama a la rutina MRxLowIOSubmit[LOWIO_OP_UNLOCK] para solicitar que un minidirector de red quite un único bloqueo en un objeto de archivo.
RDBSS llama a MRxLowIOSubmit[LOWIO_OP_UNLOCK] en respuesta a recibir una solicitud de IRP_MJ_LOCK_CONTROL con un código menor de IRP_MN_UNLOCK_SINGLE.
Antes de llamar a MRxLowIOSubmit[LOWIO_OP_UNLOCK], RDBSS modifica los siguientes miembros de la estructura RX_CONTEXT a la que apunta el parámetro RxContext :
El miembro LowIoContext.Operation se establece en LOWIO_OP_UNLOCK.
El miembro LowIoContext.ResourceThreadId se establece en el subproceso del proceso que inició la operación en RDBSS.
El miembro LowIoContext.ParamsFor.Locks.ByteOffset se establece en el valor de IrpSp-Parameters.LockControl.ByteOffset.QuadPart>.
El miembro LowIoContext.ParamsFor.Locks.Key se establece en el valor de IrpSp-Parameters.LockControl.Key>.
El miembro LowIoContext.ParamsFor.Locks.Length se establece en el valor de IrpSp-Parameters.LockControl.Length.QuadPart>.
El miembro LowIoContext.Operation de la estructura RX_CONTEXT especifica la operación de E/S baja que se va a realizar. Es posible que varias de las rutinas de E/S bajas apunten a la misma rutina en un minidirector de red porque este miembro LowIoContext.Operation se puede usar para diferenciar la operación de E/S baja solicitada. Por ejemplo, todas las llamadas de E/S relacionadas con bloqueos de archivo podrían llamar a la misma rutina de E/S baja en el minidirector de red y esta rutina podría usar el miembro LowIoContext.Operation para diferenciar entre la operación de bloqueo y desbloqueo solicitada.
Si la rutina MRxLowIOSubmit[LOWIO_OP_UNLOCK] puede tardar mucho tiempo en completarse, el controlador minidirector de red debe liberar la estructura FCB antes de iniciar la comunicación de red. La estructura FCB se puede liberar llamando a RxReleaseFcbResourceForThreadInMRx. Mientras se procesa la rutina MRxLowIOSubmit[LOWIO_OP_UNLOCK], se garantiza que el miembro LowIoContext.ResourceThreadId de RX_CONTEXT indique el subproceso del proceso que inició la operación en RDBSS.
El miembro LowIoContext.ResourceThreadId de RX_CONTEXT se puede usar para liberar la estructura FCB en nombre de otro subproceso. Cuando se completa una rutina asincrónica, se puede liberar la estructura FCB adquirida a partir del subproceso inicial.
RDBSS llama a la rutina MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] para solicitar que el minidirector de red quite varios bloqueos mantenidos en un objeto de archivo.
RDBSS llama a MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] en respuesta a recibir una solicitud de IRP_MJ_LOCK_CONTROL con un código menor de IRP_MN_UNLOCK_ALL o IRP_MN_UNLOCK_ALL_BY_KEY.
Antes de llamar a MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE], RDBSS modifica los siguientes miembros de la estructura RX_CONTEXT a la que apunta el parámetro RxContext :
El miembro LowIoContext.Operation se establece en LOWIO_OP_UNLOCK_MULTIPLE.
El miembro LowIoContext.ResourceThreadId se establece en el subproceso del proceso que inició la operación en RDBSS.
El miembro LowIoContext.ParamsFor.Locks.LockList se establece en una lista de LOWIO_LOCK_LIST elementos. Cada elemento especifica un intervalo que se va a desbloquear.
Los intervalos de bytes que se van a desbloquear se especifican en el miembro LowIoContext.ParamsFor.Locks.LockList de la estructura RX_CONTEXT. La estructura LOWIO_LOCK_LIST es la siguiente:
typedef struct _LOWIO_LOCK_LIST {
struct _LOWIO_LOCK_LIST *Next;
ULONG LockNumber;
RXVBO ByteOffset;
LONGLONG Length;
ULONG Key;
BOOLEAN ExclusiveLock;
} LOWIO_LOCK_LIST, *PLOWIO_LOCK_LIST;
El miembro LowIoContext.Operation de RX_CONTEXT especifica la operación de E/S baja que se va a realizar. Es posible que varias de las rutinas de E/S bajas apunten a la misma rutina en un minidirector de red porque el miembro LowIoContext.Operation se puede usar para diferenciar la operación de E/S baja solicitada. Por ejemplo, todas las llamadas de E/S relacionadas con bloqueos de archivo podrían llamar a la misma rutina de E/S baja en el minidirector de red y esta rutina podría usar el miembro LowIoContext.Operation para diferenciar entre la operación de bloqueo y desbloqueo solicitada.
Si la rutina MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] puede tardar mucho tiempo en completarse, el controlador minidirector de red debe liberar la estructura FCB antes de iniciar la comunicación de red. La estructura FCB se puede liberar llamando a RxReleaseFcbResourceForThreadInMRx. Mientras se procesa la rutina MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE], se garantiza que el miembro LowIoContext.ResourceThreadId de RX_CONTEXT indique el subproceso del proceso que inició la operación en RDBSS.
El miembro LowIoContext.ResourceThreadId de RX_CONTEXT se puede usar para liberar la estructura FCB en nombre de otro subproceso. Cuando se completa una rutina asincrónica, se puede liberar la estructura FCB adquirida a partir del subproceso inicial.
RDBSS llama a la rutina MRxLowIOSubmit[LOWIO_OP_WRITE] para emitir una solicitud de escritura al minidirector de red.
RDBSS llama a MRxLowIOSubmit[LOWIO_OP_WRITE] en respuesta a recibir una solicitud de IRP_MJ_WRITE .
Antes de llamar a MRxLowIOSubmit[LOWIO_OP_WRITE], RDBSS modifica los siguientes miembros de la estructura RX_CONTEXT a la que apunta el parámetro RxContext :
El miembro LowIoContext.Operation se establece en LOWIO_OP_WRITE.
El miembro LowIoContext.ResourceThreadId se establece en el subproceso del proceso que inició la operación en RDBSS.
El miembro LowIoContext.ParamsFor.ReadWrite.Key se establece en el valor de IrpSp-Parameters.Read.Key>.
El miembro ParamsFor.ReadWrite.Flags tiene el bit de LOWIO_READWRITEFLAG_PAGING_IO se establece en si Irp-Flags> tiene el bit de IRP_PAGING_IO.
El miembro ParamsFor.ReadWrite.Buffer se establece en el búfer de usuario bloqueado para IoWriteAccess.
El miembro LowIoContext.ParamsFor.ReadWrite.ByteCount se establece en el valor de IrpSp-Parameters.Write.Length>.
Normalmente, una minidirectora de red implementa una solicitud de escritura como una operación asincrónica porque puede tardar mucho tiempo. Normalmente, la operación consiste en enviar una solicitud de red al servidor remoto. La respuesta se obtiene cuando se completa la solicitud de escritura en el servidor. Este es un ejemplo de una operación para la que el minidirector de red puede necesitar registrar un contexto para controlar las cancelaciones iniciadas localmente.
Aunque la rutina MRxLowIOSubmit[LOWIO_OP_WRITE] está procesando, se garantiza que el miembro LowIoContext.ResourceThreadId de RX_CONTEXT indique el subproceso del proceso que inició la operación en RDBSS. El miembro LowIoContext.ResourceThreadId se puede usar para liberar la estructura FCB en nombre de otro subproceso. Cuando se completa una rutina asincrónica, se puede liberar la estructura FCB adquirida a partir del subproceso inicial. La estructura FCB se puede liberar llamando a RxReleaseFcbResourceForThreadInMRx.
RDBSS llama a la rutina MRxQueryDirectory para solicitar que una minidirectora de red consulte información sobre un directorio de archivos.
Antes de llamar a MRxQueryDirectory, RDBSS modifica los siguientes miembros de la estructura RX_CONTEXT a la que apunta el parámetro RxContext :
El miembro Info.FileInformationClass se establece en IrpSp-Parameters.QueryDirectory.FileInformationClass>.
El miembro Info.Buffer se establece en el búfer de usuario del paquete de solicitud de E/S. Este búfer ya está bloqueado por RDBSS si es necesario.
El miembro Info.LengthRemaining se establece en IrpSp-Parameters.QueryDirectory.Length>.
El miembro QueryDirectory.FileIndex se establece en IrpSp-Parameters.QueryDirectory.FileIndex>.
El miembro QueryDirectory.RestartScan se establece en distinto de cero si IrpSp-Flags> tiene el bit de SL_RESTART_SCAN.
El miembro QueryDirectory.ReturnSingleEntry se establece en distinto de cero si IrpSp-Flags> tiene el bit de SL_RETURN_SINGLE_ENTRY.
El miembro QueryDirectory.IndexSpecified se establece en distinto de cero si IrpSp-Flags> tiene el bit de SL_INDEX_SPECIFIED.
El miembro QueryDirectory.InitialQuery se establece en distinto de cero si el miembro UnicodeQueryTemplate.Buffer del FOBX asociado es NULL y el miembro Flags del FOBX no tiene el bit de FOBX_FLAG_MATCH_ALL activado.
En el caso de una consulta con caracteres comodín (".", por ejemplo), RDBSS establecerá el miembro UnicodeQueryTemplate.Buffer del FOBX asociado en la consulta de comodín pasada.
Si el miembro PostRequest de la estructura de RX_CONTEXT es TRUE a cambio de MRxQueryDirectory, RDBSS llamará a RxFsdPostRequest pasando la estructura RX_CONTEXT a una cola de trabajo para que la procese el proceso del sistema de archivos (FSP).
RDBSS llama a la rutina MRxQueryEaInfo para solicitar que una minidirectora de red consulte información de atributos extendidos en un objeto del sistema de archivos.
RDBSS emite una llamada a MRxQueryEaInfo en respuesta a la recepción de una solicitud de IRP_MJ_QUERY_EA .
Antes de llamar a MRxQueryEaInfo, RDBSS modifica los siguientes miembros de la estructura RX_CONTEXT a la que apunta el parámetro RxContext :
El miembro Info.Buffer se establece en el búfer de usuario del paquete de solicitud de E/S. Este búfer ya está bloqueado por RDBSS si es necesario.
El miembro Info.LengthRemaining se establece en IrpSp-Parameters.QueryEa.Length>.
El miembro QueryEa.UserEaList se establece en IrpSp-Parameters.QueryEa.EaList>.
El miembro QueryEa.UserEaListLength se establece en IrpSp-Parameters.QueryEa.EaListLength>.
El miembro QueryEa.UserEaIndex se establece en IrpSp-Parameters.QueryEa.EaIndex>.
El miembro QueryEa.RestartScan se establece en distinto de cero si IrpSp-Flags> tiene el bit de SL_RESTART_SCAN.
El miembro QueryEa.ReturnSingleEntry se establece en distinto de cero si IrpSp-Flags> tiene el bit de SL_RETURN_SINGLE_ENTRY.
El miembro QueryEa.IndexSpecified se establece en distinto de cero si IrpSp-Flags> tiene el bit SL_INDEX_SPECIFIED.
Si se ejecuta correctamente, MRxQueryEaInfo debe establecer el miembro Info.LengthRemaininging de la estructura RX_CONTEXT en la longitud de la información de atributo extendida devuelta y también actualizar el miembro Fobx-OffsetOfNextEaToReturn>. Si la llamada a MRxQueryEaInfo se realizó correctamente, RDBSS establece el miembro IoStatus.Information del IRP en IrpSp-Parameters.QueryEa.Length> menos el miembro Info.LengthRemaining de RX_CONTEXT.
RDBSS llama a la rutina MRxQueryFileInfo para solicitar que una minidirectora de red consulte información del archivo de consulta en un objeto del sistema de archivos.
RDBSS emite una llamada a MRxQueryFileInfo en respuesta a recibir una solicitud de IRP_MJ_QUERY_INFORMATION .
Antes de llamar a MRxQueryFileInfo, RDBSS modifica los siguientes miembros de la estructura RX_CONTEXT a la que apunta el parámetro RxContext :
El miembro Info.FileInformationClass se establece en IrpSp-Parameters.QueryFile.FileInformationClass>, el valor de FILE_INFORMATION_CLASS solicitado.
El miembro Info.Buffer se establece en el búfer de usuario del paquete de solicitud de E/S.
El miembro Info.LengthRemaining se establece en IrpSp-Parameters.QueryFile.Length>.
El miembro QueryDirectory.FileIndex se establece en IrpSp-Parameters.QueryDirectory.FileIndex>.
El miembro QueryDirectory.RestartScan se establece si IrpSp-Flags> tiene establecido el bit SL_RESTART_SCAN.
El miembro QueryDirectory.ReturnSingleEntry se establece si IrpSp-Flags> tiene SL_RETURN_SINGLE_ENTRY bit establecido.
El miembro QueryDirectory.InitialQuery se establece si Fobx-UnicodeQueryTemplate.Buffer> es NULL y Fobx-Flags> no tiene establecido el bit FOBX_FLAG_MATCH_ALL.
Si se ejecuta correctamente, el minidirector de red debe establecer el miembro Info.LengthRemaining de la estructura RX_CONTEXT en miembro Info.Length menos la longitud de la información de archivo devuelta. Si la llamada a MRxQueryFileInfo se realizó correctamente, RDBSS establece el miembro IoStatus.Information del IRP en IrpSp-Parameters.QueryFile.Length> menos el miembro Info.LengthRemaining de RX_CONTEXT.
RDBSS no admite solicitudes con el bit de SL_INDEX_SPECIFIED del conjunto IrpSp-Flags>. Un minidirector de red no recibirá llamadas a MRxQueryFileInfo con el bit SL_INDEX_SPECIFIED de IrpSp-Flags> establecido.
RDBSS llama a la rutina MRxQueryQuotaInfo para solicitar que una minidirectora de red consulte la información de cuota de consulta en un objeto del sistema de archivos.
RDBSS emite una llamada a MRxQueryQuotaInfo en respuesta a la recepción de una solicitud de IRP_MJ_QUERY_QUOTA .
Antes de llamar a MRxQueryQuotaInfo, RDBSS modifica los siguientes miembros de la estructura RX_CONTEXT a la que apunta el parámetro RxContext :
El miembro Info.Buffer se establece en el búfer de usuario del paquete de solicitud de E/S. Este búfer ya está bloqueado por RDBSS si es necesario.
El miembro Info.LengthRemaining se establece en IrpSp-Parameters.QueryQuota.Length>.
El miembro QueryQuota.SidList se establece en IrpSp-Parameters.QueryQuota.SidList>.
El miembro QueryQuota.SidListLength se establece en IrpSp-Parameters.QueryQuota.SidListLength>.
El miembro QueryQuota.StartSid se establece en IrpSp-Parameters.QueryQuota.StartSid>.
El miembro QueryQuota.Length se establece en IrpSp-Parameters.QueryQuota.Length>.
El miembro QueryQuota.RestartScan se establece en distinto de cero si IrpSp-Flags> tiene establecido el bit SL_RESTART_SCAN.
El miembro QueryQuota.ReturnSingleEntry se establece en distinto de cero si IrpSp-Flags> tiene establecido el bit SL_RETURN_SINGLE_ENTRY.
El miembro QueryQuota.IndexSpecified se establece en distinto de cero si IrpSp-Flags> tiene establecido el bit SL_INDEX_SPECIFIED.
Si se ejecuta correctamente, el minidirector de red debe establecer el miembro Info.LengthRemaining de la estructura RX_CONTEXT en la longitud de la información de cuota que se va a devolver. Si la llamada a MRxQueryQuotaInfo se realizó correctamente, RDBSS establece el miembro IoStatus.Information del IRP en el miembro Info.LengthRemaining de RX_CONTEXT.
Si la llamada a MRxQueryQuotaInfo se realiza correctamente, el miembro InformationToReturn de la estructura RX_CONTEXT debe establecerse en la longitud de la información de cuota devuelta. Si la llamada no se realiza correctamente, el miembro InformationToReturn de RX_CONTEXT debe establecerse en cero.
RDBSS llama a la rutina MRxQuerySdInfo para solicitar que una minidirectora de red consulte la información del descriptor de seguridad de consulta en un objeto del sistema de archivos.
RDBSS emite una llamada a MRxQuerySdInfo en respuesta a recibir una solicitud de IRP_MJ_QUERY_SECURITY .
Antes de llamar a MRxQuerySdInfo, RDBSS modifica los siguientes miembros de la estructura RX_CONTEXT a la que apunta el parámetro RxContext :
El miembro QuerySecurity.SecurityInformation se establece en IrpSp-Parameters.QuerySecurity.SecurityInformation>.
El miembro Info.Buffer se establece en el búfer de usuario del paquete de solicitud de E/S. Este búfer ya está bloqueado por RDBSS si es necesario.
El miembro Info.LengthRemaining se establece en IrpSp-Parameters.QuerySecurity.Length>.
Si se ejecuta correctamente, el minidirector de red debe establecer el miembro InformationToReturn de la estructura RX_CONTEXT en la longitud de la información de seguridad devuelta. Si la llamada a MRxQuerySdInfo se realizó correctamente, RDBSS establece el miembro IoStatus.Information del IRP en el miembro InformationToReturn de RX_CONTEXT.
RDBSS llama a la rutina MRxQueryVolumeInfo para solicitar que una minidirectora de red consulte la información del volumen de consulta.
RDBSS emite una llamada a MRxQueryVolumeInfo en cualquiera de los casos siguientes:
RDBSS recibe una solicitud de IRP_MJ_QUERY_VOLUME_INFORMATION .
RDBSS recibe una solicitud de IRP_MJ_FILE_SYSTEM_CONTROL para un código de control FSCTL_LMR_GET_LINK_TRACKING_INFORMATION.
Antes de llamar a MRxQueryVolumeInfo en el caso de una solicitud de IRP_MJ_QUERY_VOLUME_INFORMATION, RDBSS modifica los siguientes miembros de la estructura RX_CONTEXT a la que apunta el parámetro RxContext :
El miembro Info.FsInformationClass se establece en IrpSp-Parameters.QueryVolume.FsInformationClass>.
El miembro Info.Buffer se establece en Irp-AssociatedIrp.SystemBuffer>.
El miembro Info.LengthRemaining se establece en IrpSp-Parameters.QueryVolume.Length>.
Para una solicitud de IRP_MJ_QUERY_VOLUME_INFORMATION, si el miembro PostRequest de la estructura de RX_CONTEXT es TRUE a cambio de MRxQueryVolumeInfo, RDBSS llamará a RxFsdPostRequest para publicar la solicitud. En este caso, la solicitud de IRP_MJ_QUERY_VOLUME_INFORMATION pasará la estructura de RX_CONTEXT a la cola RX_CONTEXT a una cola de trabajo para que la procese el proceso del sistema de archivos (FSP).
Si el miembro PostRequest de la estructura RX_CONTEXT es FALSE a cambio de MRxQueryVolumeInfo, el minidirector de red debe establecer el miembro Info.LengthRemaining de la estructura RX_CONTEXT a la longitud de la información del volumen devuelta. RDBSS establece el miembro IoStatus.Information del IRP en IrpSp-Parameters.QueryVolume.Length> menos el miembro Info.LengthRemaining de la estructura RX_CONTEXT.
Si la llamada a MRxQueryVolumeInfo se realiza correctamente, el minidirector de red debe establecer el miembro Info.LengthRemaining de la estructura RX_CONTEXT en el miembro Info.Length menos la longitud de la información del volumen devuelta. Si la llamada a MRxQueryVolumeInfo se realizó correctamente, RDBSS establece el miembro IoStatus.Information del IRP en IrpSp-Parameters.QueryVolume.Length> menos el miembro Info.LengthRemaining de la estructura RX_CONTEXT.
Para una solicitud de IRP_MJ_QUERY_VOLUME_INFORMATION con el miembro Info.FsInformationClass establecido en FileFsDeviceInformation, el minidirector de red devuelve la siguiente información en la estructura RX_CONTEXT a la que apunta el parámetro RxContext :
El miembro Info.Buffer contiene una estructura de FILE_FS_DEVICE_INFORMATION
El miembro Info.Buffer.Characteristics se establece en las características del volumen, que deben incluir FILE_REMOTE_DEVICE como una de las opciones.
El miembro Info.Buffer.DeviceType se establece en el miembro DeviceType de la estructura de NET_ROOT asociada. Si el miembro Type del NET_ROOT asociado es NET_ROOT_PIPE, el miembro Info.Buffer.DeviceType se establece en FILE_DEVICE_NAMED_PIPE.
Para una solicitud de IRP_MJ_QUERY_VOLUME_INFORMATION con el miembro Info.FsInformationClass establecido en FileFsVolumeInformation, el minidirector de red devuelve la siguiente información en la estructura RX_CONTEXT a la que apunta el parámetro RxContext :
El miembro Info.Buffer contiene una estructura FILE_FS_VOLUME_INFORMATION.
El miembro Info.Buffer se establece en el miembro VolumeInfo de la estructura de NET_ROOT asociada.
El miembro Info.LengthRemaining se establece en el miembro VolumeInfoLength de la estructura de NET_ROOT asociada.
Una llamada MRxQueryVolumeInfo desde RDBSS para IRP_MJ_FILE_SYSTEM_CONTROL es una solicitud para la información de seguimiento de vínculos. Antes de llamar a MRxQueryVolumeInfo para IRP_MJ_FILE_SYSTEM_CONTROL, RDBSS modifica los siguientes miembros de la estructura RX_CONTEXT a la que apunta el parámetro RxContext :
El miembro Info.FsInformationClass se establece en FileFsObjectIdInformation.
El miembro Info.Buffer se establece en una estructura FILE_FS_OBJECTID_INFORMATION.
El miembro Info.LengthRemaining se establece en sizeof(FILE_FS_OBJECTID_INFORMATION).
En este caso de una solicitud de IRP_MJ_FILE_SYSTEM_CONTROL, el miembro AssociatedIrp.SystemBuffer del IRP apunta a una estructura de LINK_TRACKING_INFORMATION.
Si una solicitud se inicia como un IRP_MJ_FILE_SYSTEM_CONTROL a MRxQueryVolumeInfo con un valor devuelto de STATUS_SUCCESS o STATUS_BUFFER_OVERFLOW, RDBSS copia el miembro ObjectId de la estructura de FILE_FS_OBJECTID_INFORMATION pasado en el miembro Info.Buffer de RX_CONTEXT estructura al miembro NetRoot-DiskParameters.VolumeId> de la estructura FCB y al miembro AssociatedIrp.SystemBuffer.VolumeId del IRP. Si la llamada a MRxQueryVolumeInfo se realizó correctamente, RDBSS establece el miembro Type de la estructura LINK_TRACKING_INFORMATION. Si el miembro NetRoot-Flags> de la estructura FCB tiene el NETROOT_FLAG_DFS_AWARE_NETROOT bit establecido, RDBSS establece el miembro Type en DfsLinkTrackingInformation. Si el miembro NetRoot-Flags> de la estructura FCB no tiene establecido el bit de NETROOT_FLAG_DFS_AWARE_NETROOT, RDBSS establece el miembro Type en NtfsLinkTrackingInformation. Si se ejecuta correctamente, RDBSS establece el miembro IoStatus.Information del IRP en el tamaño de una estructura de LINK_TRACKING_INFORMATION.
RDBSS llama a la rutina MRxSetEaInfo para solicitar que un minidirector de red establezca información de atributo extendido en un objeto del sistema de archivos.
RDBSS emite una llamada a MRxSetEaInfo en respuesta a la recepción de una solicitud de IRP_MJ_SET_EA .
Antes de llamar a MRxSetEaInfo, RDBSS modifica los siguientes miembros de la estructura RX_CONTEXT a la que apunta el parámetro RxContext :
El miembro Info.Buffer se establece en el búfer de usuario del paquete de solicitud de E/S. Este búfer ya está bloqueado por RDBSS si es necesario.
El miembro Info.LengthRemaining se establece en IrpSp-Parameters.QueryEa.Length>.
RDBSS llama a la rutina MRxSetFileInfo para solicitar que un minidirector de red establezca información de archivo en un objeto del sistema de archivos.
RDBSS emite una llamada a MRxSetFileInfo en respuesta a la recepción de una solicitud de IRP_MJ_SET_INFORMATION .
Antes de llamar a MRxSetFileInfo, RDBSS modifica los siguientes miembros de la estructura RX_CONTEXT a la que apunta el parámetro RxContext :
El miembro Info.FileInformationClass se establece en IrpSp-Parameters.SetFile.FileInformationClass>, el valor de FILE_INFORMATION_CLASS especificado.
El miembro Info.Buffer se establece en Irp-AssociatedIrp.SystemBuffer>.
El miembro Info.Length se establece en IrpSp-Parameters.SetFile.Length>.
RDBSS llama a la rutina MRxSetFileInfoAtCleanup para solicitar que un minidirector de red establezca información de archivo en un objeto del sistema de archivos durante la limpieza.
RDBSS emite una llamada a MRxSetFileInfoAtCleanup durante la limpieza, cuando se cierra el último identificador de un objeto de archivo. Esto es diferente de la operación de cierre que se invoca cuando se elimina la última referencia a un objeto de archivo.
RDBSS llama a MRxSetFileInfoAtCleanup si las marcas de tiempo de un archivo o el tamaño de un archivo han cambiado. Las llamadas a MRxSetFileInfoAtCleanup de RDBSS se realizan por separado para cada uno de estos cambios. Si el tamaño del archivo y las marcas de tiempo han cambiado, RDBSS realiza dos llamadas a MRxSetFileInfoAtCleanup.
Antes de llamar a MRxSetFileInfoAtCleanup, RDBSS modifica los siguientes miembros de la estructura RX_CONTEXT a la que apunta el parámetro RxContext si las marcas de tiempo de un archivo han cambiado:
El miembro Info.FileInformationClass se establece en un valor FILE_INFORMATION_CLASS de FileBasicInformation.
El miembro Info.Buffer se establece en una estructura de FILE_BASIC_INFORMATION asignada en la pila.
El miembro Info.Length se establece en el tamaño de una estructura de FILE_BASIC_INFORMATION.
Antes de llamar a MRxSetFileInfoAtCleanup, RDBSS modifica los siguientes miembros de la estructura RX_CONTEXT a la que apunta el parámetro RxContext si el tamaño de un archivo ha cambiado:
El miembro Info.FileInformationClass se establece en un valor FILE_INFORMATION_CLASS de FileEndOfFileInformation.
El miembro Info.Buffer se establece en una estructura de FILE_END_OF_FILE_INFORMATION asignada en la pila.
El miembro Info.Length se establece en sizeof(FILE_END_OF_FILE_INFORMATION).
RDBSS omite el valor devuelto de MRxSetFileInfoAtCleanup.
Un minidirector de red puede optar por no hacer nada en esta rutina y devolver STATUS_SUCCESS. Los cambios realizados en el tamaño del archivo o las marcas de tiempo se controlarán durante la operación de limpieza.
RDBSS llama a la rutina MRxSetQuotaInfo para solicitar que un minidirector de red establezca información de cuota en un objeto del sistema de archivos.
RDBSS emite una llamada a MRxSetQuotaInfo en respuesta a la recepción de una solicitud de IRP_MJ_SET_QUOTA .
Antes de llamar a MRxSetQuotaInfo, RDBSS modifica los siguientes miembros de la estructura RX_CONTEXT a la que apunta el parámetro RxContext :
El miembro Info.Buffer se establece en el búfer de usuario del paquete de solicitud de E/S. Este búfer ya está bloqueado por RDBSS si es necesario.
El miembro Info.LengthRemaining se establece en IrpSp-Parameters.SetQuota.Length>.
RDBSS llama a la rutina MRxSetSdInfo para solicitar que un minidirector de red establezca información del descriptor de seguridad en un objeto del sistema de archivos.
RDBSS emite una llamada a MRxSetSdInfo en respuesta a recibir una solicitud de IRP_MJ_SET_SECURITY .
Antes de llamar a MRxSetSdInfo, RDBSS modifica los siguientes miembros de la estructura RX_CONTEXT a la que apunta el parámetro RxContext :
El miembro SetSecurity.SecurityInformation se establece en IrpSp-Parameters.SetSecurity.SecurityInformation>.
El miembro SetSecurity.SecurityDescriptor se establece en IrpSp-Parameters.SetSecurity.SecurityDescriptor>.
RDBSS llama a la rutina MRxSetVolumeInfo para solicitar que una minidirectora de red establezca información de volumen.
RDBSS emite una llamada a MRxSetVolumeInfo en respuesta a la recepción de una solicitud de IRP_MJ_SET_VOLUME_INFORMATION .
Antes de llamar a MRxSetVolumeInfo, RDBSS modifica los siguientes miembros de la estructura RX_CONTEXT a la que apunta el parámetro RxContext :
El miembro Info.FsInformationClass se establece en IrpSp-Parameters.SetVolume.FsInformationClass>.
El miembro Info.Buffer se establece en Irp-AssociatedIrp.SystemBuffer>.
El miembro Info.LengthRemaining se establece en IrpSp-Parameters.SetVolume.Length>.
RDBSS llama a la rutina MRxShouldTryToCollapseThisOpen para solicitar que un minidirector de red indique si RDBSS debe intentar contraer una solicitud abierta en un objeto de sistema de archivos existente.
Se llama a MRxShouldTryToCollapseThisOpen para determinar si no se debe contraer una solicitud abierta.
Antes de llamar a MRxShouldTryToCollapseThisOpen, RDBSS modifica el siguiente miembro de la estructura RX_CONTEXT a la que apunta el parámetro RxContext :
El miembro pRelevantSrvOpen se establece en el SRV_OPEN.
La llamada a MRxShouldTryToCollapseThisOpen podría ser una solicitud de notificación de cambio para un directorio. Por lo tanto, es posible que el minidirector de red no permita contraer solicitudes abiertas para que la notificación de cambios funcione correctamente.
RdBSS no permite contraer se abre si el miembro Create.NtCreateParameters.CreateOptions de la estructura de RX_CONTEXT tiene la opción FILE_OPEN_FOR_BACKUP_INTENT o la opción FILE_DELETE_ON_CLOSE establecida.
RDBSS llama a la rutina MRxTruncate para solicitar que un minidirector de red trunca el contenido de un objeto del sistema de archivos.
Se llama a MRxTruncate como parte de las operaciones de limpieza si se cumplen las dos condiciones siguientes:
El objeto de archivo corresponde a un archivo o directorio de disco.
Esta es la última llamada de limpieza y el objeto de archivo se marcó para truncamiento.
El objeto de archivo se marca para truncamiento si el miembro fcbstate de la estructura FCB tiene establecido el bit FCB_STATE_TRUNCATE_ON_CLOSE. RDBSS anulará la inicialización de la asignación de caché en algún momento posterior.
Una llamada a MRxTruncate irá seguida de una llamada a MRxCleanupFobx como parte de la operación de limpieza.
RDBSS omite el valor devuelto de MRxTruncate.
RDBSS llama a la rutina MRxZeroExtend para solicitar que un minidirector de red trunque el contenido de un objeto del sistema de archivos.
Se llama a MRxZeroExtend como parte de las operaciones de limpieza si el objeto de archivo no se marcó para su eliminación y el objeto de archivo no es un archivo de paginación. Se llama a MRxZeroExtend para asegurarse de que la parte entre la longitud de datos válida y el tamaño del archivo está extendido a cero. Después de llamar a MRxZeroExtend, RDBSS establece el miembro Header.ValidDataLength.QuadPart de la estructura de una estructura FCB igual al miembro Header.FileSize.QuadPart de la estructura FCB.
Una llamada a MRxZeroExtend irá seguida de una llamada a MRxCleanupFobx como parte de la operación de limpieza.
RDBSS omite el valor devuelto de MRxZeroExtend.
RDBSS llama a la rutina MRxCleanupFobx para solicitar al minidirector de red que cierre una extensión de objeto del sistema de archivos. RDBSS emite esta llamada en respuesta a la recepción de una solicitud de IRP_MJ_CLEANUP en un objeto de archivo.
RDBSS llama a MRxCleanupFobx como parte de las operaciones de limpieza y cierre en un objeto de archivo.
MRxCleanupFobx no puede devolver un valor de STATUS_RETRY que indique que se debe reintentar la llamada. Si es necesario un bucle de reintento, debe controlarse internamente en la rutina MRxCleanupFobx mediante el minidirector de red.
Requisitos
Requisito | Value |
---|---|
Plataforma de destino | Escritorio |
Encabezado | mrx.h (incluya Mrx.h) |