Changeset 78302 in vbox for trunk/src/VBox/Additions/WINNT/SharedFolders/driver/path.c
- Timestamp:
- Apr 26, 2019 12:44:17 AM (6 years ago)
- svn:sync-xref-src-repo-rev:
- 130267
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/VBox/Additions/WINNT/SharedFolders/driver/path.c
r78285 r78302 24 24 static NTSTATUS vbsfProcessCreate(PRX_CONTEXT RxContext, 25 25 PUNICODE_STRING RemainingName, 26 FILE_BASIC_INFORMATION *pFileBasicInfo, 27 FILE_STANDARD_INFORMATION *pFileStandardInfo, 26 SHFLFSOBJINFO *pInfo, 28 27 PVOID EaBuffer, 29 28 ULONG EaLength, … … 429 428 430 429 *pHandle = pCreateParms->Handle; 431 432 /* Translate attributes */ 433 pFileBasicInfo->FileAttributes = VBoxToNTFileAttributes(pCreateParms->Info.Attr.fMode); 434 435 /* Translate file times */ 436 pFileBasicInfo->CreationTime.QuadPart = RTTimeSpecGetNtTime(&pCreateParms->Info.BirthTime); /* ridiculous name */ 437 pFileBasicInfo->LastAccessTime.QuadPart = RTTimeSpecGetNtTime(&pCreateParms->Info.AccessTime); 438 pFileBasicInfo->LastWriteTime.QuadPart = RTTimeSpecGetNtTime(&pCreateParms->Info.ModificationTime); 439 pFileBasicInfo->ChangeTime.QuadPart = RTTimeSpecGetNtTime(&pCreateParms->Info.ChangeTime); 440 441 if (!FlagOn(pCreateParms->Info.Attr.fMode, RTFS_DOS_DIRECTORY)) 442 { 443 pFileStandardInfo->AllocationSize.QuadPart = pCreateParms->Info.cbAllocated; 444 pFileStandardInfo->EndOfFile.QuadPart = pCreateParms->Info.cbObject; 445 pFileStandardInfo->Directory = FALSE; 446 447 Log(("VBOXSF: vbsfProcessCreate: AllocationSize = 0x%RX64, EndOfFile = 0x%RX64\n", 448 pCreateParms->Info.cbAllocated, pCreateParms->Info.cbObject)); 449 } 450 else 451 { 452 pFileStandardInfo->AllocationSize.QuadPart = 0; 453 pFileStandardInfo->EndOfFile.QuadPart = 0; 454 pFileStandardInfo->Directory = TRUE; 455 } 456 pFileStandardInfo->NumberOfLinks = 0; 457 pFileStandardInfo->DeletePending = FALSE; 430 *pInfo = pCreateParms->Info; 458 431 459 432 vbsfFreeNonPagedMem(pCreateParms); … … 489 462 PUNICODE_STRING RemainingName = GET_ALREADY_PREFIXED_NAME_FROM_CONTEXT(RxContext); 490 463 491 FILE_BASIC_INFORMATION FileBasicInfo; 492 FILE_STANDARD_INFORMATION FileStandardInfo; 464 SHFLFSOBJINFO Info = {0}; 493 465 494 466 ULONG CreateAction = FILE_CREATED; … … 531 503 } 532 504 533 FileBasicInfo.FileAttributes = FILE_ATTRIBUTE_NORMAL;534 535 505 Status = vbsfProcessCreate(RxContext, 536 506 RemainingName, 537 &FileBasicInfo, 538 &FileStandardInfo, 507 &Info, 539 508 RxContext->Create.EaBuffer, 540 509 RxContext->Create.EaLength, … … 550 519 551 520 Log(("VBOXSF: MRxCreate: EOF is 0x%RX64 AllocSize is 0x%RX64\n", 552 FileStandardInfo.EndOfFile.QuadPart, FileStandardInfo.AllocationSize.QuadPart));521 Info.cbObject, Info.cbAllocated)); 553 522 554 523 RxContext->pFobx = RxCreateNetFobx(RxContext, SrvOpen); … … 567 536 if (capFcb->OpenCount == 0) 568 537 { 569 FCB_INIT_PACKET InitPacket; 538 FCB_INIT_PACKET InitPacket; 539 FILE_NETWORK_OPEN_INFORMATION Data; 540 ULONG NumberOfLinks = 0; /** @todo ?? */ 541 Data.CreationTime.QuadPart = RTTimeSpecGetNtTime(&Info.BirthTime); 542 Data.LastAccessTime.QuadPart = RTTimeSpecGetNtTime(&Info.AccessTime); 543 Data.LastWriteTime.QuadPart = RTTimeSpecGetNtTime(&Info.ModificationTime); 544 Data.ChangeTime.QuadPart = RTTimeSpecGetNtTime(&Info.ChangeTime); 545 Data.AllocationSize.QuadPart = Info.cbAllocated; 546 Data.EndOfFile.QuadPart = Info.cbObject; 547 Data.FileAttributes = VBoxToNTFileAttributes(Info.Attr.fMode); 570 548 RxFormInitPacket(InitPacket, 571 &FileBasicInfo.FileAttributes, 572 &FileStandardInfo.NumberOfLinks, 573 &FileBasicInfo.CreationTime, 574 &FileBasicInfo.LastAccessTime, 575 &FileBasicInfo.LastWriteTime, 576 &FileBasicInfo.ChangeTime, 577 &FileStandardInfo.AllocationSize, 578 &FileStandardInfo.EndOfFile, 579 &FileStandardInfo.EndOfFile); 549 &Data.FileAttributes, 550 &NumberOfLinks, 551 &Data.CreationTime, 552 &Data.LastAccessTime, 553 &Data.LastWriteTime, 554 &Data.ChangeTime, 555 &Data.AllocationSize, 556 &Data.EndOfFile, 557 &Data.EndOfFile); 558 /** @todo r=bird: Use FileTypeDirectory/RDBSS_NTC_STORAGE_TYPE_DIRECTORY here 559 * for directories? */ 580 560 RxFinishFcbInitialization(capFcb, RDBSS_STORAGE_NTC(FileTypeFile), &InitPacket); 581 561 } … … 598 578 } 599 579 600 Log(("VBOXSF: MRxCreate: FileBasicInformation: CreationTime %RX64\n", FileBasicInfo.CreationTime.QuadPart));601 Log(("VBOXSF: MRxCreate: FileBasicInformation: LastAccessTime %RX64\n", FileBasicInfo.LastAccessTime.QuadPart));602 Log(("VBOXSF: MRxCreate: FileBasicInformation: LastWriteTime %RX64\n", FileBasicInfo.LastWriteTime.QuadPart));603 Log(("VBOXSF: MRxCreate: FileBasicInformation: ChangeTime %RX64\n", FileBasicInfo.ChangeTime.QuadPart));604 Log(("VBOXSF: MRxCreate: FileBasicInformation: FileAttributes %RX32\n", FileBasicInfo.FileAttributes));605 606 580 pVBoxFobx->hFile = Handle; 607 581 pVBoxFobx->pSrvCall = RxContext->Create.pSrvCall; 608 pVBoxFobx->FileStandardInfo = FileStandardInfo; 609 pVBoxFobx->FileBasicInfo = FileBasicInfo; 610 pVBoxFobx->fKeepCreationTime = FALSE; 611 pVBoxFobx->fKeepLastAccessTime = FALSE; 612 pVBoxFobx->fKeepLastWriteTime = FALSE; 613 pVBoxFobx->fKeepChangeTime = FALSE; 614 pVBoxFobx->SetFileInfoOnCloseFlags = 0; 582 pVBoxFobx->Info = Info; 583 vbsfNtCopyInfoToLegacy(pVBoxFobx, &Info); 584 Log(("VBOXSF: MRxCreate: FileBasicInformation: CreationTime %RX64\n", pVBoxFobx->FileBasicInfo.CreationTime.QuadPart)); 585 Log(("VBOXSF: MRxCreate: FileBasicInformation: LastAccessTime %RX64\n", pVBoxFobx->FileBasicInfo.LastAccessTime.QuadPart)); 586 Log(("VBOXSF: MRxCreate: FileBasicInformation: LastWriteTime %RX64\n", pVBoxFobx->FileBasicInfo.LastWriteTime.QuadPart)); 587 Log(("VBOXSF: MRxCreate: FileBasicInformation: ChangeTime %RX64\n", pVBoxFobx->FileBasicInfo.ChangeTime.QuadPart)); 588 Log(("VBOXSF: MRxCreate: FileBasicInformation: FileAttributes %RX32\n", pVBoxFobx->FileBasicInfo.FileAttributes)); 589 if (!(Info.Attr.fMode & RTFS_DOS_DIRECTORY)) 590 Log(("VBOXSF: MRxCreate: AllocationSize = %#RX64, EndOfFile = %#RX64\n", 591 Info.cbAllocated, Info.cbObject)); 615 592 616 593 if (!RxIsFcbAcquiredExclusive(capFcb)) … … 675 652 } 676 653 677 NTSTATUS vbsfSetFileInfo(PMRX_VBOX_DEVICE_EXTENSION pDeviceExtension,678 PMRX_VBOX_NETROOT_EXTENSION pNetRootExtension,679 PMRX_VBOX_FOBX pVBoxFobx,680 PFILE_BASIC_INFORMATION pInfo,681 BYTE SetAttrFlags)654 static NTSTATUS vbsfSetFileInfoOnClose(PMRX_VBOX_DEVICE_EXTENSION pDeviceExtension, 655 PMRX_VBOX_NETROOT_EXTENSION pNetRootExtension, 656 PMRX_VBOX_FOBX pVBoxFobx, 657 PFILE_BASIC_INFORMATION pInfo, 658 BYTE SetAttrFlags) 682 659 { 683 660 NTSTATUS Status = STATUS_SUCCESS; … … 689 666 uint32_t cbBuffer = 0; 690 667 691 Log(("VBOXSF: vbsfSetFileInfo : SetAttrFlags 0x%02X\n", SetAttrFlags));692 Log(("VBOXSF: vbsfSetFileInfo : FileBasicInformation: CreationTime %RX64\n", pInfo->CreationTime.QuadPart));693 Log(("VBOXSF: vbsfSetFileInfo : FileBasicInformation: LastAccessTime %RX64\n", pInfo->LastAccessTime.QuadPart));694 Log(("VBOXSF: vbsfSetFileInfo : FileBasicInformation: LastWriteTime %RX64\n", pInfo->LastWriteTime.QuadPart));695 Log(("VBOXSF: vbsfSetFileInfo : FileBasicInformation: ChangeTime %RX64\n", pInfo->ChangeTime.QuadPart));696 Log(("VBOXSF: vbsfSetFileInfo : FileBasicInformation: FileAttributes %RX32\n", pInfo->FileAttributes));668 Log(("VBOXSF: vbsfSetFileInfoOnClose: SetAttrFlags 0x%02X\n", SetAttrFlags)); 669 Log(("VBOXSF: vbsfSetFileInfoOnClose: FileBasicInformation: CreationTime %RX64\n", pInfo->CreationTime.QuadPart)); 670 Log(("VBOXSF: vbsfSetFileInfoOnClose: FileBasicInformation: LastAccessTime %RX64\n", pInfo->LastAccessTime.QuadPart)); 671 Log(("VBOXSF: vbsfSetFileInfoOnClose: FileBasicInformation: LastWriteTime %RX64\n", pInfo->LastWriteTime.QuadPart)); 672 Log(("VBOXSF: vbsfSetFileInfoOnClose: FileBasicInformation: ChangeTime %RX64\n", pInfo->ChangeTime.QuadPart)); 673 Log(("VBOXSF: vbsfSetFileInfoOnClose: FileBasicInformation: FileAttributes %RX32\n", pInfo->FileAttributes)); 697 674 698 675 if (SetAttrFlags == 0) … … 721 698 if (pInfo->ChangeTime.QuadPart && (SetAttrFlags & VBOX_FOBX_F_INFO_CHANGE_TIME) != 0) 722 699 RTTimeSpecSetNtTime(&pSHFLFileInfo->ChangeTime, pInfo->ChangeTime.QuadPart); 723 if (pInfo->FileAttributes && (SetAttrFlags & VBOX_FOBX_F_INFO_ATTRIBUTES) != 0) 700 if (pInfo->FileAttributes && (SetAttrFlags & VBOX_FOBX_F_INFO_ATTRIBUTES) != 0) /// @todo r=bird: never ever set. 724 701 pSHFLFileInfo->Attr.fMode = NTToVBoxFileAttributes(pInfo->FileAttributes); 725 702 … … 763 740 * to cancel any effect of the file read/write operations on the host. 764 741 */ 765 Status = vbsfSetFileInfo (pDeviceExtension,766 pNetRootExtension,767 pVBoxFobx,768 &pVBoxFobx->FileBasicInfo,769 pVBoxFobx->SetFileInfoOnCloseFlags);742 Status = vbsfSetFileInfoOnClose(pDeviceExtension, 743 pNetRootExtension, 744 pVBoxFobx, 745 &pVBoxFobx->FileBasicInfo, 746 pVBoxFobx->SetFileInfoOnCloseFlags); 770 747 } 771 748 … … 865 842 vrc = VbglR0SfRemove(&pDeviceExtension->hgcmClient, &pNetRootExtension->map, 866 843 ParsedPath, 867 (pVBoxFobx->FileStandardInfo.Directory)? SHFL_REMOVE_DIR : SHFL_REMOVE_FILE);844 pVBoxFobx->Info.Attr.fMode & RTFS_DOS_DIRECTORY ? SHFL_REMOVE_DIR : SHFL_REMOVE_FILE); 868 845 869 846 if (ParsedPath) … … 937 914 938 915 /* Call host. */ 939 flags = pVBoxFobx-> FileStandardInfo.Directory? SHFL_RENAME_DIR : SHFL_RENAME_FILE;916 flags = pVBoxFobx->Info.Attr.fMode & RTFS_DOS_DIRECTORY ? SHFL_RENAME_DIR : SHFL_RENAME_FILE; 940 917 if (RenameInformation->ReplaceIfExists) 941 918 flags |= SHFL_RENAME_REPLACE_IF_EXISTS;
Note:
See TracChangeset
for help on using the changeset viewer.