static VOID SrvUnblockOneWorker( IN PSMB_PROD_CONS_QUEUE pWorkQueue ) { NTSTATUS ntStatus = STATUS_SUCCESS; PSRV_EXEC_CONTEXT pExecContext = NULL; ntStatus = SrvBuildEmptyExecContext(&pExecContext); BAIL_ON_NT_STATUS(ntStatus); ntStatus = SrvProdConsEnqueue(pWorkQueue, pExecContext); BAIL_ON_NT_STATUS(ntStatus); cleanup: return; error: if (pExecContext) { SrvReleaseExecContext(pExecContext); } goto cleanup; }
NTSTATUS SrvBuildExecContext( IN PLWIO_SRV_CONNECTION pConnection, IN PSMB_PACKET pSmbRequest, IN BOOLEAN bInternal, OUT PSRV_EXEC_CONTEXT* ppContext ) { NTSTATUS ntStatus = STATUS_SUCCESS; PSRV_EXEC_CONTEXT pContext = NULL; ntStatus = SrvBuildEmptyExecContext(&pContext); BAIL_ON_NT_STATUS(ntStatus); ntStatus = SrvLogContextUpdateFilter( pContext->pLogContext, pConnection->pClientAddress, pConnection->clientAddrLen); BAIL_ON_NT_STATUS(ntStatus); pContext->pConnection = SrvConnectionAcquire(pConnection); pContext->pSmbRequest = pSmbRequest; if (pSmbRequest) { InterlockedIncrement(&pSmbRequest->refCount); } pContext->bInternal = bInternal; pContext->bInline = TRUE; *ppContext = pContext; cleanup: return ntStatus; error: *ppContext = NULL; goto cleanup; }