- Acquire the adapter lock instead of just raising to DISPATCH_LEVEL (MSDN hints at this in various areas)

svn path=/trunk/; revision=40446
This commit is contained in:
Cameron Gutman 2009-04-10 19:55:07 +00:00
parent 1e94c549a8
commit ba9ee79954
2 changed files with 35 additions and 56 deletions

View file

@ -355,11 +355,9 @@ MiniRequestComplete(
NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n")); NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n"));
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql); KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql);
KeAcquireSpinLockAtDpcLevel(&Adapter->NdisMiniportBlock.Lock);
Adapter->NdisMiniportBlock.PendingRequest = NULL; Adapter->NdisMiniportBlock.PendingRequest = NULL;
KeReleaseSpinLockFromDpcLevel(&Adapter->NdisMiniportBlock.Lock);
if( MacBlock->Binding->RequestCompleteHandler ) { if( MacBlock->Binding->RequestCompleteHandler ) {
(*MacBlock->Binding->RequestCompleteHandler)( (*MacBlock->Binding->RequestCompleteHandler)(
@ -367,7 +365,7 @@ MiniRequestComplete(
Request, Request,
Status); Status);
} }
KeLowerIrql(OldIrql); KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql);
} }
VOID NTAPI VOID NTAPI
@ -384,6 +382,7 @@ MiniSendComplete(
* Status = Status of send operation * Status = Status of send operation
*/ */
{ {
PLOGICAL_ADAPTER Adapter = MiniportAdapterHandle;
PADAPTER_BINDING AdapterBinding; PADAPTER_BINDING AdapterBinding;
KIRQL OldIrql; KIRQL OldIrql;
@ -391,12 +390,12 @@ MiniSendComplete(
AdapterBinding = (PADAPTER_BINDING)Packet->Reserved[0]; AdapterBinding = (PADAPTER_BINDING)Packet->Reserved[0];
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql); KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql);
(*AdapterBinding->ProtocolBinding->Chars.SendCompleteHandler)( (*AdapterBinding->ProtocolBinding->Chars.SendCompleteHandler)(
AdapterBinding->NdisOpenBlock.ProtocolBindingContext, AdapterBinding->NdisOpenBlock.ProtocolBindingContext,
Packet, Packet,
Status); Status);
KeLowerIrql(OldIrql); KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql);
} }
@ -417,6 +416,7 @@ MiniTransferDataComplete(
IN NDIS_STATUS Status, IN NDIS_STATUS Status,
IN UINT BytesTransferred) IN UINT BytesTransferred)
{ {
PLOGICAL_ADAPTER Adapter = MiniportAdapterHandle;
PADAPTER_BINDING AdapterBinding; PADAPTER_BINDING AdapterBinding;
KIRQL OldIrql; KIRQL OldIrql;
@ -424,13 +424,13 @@ MiniTransferDataComplete(
AdapterBinding = (PADAPTER_BINDING)Packet->Reserved[0]; AdapterBinding = (PADAPTER_BINDING)Packet->Reserved[0];
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql); KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql);
(*AdapterBinding->ProtocolBinding->Chars.TransferDataCompleteHandler)( (*AdapterBinding->ProtocolBinding->Chars.TransferDataCompleteHandler)(
AdapterBinding->NdisOpenBlock.ProtocolBindingContext, AdapterBinding->NdisOpenBlock.ProtocolBindingContext,
Packet, Packet,
Status, Status,
BytesTransferred); BytesTransferred);
KeLowerIrql(OldIrql); KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql);
} }
@ -605,7 +605,7 @@ MiniQueryInformation(
NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n")); NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n"));
/* call the miniport's queryinfo handler */ /* call the miniport's queryinfo handler */
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql); KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql);
NdisStatus = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.QueryInformationHandler)( NdisStatus = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.QueryInformationHandler)(
Adapter->NdisMiniportBlock.MiniportAdapterContext, Adapter->NdisMiniportBlock.MiniportAdapterContext,
Oid, Oid,
@ -613,7 +613,7 @@ MiniQueryInformation(
Size, Size,
BytesWritten, BytesWritten,
&BytesNeeded); &BytesNeeded);
KeLowerIrql(OldIrql); KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql);
/* FIXME: Wait in pending case! */ /* FIXME: Wait in pending case! */
@ -634,11 +634,11 @@ MiniCheckForHang( PLOGICAL_ADAPTER Adapter )
BOOLEAN Ret = FALSE; BOOLEAN Ret = FALSE;
KIRQL OldIrql; KIRQL OldIrql;
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql); KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql);
if (Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.CheckForHangHandler) if (Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.CheckForHangHandler)
Ret = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.CheckForHangHandler)( Ret = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.CheckForHangHandler)(
Adapter->NdisMiniportBlock.MiniportAdapterContext); Adapter->NdisMiniportBlock.MiniportAdapterContext);
KeLowerIrql(OldIrql); KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql);
return Ret; return Ret;
} }
@ -667,16 +667,14 @@ MiniReset(
NdisMIndicateStatus(Adapter, NDIS_STATUS_RESET_START, NULL, 0); NdisMIndicateStatus(Adapter, NDIS_STATUS_RESET_START, NULL, 0);
NdisMIndicateStatusComplete(Adapter); NdisMIndicateStatusComplete(Adapter);
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql); KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql);
Status = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.ResetHandler)( Status = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.ResetHandler)(
Adapter->NdisMiniportBlock.MiniportAdapterContext, Adapter->NdisMiniportBlock.MiniportAdapterContext,
AddressingReset); AddressingReset);
KeAcquireSpinLockAtDpcLevel(&Adapter->NdisMiniportBlock.Lock);
Adapter->NdisMiniportBlock.ResetStatus = Status; Adapter->NdisMiniportBlock.ResetStatus = Status;
KeReleaseSpinLockFromDpcLevel(&Adapter->NdisMiniportBlock.Lock);
KeLowerIrql(OldIrql); KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql);
if (Status != NDIS_STATUS_PENDING) { if (Status != NDIS_STATUS_PENDING) {
NdisMIndicateStatus(Adapter, NDIS_STATUS_RESET_END, NULL, 0); NdisMIndicateStatus(Adapter, NDIS_STATUS_RESET_END, NULL, 0);
@ -854,11 +852,9 @@ MiniDoRequest(
KIRQL OldIrql; KIRQL OldIrql;
NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n")); NDIS_DbgPrint(DEBUG_MINIPORT, ("Called.\n"));
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql); KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql);
KeAcquireSpinLockAtDpcLevel(&Adapter->NdisMiniportBlock.Lock);
Adapter->NdisMiniportBlock.PendingRequest = NdisRequest; Adapter->NdisMiniportBlock.PendingRequest = NdisRequest;
KeReleaseSpinLockFromDpcLevel(&Adapter->NdisMiniportBlock.Lock);
switch (NdisRequest->RequestType) switch (NdisRequest->RequestType)
{ {
@ -887,12 +883,10 @@ MiniDoRequest(
} }
if (Status != NDIS_STATUS_PENDING) { if (Status != NDIS_STATUS_PENDING) {
KeAcquireSpinLockAtDpcLevel(&Adapter->NdisMiniportBlock.Lock);
Adapter->NdisMiniportBlock.PendingRequest = NULL; Adapter->NdisMiniportBlock.PendingRequest = NULL;
KeReleaseSpinLockFromDpcLevel(&Adapter->NdisMiniportBlock.Lock);
} }
KeLowerIrql(OldIrql); KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql);
return Status; return Status;
} }
@ -909,12 +903,10 @@ NdisMSetInformationComplete(
{ {
PLOGICAL_ADAPTER Adapter = PLOGICAL_ADAPTER Adapter =
(PLOGICAL_ADAPTER)MiniportAdapterHandle; (PLOGICAL_ADAPTER)MiniportAdapterHandle;
KIRQL OldIrql;
ASSERT(Adapter); ASSERT(Adapter);
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql); /* This isn't a handler supplied by the miniport */
if (Adapter->NdisMiniportBlock.SetCompleteHandler) if (Adapter->NdisMiniportBlock.SetCompleteHandler)
(Adapter->NdisMiniportBlock.SetCompleteHandler)(MiniportAdapterHandle, Status); (Adapter->NdisMiniportBlock.SetCompleteHandler)(MiniportAdapterHandle, Status);
KeLowerIrql(OldIrql);
} }
@ -930,12 +922,10 @@ NdisMQueryInformationComplete(
{ {
PLOGICAL_ADAPTER Adapter = PLOGICAL_ADAPTER Adapter =
(PLOGICAL_ADAPTER)MiniportAdapterHandle; (PLOGICAL_ADAPTER)MiniportAdapterHandle;
KIRQL OldIrql;
ASSERT(Adapter); ASSERT(Adapter);
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql); /* This isn't a handler supplied by the miniport */
if( Adapter->NdisMiniportBlock.QueryCompleteHandler ) if( Adapter->NdisMiniportBlock.QueryCompleteHandler )
(Adapter->NdisMiniportBlock.QueryCompleteHandler)(MiniportAdapterHandle, Status); (Adapter->NdisMiniportBlock.QueryCompleteHandler)(MiniportAdapterHandle, Status);
KeLowerIrql(OldIrql);
} }
VOID VOID
@ -980,13 +970,11 @@ MiniportWorker(IN PDEVICE_OBJECT DeviceObject, IN PVOID Context)
else else
{ {
/* SendPackets is called at DISPATCH_LEVEL for all serialized miniports */ /* SendPackets is called at DISPATCH_LEVEL for all serialized miniports */
KeRaiseIrql(DISPATCH_LEVEL, &RaiseOldIrql); KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &RaiseOldIrql);
{
NDIS_DbgPrint(MAX_TRACE, ("Calling miniport's SendPackets handler\n")); NDIS_DbgPrint(MAX_TRACE, ("Calling miniport's SendPackets handler\n"));
(*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.SendPacketsHandler)( (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.SendPacketsHandler)(
Adapter->NdisMiniportBlock.MiniportAdapterContext, (PPNDIS_PACKET)&WorkItemContext, 1); Adapter->NdisMiniportBlock.MiniportAdapterContext, (PPNDIS_PACKET)&WorkItemContext, 1);
} KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, RaiseOldIrql);
KeLowerIrql(RaiseOldIrql);
NdisStatus = NDIS_GET_PACKET_STATUS((PNDIS_PACKET)WorkItemContext); NdisStatus = NDIS_GET_PACKET_STATUS((PNDIS_PACKET)WorkItemContext);
if( NdisStatus == NDIS_STATUS_RESOURCES ) { if( NdisStatus == NDIS_STATUS_RESOURCES ) {
@ -1008,13 +996,13 @@ MiniportWorker(IN PDEVICE_OBJECT DeviceObject, IN PVOID Context)
else else
{ {
/* Send is called at DISPATCH_LEVEL for all serialized miniports */ /* Send is called at DISPATCH_LEVEL for all serialized miniports */
KeRaiseIrql(DISPATCH_LEVEL, &RaiseOldIrql); KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &RaiseOldIrql);
NDIS_DbgPrint(MAX_TRACE, ("Calling miniport's Send handler\n")); NDIS_DbgPrint(MAX_TRACE, ("Calling miniport's Send handler\n"));
NdisStatus = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.SendHandler)( NdisStatus = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.SendHandler)(
Adapter->NdisMiniportBlock.MiniportAdapterContext, (PNDIS_PACKET)WorkItemContext, Adapter->NdisMiniportBlock.MiniportAdapterContext, (PNDIS_PACKET)WorkItemContext,
((PNDIS_PACKET)WorkItemContext)->Private.Flags); ((PNDIS_PACKET)WorkItemContext)->Private.Flags);
NDIS_DbgPrint(MAX_TRACE, ("back from miniport's send handler\n")); NDIS_DbgPrint(MAX_TRACE, ("back from miniport's send handler\n"));
KeLowerIrql(RaiseOldIrql); KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, RaiseOldIrql);
if( NdisStatus == NDIS_STATUS_RESOURCES ) { if( NdisStatus == NDIS_STATUS_RESOURCES ) {
MiniQueueWorkItem(Adapter, WorkItemType, WorkItemContext, TRUE); MiniQueueWorkItem(Adapter, WorkItemType, WorkItemContext, TRUE);
break; break;
@ -1046,19 +1034,14 @@ MiniportWorker(IN PDEVICE_OBJECT DeviceObject, IN PVOID Context)
NdisMIndicateStatus(Adapter, NDIS_STATUS_RESET_START, NULL, 0); NdisMIndicateStatus(Adapter, NDIS_STATUS_RESET_START, NULL, 0);
NdisMIndicateStatusComplete(Adapter); NdisMIndicateStatusComplete(Adapter);
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql); KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql);
NdisStatus = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.ResetHandler)( NdisStatus = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.ResetHandler)(
Adapter->NdisMiniportBlock.MiniportAdapterContext, Adapter->NdisMiniportBlock.MiniportAdapterContext,
&AddressingReset); &AddressingReset);
if (NdisStatus == NDIS_STATUS_PENDING) Adapter->NdisMiniportBlock.ResetStatus = NdisStatus;
{
KeAcquireSpinLockAtDpcLevel(&Adapter->NdisMiniportBlock.Lock);
Adapter->NdisMiniportBlock.ResetStatus = NDIS_STATUS_PENDING;
KeReleaseSpinLockFromDpcLevel(&Adapter->NdisMiniportBlock.Lock);
}
KeLowerIrql(OldIrql); KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql);
if (NdisStatus != NDIS_STATUS_PENDING) if (NdisStatus != NDIS_STATUS_PENDING)
MiniResetComplete(Adapter, NdisStatus, AddressingReset); MiniResetComplete(Adapter, NdisStatus, AddressingReset);

View file

@ -204,13 +204,11 @@ proSendPacketToMiniport(PLOGICAL_ADAPTER Adapter, PNDIS_PACKET Packet)
NdisStatus = NDIS_STATUS_PENDING; NdisStatus = NDIS_STATUS_PENDING;
} else { } else {
/* SendPackets is called at DISPATCH_LEVEL for all serialized miniports */ /* SendPackets is called at DISPATCH_LEVEL for all serialized miniports */
KeRaiseIrql(DISPATCH_LEVEL, &RaiseOldIrql); KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &RaiseOldIrql);
{
NDIS_DbgPrint(MAX_TRACE, ("Calling miniport's SendPackets handler\n")); NDIS_DbgPrint(MAX_TRACE, ("Calling miniport's SendPackets handler\n"));
(*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.SendPacketsHandler)( (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.SendPacketsHandler)(
Adapter->NdisMiniportBlock.MiniportAdapterContext, &Packet, 1); Adapter->NdisMiniportBlock.MiniportAdapterContext, &Packet, 1);
} KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, RaiseOldIrql);
KeLowerIrql(RaiseOldIrql);
NdisStatus = NDIS_GET_PACKET_STATUS(Packet); NdisStatus = NDIS_GET_PACKET_STATUS(Packet);
if (NdisStatus == NDIS_STATUS_RESOURCES) { if (NdisStatus == NDIS_STATUS_RESOURCES) {
@ -229,12 +227,12 @@ proSendPacketToMiniport(PLOGICAL_ADAPTER Adapter, PNDIS_PACKET Packet)
NDIS_DbgPrint(MAX_TRACE, ("back from miniport's send handler\n")); NDIS_DbgPrint(MAX_TRACE, ("back from miniport's send handler\n"));
} else { } else {
/* Send is called at DISPATCH_LEVEL for all serialized miniports */ /* Send is called at DISPATCH_LEVEL for all serialized miniports */
KeRaiseIrql(DISPATCH_LEVEL, &RaiseOldIrql); KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &RaiseOldIrql);
NDIS_DbgPrint(MAX_TRACE, ("Calling miniport's Send handler\n")); NDIS_DbgPrint(MAX_TRACE, ("Calling miniport's Send handler\n"));
NdisStatus = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.SendHandler)( NdisStatus = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.SendHandler)(
Adapter->NdisMiniportBlock.MiniportAdapterContext, Packet, Packet->Private.Flags); Adapter->NdisMiniportBlock.MiniportAdapterContext, Packet, Packet->Private.Flags);
NDIS_DbgPrint(MAX_TRACE, ("back from miniport's send handler\n")); NDIS_DbgPrint(MAX_TRACE, ("back from miniport's send handler\n"));
KeLowerIrql(RaiseOldIrql); KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, RaiseOldIrql);
if (NdisStatus == NDIS_STATUS_RESOURCES) { if (NdisStatus == NDIS_STATUS_RESOURCES) {
MiniQueueWorkItem(Adapter, NdisWorkItemSend, Packet, TRUE); MiniQueueWorkItem(Adapter, NdisWorkItemSend, Packet, TRUE);
@ -274,8 +272,6 @@ ProSend(
Adapter = AdapterBinding->Adapter; Adapter = AdapterBinding->Adapter;
ASSERT(Adapter); ASSERT(Adapter);
/* if the following is not true, KeRaiseIrql() below will break */
ASSERT(KeGetCurrentIrql() <= DISPATCH_LEVEL); ASSERT(KeGetCurrentIrql() <= DISPATCH_LEVEL);
/* XXX what is this crazy black magic? */ /* XXX what is this crazy black magic? */
@ -326,10 +322,10 @@ ProSendPackets(
else else
{ {
/* SendPackets is called at DISPATCH_LEVEL for all serialized miniports */ /* SendPackets is called at DISPATCH_LEVEL for all serialized miniports */
KeRaiseIrql(DISPATCH_LEVEL, &RaiseOldIrql); KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &RaiseOldIrql);
(*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.SendPacketsHandler)( (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.SendPacketsHandler)(
Adapter->NdisMiniportBlock.MiniportAdapterContext, PacketArray, NumberOfPackets); Adapter->NdisMiniportBlock.MiniportAdapterContext, PacketArray, NumberOfPackets);
KeLowerIrql(RaiseOldIrql); KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, RaiseOldIrql);
for (i = 0; i < NumberOfPackets; i++) for (i = 0; i < NumberOfPackets; i++)
{ {
NdisStatus = NDIS_GET_PACKET_STATUS(PacketArray[i]); NdisStatus = NDIS_GET_PACKET_STATUS(PacketArray[i]);
@ -353,7 +349,7 @@ ProSendPackets(
else else
{ {
/* Send is called at DISPATCH_LEVEL for all serialized miniports */ /* Send is called at DISPATCH_LEVEL for all serialized miniports */
KeRaiseIrql(DISPATCH_LEVEL, &RaiseOldIrql); KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &RaiseOldIrql);
for (i = 0; i < NumberOfPackets; i++) for (i = 0; i < NumberOfPackets; i++)
{ {
NdisStatus = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.SendHandler)( NdisStatus = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.SendHandler)(
@ -361,7 +357,7 @@ ProSendPackets(
if (NdisStatus != NDIS_STATUS_PENDING) if (NdisStatus != NDIS_STATUS_PENDING)
MiniSendComplete(Adapter, PacketArray[i], NdisStatus); MiniSendComplete(Adapter, PacketArray[i], NdisStatus);
} }
KeLowerIrql(RaiseOldIrql); KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, RaiseOldIrql);
} }
} }
} }
@ -408,7 +404,7 @@ ProTransferData(
return NDIS_STATUS_SUCCESS; return NDIS_STATUS_SUCCESS;
} }
KeRaiseIrql(DISPATCH_LEVEL, &OldIrql); KeAcquireSpinLock(&Adapter->NdisMiniportBlock.Lock, &OldIrql);
Status = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.TransferDataHandler)( Status = (*Adapter->NdisMiniportBlock.DriverHandle->MiniportCharacteristics.TransferDataHandler)(
Packet, Packet,
@ -418,7 +414,7 @@ ProTransferData(
ByteOffset, ByteOffset,
BytesToTransfer); BytesToTransfer);
KeLowerIrql(OldIrql); KeReleaseSpinLock(&Adapter->NdisMiniportBlock.Lock, OldIrql);
return Status; return Status;
} }