Changeset 146
- Timestamp:
- Oct 26, 2016, 8:42:51 AM (9 years ago)
- Author:
- Valery V. Sedletski
- Message:
-
fat32.ifs: Some previously uncommitted changes flush (FS_IOCTL code didn't went through, for some reason).
- File:
-
- 1 edited
- branches/fat32-0.10/src/ifs/fat32.c (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
-
branches/fat32-0.10/src/ifs/fat32.c
r145 r146 1513 1513 PVOLINFO pVolInfo; 1514 1514 ULONG hDEV; 1515 (追記) PBIOSPARAMETERBLOCK pBPB; (追記ここまで) 1515 1516 1516 1517 _asm push es; … … 1564 1565 if (cbParm > 0) 1565 1566 { 1566 rc = MY_PROBEBUF(PB_OP (削除) WRITE (削除ここまで), pParm, cbParm);1567 rc = MY_PROBEBUF(PB_OP(追記) READ (追記ここまで), pParm, cbParm); 1567 1568 if (rc) 1568 1569 { … … 1574 1575 if (pcbParm) 1575 1576 { 1576 rc = MY_PROBEBUF(PB_OP (削除) WRITE (削除ここまで), (PBYTE)pcbParm, sizeof (unsigned));1577 rc = MY_PROBEBUF(PB_OP(追記) READ (追記ここまで), (PBYTE)pcbParm, sizeof (unsigned)); 1577 1578 if (rc) 1578 1579 pcbParm = NULL; … … 1590 1591 { 1591 1592 case IOCTL_DISK : 1593 (追記) Message("pVolInfo->fLocked=%u, pVolInfo->ulOpenFiles=%lx", pVolInfo->fLocked, pVolInfo->ulOpenFiles); (追記ここまで) 1592 1594 switch (usFunc) 1593 1595 { 1594 1596 case DSK_LOCKDRIVE: 1595 cbParm = sizeof(UCHAR); 1596 if (pcbParm) 1597 { 1598 *pcbParm = cbParm; 1599 } 1600 cbData = sizeof(UCHAR); 1601 if (pcbData) 1602 { 1603 *pcbData = cbData; 1604 } 1605 hDEV = GetVolDevice(pVolInfo); 1606 rc = FSH_DOVOLIO2(hDEV, psffsi->sfi_selfsfn, 1607 usCat, usFunc, pParm, cbParm, pData, cbData); 1608 if (rc == NO_ERROR) 1609 { 1610 pVolInfo->fLocked = TRUE; 1611 GetProcInfo(&pVolInfo->ProcLocked, sizeof (PROCINFO)); 1612 } 1613 break; 1597 if (pVolInfo->fLocked) 1598 { 1599 Message("Drive locked, pVolInfo->fLocked=%lu", pVolInfo->fLocked); 1600 rc = ERROR_DRIVE_LOCKED; 1601 goto FS_IOCTLEXIT; 1602 } 1603 if (pVolInfo->ulOpenFiles > 1L) 1604 { 1605 Message("Cannot lock, %lu open files", pVolInfo->ulOpenFiles); 1606 rc = ERROR_DRIVE_LOCKED; 1607 goto FS_IOCTLEXIT; 1608 } 1609 1610 hDEV = GetVolDevice(pVolInfo); 1611 rc = FSH_DOVOLIO2(hDEV, psffsi->sfi_selfsfn, 1612 usCat, usFunc, pParm, cbParm, pData, cbData); 1613 1614 if (!rc) { 1615 pVolInfo->fLocked = TRUE; 1616 1617 if (pcbData) { 1618 *pcbData = cbData; 1619 } 1620 1621 if (pcbParm) { 1622 *pcbParm = cbParm; 1623 } 1624 } 1625 1626 GetProcInfo(&pVolInfo->ProcLocked, sizeof (PROCINFO)); 1627 break; 1614 1628 1615 1629 case DSK_UNLOCKDRIVE: 1616 cbParm = sizeof(UCHAR); 1617 if (pcbParm) 1618 { 1619 *pcbParm = cbParm; 1620 } 1621 cbData = sizeof(UCHAR); 1622 if (pcbData) 1623 { 1624 *pcbData = cbData; 1625 } 1626 hDEV = GetVolDevice(pVolInfo); 1627 rc = FSH_DOVOLIO2(hDEV, psffsi->sfi_selfsfn, 1628 usCat, usFunc, pParm, cbParm, pData, cbData); 1629 if (rc == NO_ERROR) 1630 { 1630 hDEV = GetVolDevice(pVolInfo); 1631 rc = FSH_DOVOLIO2(hDEV, psffsi->sfi_selfsfn, 1632 usCat, usFunc, pParm, cbParm, pData, cbData); 1633 1634 if (!rc) { 1635 1636 if (pcbData) { 1637 *pcbData = cbData; 1638 } 1639 1640 if (pcbParm) { 1641 *pcbParm = cbParm; 1642 } 1643 1644 if (pVolInfo->fLocked) 1645 { 1631 1646 pVolInfo->fLocked = FALSE; 1632 } 1633 break; 1634 1635 case DSK_BLOCKREMOVABLE: 1636 cbParm = 2*sizeof(UCHAR); 1637 if (pcbParm) 1638 { 1639 *pcbParm = cbParm; 1640 } 1641 cbData = sizeof(UCHAR); 1642 if (pcbData) 1643 { 1644 *pcbData = cbData; 1645 } 1646 hDEV = GetVolDevice(pVolInfo); 1647 rc = FSH_DOVOLIO2(hDEV, psffsi->sfi_selfsfn, 1648 usCat, usFunc, pParm, cbParm, pData, cbData); 1649 break; 1647 //rc = 0; 1648 } 1649 //else 1650 // rc = ERROR_INVALID_PARAMETER; 1651 } 1652 break; 1653 1654 case DSK_BLOCKREMOVABLE : 1655 //if (pcbData) 1656 // *pcbData = sizeof (BYTE); 1650 1657 1651 1658 hDEV = GetVolDevice(pVolInfo); … … 1674 1681 rc = ERROR_NOT_DOS_DISK; 1675 1682 else if (rc) 1676 rc = 0; (削除) (削除ここまで)1683 rc = 0;(追記) (追記ここまで) 1677 1684 1678 1685 if (pData) … … 1705 1712 *(PWORD)pData = 0x0006; 1706 1713 1714 (追記) Message("DSK_GETLOCKSTATUS, rc=%u", rc); (追記ここまで) 1707 1715 rc = 0; 1708 1716 break; … … 1723 1731 *pcbParm = cbParm; 1724 1732 } 1733 (追記) (追記ここまで) 1734 (追記) pBPB = (PBIOSPARAMETERBLOCK)pData; (追記ここまで) 1735 (追記) (追記ここまで) 1736 (追記) pBPB->bSectorsPerCluster = pVolInfo->BootSect.bpb.SectorsPerCluster; (追記ここまで) 1737 (追記) pBPB->usReservedSectors = pVolInfo->BootSect.bpb.ReservedSectors; (追記ここまで) 1738 (追記) pBPB->cFATs = pVolInfo->BootSect.bpb.NumberOfFATs; (追記ここまで) 1739 (追記) pBPB->cRootEntries = (USHORT)(GetChainSize(pVolInfo, pVolInfo->BootSect.bpb.RootDirStrtClus) * 128); (追記ここまで) 1740 (追記) if (pVolInfo->BootSect.bpb.BigSectorsPerFat < 0x10000L) (追記ここまで) 1741 (追記) pBPB->usSectorsPerFAT = (USHORT)pVolInfo->BootSect.bpb.BigSectorsPerFat; (追記ここまで) 1742 (追記) else (追記ここまで) 1743 (追記) pBPB->usSectorsPerFAT = 0xFFFF; // ??? vs! (追記ここまで) 1725 1744 } 1726 cbData = sizeof(BIOSPARAMETERBLOCK); 1727 if (pcbData) 1728 { 1729 *pcbData = cbData; 1730 } 1731 hDEV = GetVolDevice(pVolInfo); 1732 rc = FSH_DOVOLIO2(hDEV, psffsi->sfi_selfsfn, 1733 usCat, usFunc, pParm, cbParm, pData, cbData); 1734 1735 if (rc == NO_ERROR) 1736 { 1737 PBIOSPARAMETERBLOCK pBPB = (PBIOSPARAMETERBLOCK)pData; 1738 1739 pBPB->bSectorsPerCluster = pVolInfo->BootSect.bpb.SectorsPerCluster; 1740 pBPB->usReservedSectors = pVolInfo->BootSect.bpb.ReservedSectors; 1741 pBPB->cFATs = pVolInfo->BootSect.bpb.NumberOfFATs; 1742 pBPB->cRootEntries = (USHORT)(GetChainSize(pVolInfo, pVolInfo->BootSect.bpb.RootDirStrtClus) * 128); 1743 if (pVolInfo->BootSect.bpb.BigSectorsPerFat < 0x10000UL) 1744 pBPB->usSectorsPerFAT = (USHORT)pVolInfo->BootSect.bpb.BigSectorsPerFat; 1745 else 1746 pBPB->usSectorsPerFAT = 0xFFFF; 1747 } 1745 1748 1746 break; 1749 (削除) (削除ここまで)1750 1747 1751 1748 default : … … 1753 1750 rc = FSH_DOVOLIO2(hDEV, psffsi->sfi_selfsfn, 1754 1751 usCat, usFunc, pParm, cbParm, pData, cbData); 1752 (追記) (追記ここまで) 1753 (追記) if (!rc) { (追記ここまで) 1754 (追記) if (pcbData) { (追記ここまで) 1755 (追記) *pcbData = cbData; (追記ここまで) 1756 (追記) } (追記ここまで) 1757 (追記) (追記ここまで) 1758 (追記) if (pcbParm) { (追記ここまで) 1759 (追記) *pcbParm = cbParm; (追記ここまで) 1760 (追記) } (追記ここまで) 1761 (追記) } (追記ここまで) 1762 (追記) (追記ここまで) 1763 (追記) //Message("usFunc=default, cat=%u, func=%u rc=%u", usCat, usFunc, rc); (追記ここまで) 1755 1764 break; 1756 1765 } … … 1990 1999 rc = FSH_DOVOLIO2(hDEV, psffsi->sfi_selfsfn, 1991 2000 usCat, usFunc, pParm, cbParm, pData, cbData); 2001 (追記) (追記ここまで) 2002 (追記) if (!rc) { (追記ここまで) 2003 (追記) if (pcbData) { (追記ここまで) 2004 (追記) *pcbData = cbData; (追記ここまで) 2005 (追記) } (追記ここまで) 2006 (追記) (追記ここまで) 2007 (追記) if (pcbParm) { (追記ここまで) 2008 (追記) *pcbParm = cbParm; (追記ここまで) 2009 (追記) } (追記ここまで) 2010 (追記) } (追記ここまで) 2011 (追記) (追記ここまで) 1992 2012 break; 1993 2013 }
Note:
See TracChangeset
for help on using the changeset viewer.