_Use_decl_annotations_ VOID FilterCancelOidRequest( NDIS_HANDLE FilterModuleContext, PVOID RequestId ) /*++ Routine Description: Cancels an OID request If your filter driver does not intercept and hold onto any OID requests, then you do not need to implement this routine. You may simply omit it. Furthermore, if the filter only holds onto OID requests so it can pass down a clone (the most common case) the filter does not need to implement this routine; NDIS will then automatically request that the lower-level filter/miniport cancel your cloned OID. Most filters do not need to implement this routine. Arguments: FilterModuleContext - our filter RequestId - identifies the request(s) to cancel --*/ { PMS_FILTER pFilter = (PMS_FILTER)FilterModuleContext; PNDIS_OID_REQUEST Request = NULL; POTLWF_REQUEST_CONTEXT Context; PNDIS_OID_REQUEST OriginalRequest = NULL; BOOLEAN bFalse = FALSE; LogFuncEntryMsg(DRIVER_OID, "Filter: %p, RequestId: %p", FilterModuleContext, RequestId); FILTER_ACQUIRE_LOCK(&pFilter->PendingOidRequestLock, bFalse); Request = pFilter->PendingOidRequest; if (Request != NULL) { Context = (POTLWF_REQUEST_CONTEXT)(&Request->SourceReserved[0]); OriginalRequest = (*Context); } if ((OriginalRequest != NULL) && (OriginalRequest->RequestId == RequestId)) { FILTER_RELEASE_LOCK(&pFilter->PendingOidRequestLock, bFalse); NdisFCancelOidRequest(pFilter->FilterHandle, RequestId); } else { FILTER_RELEASE_LOCK(&pFilter->PendingOidRequestLock, bFalse); } LogFuncExit(DRIVER_OID); }
VOID FilterCancelOidRequest( IN NDIS_HANDLE FilterModuleContext, IN PVOID RequestId ) { PNETGW_ADAPT pAdapter = (PNETGW_ADAPT)FilterModuleContext; PNDIS_OID_REQUEST OriginalRequest = NULL; NdisAcquireSpinLock(&pAdapter->Lock); OriginalRequest = pAdapter->m_IntReq.pOrigReq; if ((OriginalRequest != NULL) && (OriginalRequest->RequestId == RequestId)) { NdisReleaseSpinLock(&pAdapter->Lock); NdisFCancelOidRequest(pAdapter->FilterHandle, RequestId); } else NdisReleaseSpinLock(&pAdapter->Lock); }