示例#1
0
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;
}
示例#2
0
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;
}