VirtualBox

Ignore:
Timestamp:
Apr 26, 2019 12:44:17 AM (6 years ago)
Author:
vboxsync
svn:sync-xref-src-repo-rev:
130267
Message:

winnt/vboxsf: Converting VBoxMRxQueryFileInfo to VbglR0SfHostReqQueryObjInfo and tried to do some much needed cleaning up in that function. Tried to minimize impact elsewhere to keep the change small. bugref:9172

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/Additions/WINNT/SharedFolders/driver/path.c

    r78285 r78302  
    2424static NTSTATUS vbsfProcessCreate(PRX_CONTEXT RxContext,
    2525                                  PUNICODE_STRING RemainingName,
    26                                   FILE_BASIC_INFORMATION *pFileBasicInfo,
    27                                   FILE_STANDARD_INFORMATION *pFileStandardInfo,
     26                                  SHFLFSOBJINFO *pInfo,
    2827                                  PVOID EaBuffer,
    2928                                  ULONG EaLength,
     
    429428
    430429    *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;
    458431
    459432    vbsfFreeNonPagedMem(pCreateParms);
     
    489462    PUNICODE_STRING RemainingName = GET_ALREADY_PREFIXED_NAME_FROM_CONTEXT(RxContext);
    490463
    491     FILE_BASIC_INFORMATION FileBasicInfo;
    492     FILE_STANDARD_INFORMATION FileStandardInfo;
     464    SHFLFSOBJINFO Info = {0};
    493465
    494466    ULONG CreateAction = FILE_CREATED;
     
    531503    }
    532504
    533     FileBasicInfo.FileAttributes = FILE_ATTRIBUTE_NORMAL;
    534 
    535505    Status = vbsfProcessCreate(RxContext,
    536506                               RemainingName,
    537                                &FileBasicInfo,
    538                                &FileStandardInfo,
     507                               &Info,
    539508                               RxContext->Create.EaBuffer,
    540509                               RxContext->Create.EaLength,
     
    550519
    551520    Log(("VBOXSF: MRxCreate: EOF is 0x%RX64 AllocSize is 0x%RX64\n",
    552          FileStandardInfo.EndOfFile.QuadPart, FileStandardInfo.AllocationSize.QuadPart));
     521         Info.cbObject, Info.cbAllocated));
    553522
    554523    RxContext->pFobx = RxCreateNetFobx(RxContext, SrvOpen);
     
    567536    if (capFcb->OpenCount == 0)
    568537    {
    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);
    570548        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? */
    580560        RxFinishFcbInitialization(capFcb, RDBSS_STORAGE_NTC(FileTypeFile), &InitPacket);
    581561    }
     
    598578    }
    599579
    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 
    606580    pVBoxFobx->hFile = Handle;
    607581    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));
    615592
    616593    if (!RxIsFcbAcquiredExclusive(capFcb))
     
    675652}
    676653
    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)
     654static 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)
    682659{
    683660    NTSTATUS Status = STATUS_SUCCESS;
     
    689666    uint32_t cbBuffer = 0;
    690667
    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));
    697674
    698675    if (SetAttrFlags == 0)
     
    721698    if (pInfo->ChangeTime.QuadPart && (SetAttrFlags & VBOX_FOBX_F_INFO_CHANGE_TIME) != 0)
    722699        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.
    724701        pSHFLFileInfo->Attr.fMode = NTToVBoxFileAttributes(pInfo->FileAttributes);
    725702
     
    763740         * to cancel any effect of the file read/write operations on the host.
    764741         */
    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);
    770747    }
    771748
     
    865842    vrc = VbglR0SfRemove(&pDeviceExtension->hgcmClient, &pNetRootExtension->map,
    866843                         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);
    868845
    869846    if (ParsedPath)
     
    937914
    938915    /* 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;
    940917    if (RenameInformation->ReplaceIfExists)
    941918        flags |= SHFL_RENAME_REPLACE_IF_EXISTS;
Note: See TracChangeset for help on using the changeset viewer.

© 2025 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette