NTSTATUS PvfsScheduleCancelNotify( PPVFS_IRP_CONTEXT pIrpContext ) { NTSTATUS ntError = STATUS_UNSUCCESSFUL; PPVFS_IRP_CONTEXT pIrpCtx = NULL; BAIL_ON_INVALID_PTR(pIrpContext->pScb, ntError); pIrpCtx = PvfsReferenceIrpContext(pIrpContext); ntError = LwRtlQueueWorkItem( gPvfsDriverState.ThreadPool, PvfsNotifyCleanIrpList, pIrpCtx, LW_SCHEDULE_HIGH_PRIORITY); BAIL_ON_NT_STATUS(ntError); error: if (!NT_SUCCESS(ntError)) { if (pIrpCtx) { PvfsReleaseIrpContext(&pIrpCtx); } } return ntError; }
static NTSTATUS PvfsNotifyAllocateFilter( PPVFS_NOTIFY_FILTER_RECORD *ppNotifyRecord, PPVFS_IRP_CONTEXT pIrpContext, PPVFS_CCB pCcb, FILE_NOTIFY_CHANGE NotifyFilter, BOOLEAN bWatchTree ) { NTSTATUS ntError = STATUS_UNSUCCESSFUL; PPVFS_NOTIFY_FILTER_RECORD pFilter = NULL; ntError = PvfsAllocateMemory( OUT_PPVOID(&pFilter), sizeof(PVFS_NOTIFY_FILTER_RECORD), TRUE); BAIL_ON_NT_STATUS(ntError); pFilter->pIrpContext = PvfsReferenceIrpContext(pIrpContext); pFilter->pCcb = PvfsReferenceCCB(pCcb); pFilter->NotifyFilter = NotifyFilter; pFilter->bWatchTree = bWatchTree; *ppNotifyRecord = pFilter; pFilter = NULL; cleanup: return ntError; error: goto cleanup; }
static NTSTATUS PvfsCreateSetAllocationContext( OUT PPVFS_PENDING_SET_ALLOCATION *ppSetAllocationContext, IN PPVFS_IRP_CONTEXT pIrpContext, IN PPVFS_CCB pCcb ) { NTSTATUS ntError = STATUS_UNSUCCESSFUL; PPVFS_PENDING_SET_ALLOCATION pSetAllocationCtx = NULL; ntError = PvfsAllocateMemory( (PVOID*)&pSetAllocationCtx, sizeof(PVFS_PENDING_READ)); BAIL_ON_NT_STATUS(ntError); pSetAllocationCtx->pIrpContext = PvfsReferenceIrpContext(pIrpContext); pSetAllocationCtx->pCcb = PvfsReferenceCCB(pCcb); *ppSetAllocationContext = pSetAllocationCtx; ntError = STATUS_SUCCESS; cleanup: return ntError; error: goto cleanup; }
static NTSTATUS PvfsCreateSetEndOfFileContext( OUT PPVFS_PENDING_SET_END_OF_FILE *ppSetEndOfFileContext, IN PPVFS_IRP_CONTEXT pIrpContext, IN PPVFS_CCB pCcb ) { NTSTATUS ntError = STATUS_UNSUCCESSFUL; PPVFS_PENDING_SET_END_OF_FILE pSetEndOfFileCtx = NULL; ntError = PvfsAllocateMemory( OUT_PPVOID(&pSetEndOfFileCtx), sizeof(PVFS_PENDING_SET_END_OF_FILE), TRUE); BAIL_ON_NT_STATUS(ntError); pSetEndOfFileCtx->pIrpContext = PvfsReferenceIrpContext(pIrpContext); pSetEndOfFileCtx->pCcb = PvfsReferenceCCB(pCcb); *ppSetEndOfFileContext = pSetEndOfFileCtx; ntError = STATUS_SUCCESS; cleanup: return ntError; error: goto cleanup; }
static NTSTATUS PvfsCreateReadContext( OUT PPVFS_PENDING_READ *ppReadContext, IN PPVFS_IRP_CONTEXT pIrpContext, IN PPVFS_CCB pCcb ) { NTSTATUS ntError = STATUS_UNSUCCESSFUL; PPVFS_PENDING_READ pReadCtx = NULL; ntError = PvfsAllocateMemory( OUT_PPVOID(&pReadCtx), sizeof(PVFS_PENDING_READ), FALSE); BAIL_ON_NT_STATUS(ntError); pReadCtx->pZctContext = NULL; pReadCtx->pIrpContext = PvfsReferenceIrpContext(pIrpContext); pReadCtx->pCcb = PvfsReferenceCCB(pCcb); if (IRP_ZCT_OPERATION_PREPARE == pIrpContext->pIrp->Args.ReadWrite.ZctOperation) { ntError = PvfsCreateZctContext( &pReadCtx->pZctContext, pIrpContext, pCcb); BAIL_ON_NT_STATUS(ntError); } *ppReadContext = pReadCtx; ntError = STATUS_SUCCESS; cleanup: return ntError; error: PvfsFreeReadContext(OUT_PPVOID(&pReadCtx)); goto cleanup; }
NTSTATUS PvfsAllocateCreateContext( OUT PPVFS_PENDING_CREATE *ppCreate, IN PPVFS_IRP_CONTEXT pIrpContext ) { NTSTATUS ntError = STATUS_UNSUCCESSFUL; PPVFS_PENDING_CREATE pCreateCtx = NULL; IRP_ARGS_CREATE Args = pIrpContext->pIrp->Args.Create; PIO_CREATE_SECURITY_CONTEXT pSecCtx = Args.SecurityContext; ntError = PvfsAllocateMemory( (PVOID*)&pCreateCtx, sizeof(PVFS_PENDING_CREATE)); BAIL_ON_NT_STATUS(ntError); ntError = PvfsCanonicalPathName( &pCreateCtx->pszOriginalFilename, Args.FileName); BAIL_ON_NT_STATUS(ntError); ntError = PvfsAllocateCCB(&pCreateCtx->pCcb); BAIL_ON_NT_STATUS(ntError); ntError = PvfsAcquireAccessToken(pCreateCtx->pCcb, pSecCtx); BAIL_ON_NT_STATUS(ntError); pCreateCtx->pIrpContext = PvfsReferenceIrpContext(pIrpContext); *ppCreate = pCreateCtx; pCreateCtx = NULL; cleanup: return ntError; error: PvfsFreeCreateContext((PVOID*)&pCreateCtx); goto cleanup; }