NTSTATUS PvfsStoreCCB( IO_FILE_HANDLE FileHandle, PPVFS_CCB pCCB ) { NTSTATUS ntError = STATUS_SUCCESS; ntError = IoFileSetContext(FileHandle, (PVOID)pCCB); BAIL_ON_NT_STATUS(ntError); cleanup: return ntError; error: goto cleanup; }
static VOID ItCreateInternal( IN PIRP pIrp ) { NTSTATUS status = STATUS_SUCCESS; int EE = 0; UNICODE_STRING path = pIrp->Args.Create.FileName.Name; PIT_CCB pCcb = NULL; status = ItpCreateCcb(&pCcb, &path); GOTO_CLEANUP_ON_STATUS_EE(status, EE); status = IoFileSetContext(pIrp->FileHandle, pCcb); GOTO_CLEANUP_ON_STATUS_EE(status, EE); pCcb = NULL; cleanup: ItpDestroyCcb(&pCcb); pIrp->IoStatusBlock.Status = status; }
static BOOLEAN RdrFinishCreate2( PRDR_OP_CONTEXT pContext, NTSTATUS status, PVOID pParam ) { PRDR_CCB2 pFile = pContext->State.Create.pFile2; PSMB_PACKET pPacket = pParam; PRDR_SMB2_CREATE_RESPONSE_HEADER pResponseHeader = NULL; PIRP pIrp = pContext->pIrp; PIO_CREDS pCreds = IoSecurityGetCredentials(pIrp->Args.Create.SecurityContext); PIO_SECURITY_CONTEXT_PROCESS_INFORMATION pProcessInfo = IoSecurityGetProcessInfo(pIrp->Args.Create.SecurityContext); if (status == STATUS_SUCCESS) { status = pPacket->pSMB2Header->error; } switch (status) { case STATUS_SUCCESS: break; default: pContext->Continue = RdrCreateTreeConnectComplete; pContext->State.Create.pFile2 = NULL; status = RdrDfsConnect( pFile->pTree->pSession->pSocket, pIrp->Args.Create.FileName.FileName, pCreds, pProcessInfo->Uid, status, &pContext->usTry, &pContext->State.Create.pwszFilename, &pContext->State.Create.pwszCanonicalPath, pContext); RdrReleaseFile2(pFile); pFile = NULL; } BAIL_ON_NT_STATUS(status); status = RdrSmb2DecodeCreateResponse(pPacket, &pResponseHeader); BAIL_ON_NT_STATUS(status); pFile->Fid = pResponseHeader->fid; status = IoFileSetContext(pContext->pIrp->FileHandle, pFile); BAIL_ON_NT_STATUS(status); cleanup: RdrFreePacket(pPacket); if (status != STATUS_PENDING) { pContext->pIrp->IoStatusBlock.Status = status; IoIrpComplete(pContext->pIrp); RdrFreeContext(pContext); } return FALSE; error: if (pFile) { RdrReleaseFile2(pFile); } goto cleanup; }