MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] Routine
Die MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] -Routine wird von RDBSS aufgerufen, um anzufordern, dass der Netzwerkminiumleitungsor mehrere Sperren entfernt, die für ein Dateiobjekt gespeichert sind.
Syntax
PMRX_CALLDOWN MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE];
NTSTATUS MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE](
_Inout_ PRX_CONTEXT RxContext
)
{ ... }
Parameter
RxContext [ein, aus]
Ein Zeiger auf die RX_CONTEXT-Struktur. Dieser Parameter enthält die IRP, die den Vorgang anfordert.
Rückgabewert
MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] gibt STATUS_SUCCESS nach Erfolg oder einen entsprechenden NTSTATUS-Wert zurück, z. B. einen der folgenden:
Rückgabecode | Beschreibung |
---|---|
STATUS_CONNECTION_DISCONNECTED | Die Verbindung wurde getrennt. |
STATUS_INSUFFICIENT_RESOURCES | Es waren nicht genügend Ressourcen vorhanden, um die Anforderung abzuschließen. |
STATUS_INVALID_NETWORK_RESPONSE | Vom Remoteserver wurde eine ungültige Antwort empfangen. |
STATUS_INVALID_PARAMETER | In RxContext wurde ein ungültiger Parameter angegeben. |
STATUS_LINK_FAILED | Der Versuch, die Verbindung mit einem Remoteserver wiederherzustellen, um die Anforderung abzuschließen, ist fehlgeschlagen. |
STATUS_NOT_IMPLEMENTED | Diese Routine wird nicht implementiert. |
STATUS_SHARING_VIOLATION | Es ist eine Freigabeverletzung aufgetreten. |
STATUS_UNSUCCESSFUL | Der Aufruf war nicht erfolgreich. |
Hinweise
RDBSS ruft MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] als Reaktion auf den Empfang einer IRP_MJ_LOCK_CONTROL-Anforderung mit dem Nebencode IRP_MN_UNLOCK_ALL oder IRP_MN_UNLOCK_ALL_BY_KEY auf.
Vor dem Aufrufen von MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE]ändert RDBSS die folgenden Member in der RX_CONTEXT Struktur, auf die der RxContext-Parameter verweist:
Der LowIoContext.Operation-Member ist auf LOWIO_OP_UNLOCK_MULTIPLE festgelegt.
Der LowIoContext.ResourceThreadId-Member ist auf den Thread des Prozesses festgelegt, der den Vorgang in RDBSS initiiert hat.
Der LowIoContext.ParamsFor.Locks.LockList-Member ist auf eine Liste von LOWIO_LOCK_LIST Elementen festgelegt. Jedes Element gibt einen Bereich an, der entsperrt werden soll.
Die zu entsperrenden Bytebereiche werden im Member LowIoContext.ParamsFor.Locks.LockList der RX_CONTEXT-Struktur angegeben. Die LOWIO_LOCK_LIST-Struktur lautet wie folgt:
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;
Der LowIoContext.Operation-Member von RX_CONTEXT gibt den auszuführenden E/A-Vorgang mit geringem E/A-Wert an. Es ist möglich, dass mehrere der niedrigen E/A-Routinen auf dieselbe Routine in einer Netzwerkminiumleitung verweisen, da der LowIoContext.Operation-Member verwendet werden kann, um den angeforderten E/A-Vorgang mit geringem E/A-Wert zu unterscheiden. Beispielsweise könnten alle E/A-Aufrufe im Zusammenhang mit Dateisperren dieselbe niedrige E/A-Routine im Netzwerkminiumleitungsor aufrufen, und diese Routine könnte den LowIoContext.Operation-Member verwenden, um zwischen dem angeforderten Sperr- und Entsperrvorgang zu unterscheiden.
Wenn die MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] -Routine lange dauern kann, sollte der Netzwerkminiumleitungstreiber die FCB-Struktur freigeben, bevor die Netzwerkkommunikation gestartet wird. Die FCB-Struktur kann durch Aufrufen von RxReleaseFcbResourceForThreadInMRx freigegeben werden. Während die MRxLowIOSubmit[LOWIO_OP_UNLOCK_MULTIPLE] -Routine verarbeitet wird, gibt das LowIoContext.ResourceThreadId-Mitglied von RX_CONTEXT garantiert den Thread des Prozesses an, der den Vorgang in RDBSS initiiert hat.
Das LowIoContext.ResourceThreadId-Mitglied von RX_CONTEXT kann verwendet werden, um die FCB-Struktur im Namen eines anderen Threads freizugeben. Wenn eine asynchrone Routine abgeschlossen ist, kann die FCB-Struktur, die aus dem anfänglichen Thread abgerufen wurde, freigegeben werden.
Anforderungen
Zielplattform |
Desktop |
Header |
Mrx.h (einschließlich Mrx.h) |
Weitere Informationen
MRxLowIOSubmit[LOWIO_OP_EXCLUSIVELOCK]
MRxLowIOSubmit[LOWIO_OP_FSCTL]
MRxLowIOSubmit[LOWIO_OP_IOCTL]
MRxLowIOSubmit[LOWIO_OP_NOTIFY_CHANGE_DIRECTORY]
MRxLowIOSubmit[LOWIO_OP_SHAREDLOCK]
MRxLowIOSubmit[LOWIO_OP_UNLOCK]