Ignore:
Timestamp:
Sep 30, 2002, 2:53:27 PM (23 years ago)
Author:
sandervl
Message:

Fixes for volume access

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kernel32/hmdisk.cpp

    r9304 r9310  
    1 /* $Id: hmdisk.cpp,v 1.56 2002-09-27 14:35:56 sandervl Exp $ */
     1/* $Id: hmdisk.cpp,v 1.57 2002-09-30 12:53:27 sandervl Exp $ */
    22
    33/*
     
    3838#define BCDToDec(a) ((a >> 4) * 10 + (a & 0xF))
    3939
     40
     41#define UNMOUNTED_VOLUME(a) (a->fPhysicalDisk && (a->StartingOffset.HighPart != 0 || a->StartingOffset.LowPart != 0))
    4042
    4143typedef struct
     
    307309        drvInfo->dwPhysicalDiskNr = dwPhysicalDiskNr;
    308310        drvInfo->StartingOffset   = volext.Extents[0].StartingOffset;
     311        drvInfo->CurrentFilePointer = drvInfo->StartingOffset;
    309312        drvInfo->PartitionSize    = volext.Extents[0].ExtentLength;
    310313
     
    17301733    //if unmounted volume, check upper boundary as we're accessing the entire physical drive
    17311734    //instead of just the volume
    1732     if(drvInfo->fPhysicalDisk && (drvInfo->StartingOffset.HighPart != 0 ||
    1733        drvInfo->StartingOffset.LowPart != 0))
     1735    if(UNMOUNTED_VOLUME(drvInfo))
    17341736    {
    17351737        LARGE_INTEGER distance, result, endpos;
     
    17711773    //if unmounted volume, add starting offset to position as we're accessing the entire physical drive
    17721774    //instead of just the volume
    1773     if(drvInfo->fPhysicalDisk && (drvInfo->StartingOffset.HighPart != 0 ||
    1774        drvInfo->StartingOffset.LowPart != 0) && bRC == TRUE)
     1775    if(UNMOUNTED_VOLUME(drvInfo) && bRC == TRUE)
    17751776    {
    17761777        LARGE_INTEGER distance, result;
     
    18321833    //if unmounted volume, add starting offset to position as we're accessing the entire physical drive
    18331834    //instead of just the volume
    1834     if(drvInfo->fPhysicalDisk && (drvInfo->StartingOffset.HighPart != 0 ||
    1835        drvInfo->StartingOffset.LowPart != 0))
     1835    if(UNMOUNTED_VOLUME(drvInfo))
    18361836    {
    18371837        LARGE_INTEGER distance, result, endpos;
     
    18511851        //calculate end position in partition
    18521852        Add64(&drvInfo->StartingOffset, &drvInfo->PartitionSize, &endpos);
    1853         result.HighPart = 0;
    1854         result.LowPart  = 1;
    1855         Sub64(&endpos, &result, &endpos);
    18561853
    18571854        switch(dwMoveMethod) {
     
    18861883                                     (DWORD *)&result.HighPart,
    18871884                                     FILE_BEGIN);
    1888 
    1889         Sub64(&result, &drvInfo->StartingOffset, &drvInfo->CurrentFilePointer);
    1890         ret = drvInfo->CurrentFilePointer.LowPart;
     1885        //save new file pointer
     1886        drvInfo->CurrentFilePointer.HighPart = result.HighPart;
     1887        drvInfo->CurrentFilePointer.LowPart  = ret;
     1888
     1889        //subtract volume start to get relative offset
     1890        Sub64(&drvInfo->CurrentFilePointer, &drvInfo->StartingOffset, &result);
     1891        ret = result.LowPart;
    18911892        if(lpDistanceToMoveHigh) {
    1892             *lpDistanceToMoveHigh = drvInfo->CurrentFilePointer.HighPart;
     1893            *lpDistanceToMoveHigh = result.HighPart;
    18931894        }
    18941895    }
     
    19971998    //if unmounted volume, check upper boundary as we're accessing the entire physical drive
    19981999    //instead of just the volume
    1999     if(drvInfo->fPhysicalDisk && (drvInfo->StartingOffset.HighPart != 0 ||
    2000        drvInfo->StartingOffset.LowPart != 0))
     2000    if(UNMOUNTED_VOLUME(drvInfo))
    20012001    {
    20022002        LARGE_INTEGER distance, result, endpos;
     
    20242024    }
    20252025//  else {
     2026#if 0
     2027    bRC = TRUE;
     2028    *lpNumberOfBytesWritten = nNumberOfBytesToWrite;
     2029#else
    20262030    bRC = OSLibDosWrite(pHMHandleData->hHMHandle,
    20272031                            (PVOID)lpRealBuf,
    20282032                            nNumberOfBytesToWrite,
    20292033                            lpNumberOfBytesWritten);
     2034#endif
    20302035//  }
    20312036
    20322037    //if unmounted volume, add starting offset to position as we're accessing the entire physical drive
    20332038    //instead of just the volume
    2034     if(drvInfo->fPhysicalDisk && (drvInfo->StartingOffset.HighPart != 0 ||
    2035        drvInfo->StartingOffset.LowPart != 0) && bRC == TRUE)
     2039    if(UNMOUNTED_VOLUME(drvInfo) && bRC == TRUE)
    20362040    {
    20372041        LARGE_INTEGER distance, result;
Note: See TracChangeset for help on using the changeset viewer.