Changeset 7262 for trunk/src/kernel32/hmdisk.cpp
- Timestamp:
- Oct 29, 2001, 2:36:32 PM (24 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/hmdisk.cpp
r7234 r7262 1 /* $Id: hmdisk.cpp,v 1.2 3 2001-10-27 08:26:06sandervl Exp $ */1 /* $Id: hmdisk.cpp,v 1.24 2001-10-29 13:36:32 sandervl Exp $ */ 2 2 3 3 /* … … 870 870 case IOCTL_DISK_CHECK_VERIFY: 871 871 case IOCTL_STORAGE_CHECK_VERIFY: 872 { 872 873 dprintf(("IOCTL_CDROM(DISK/STORAGE)CHECK_VERIFY %s", drvInfo->signature)); 873 874 if(lpBytesReturned) { 874 875 *lpBytesReturned = 0; 875 876 } 876 //TODO: check if disk has been inserted or removed877 if(pHMHandleData->hHMHandle == 0) {878 SetLastError(ERROR_NOT_READY); //NT4, SP6 returns this879 return FALSE;880 }881 882 if(drvInfo->driveType == DRIVE_CDROM)883 {884 DWORD parsize = 4;885 DWORD datasize = 4;886 DWORD status = 0;887 DWORD rc;888 889 //IOCTL_CDROM (0x80), CDROMDISK_DEVICESTATUS (0x60)890 rc = OSLibDosDevIOCtl(pHMHandleData->hHMHandle, 0x80, 0x60, &drvInfo->signature[0], 4, &parsize,891 &status, sizeof(status), &datasize);892 if(rc != NO_ERROR) {893 dprintf(("OSLibDosDevIOCtl failed with rc %d", rc));894 return FALSE;895 }896 dprintf(("CDROM status 0x%x", status));897 //if door open or no disk present, return FALSE898 if(status & (BIT_0|BIT_11)) {899 SetLastError(ERROR_NOT_READY); //NT4, SP6 returns this900 return FALSE;901 }902 SetLastError(NO_ERROR);903 return TRUE;904 }905 else {906 877 #pragma pack(1) 907 878 typedef struct … … 912 883 #pragma pack() 913 884 914 DWORD parsize = sizeof(ParameterBlock); 915 DWORD datasize = 2; 916 WORD status = 0; 917 DWORD rc; 918 ParameterBlock parm; 919 920 parm.ucCommandInfo = 0; 921 parm.usDriveUnit = drvInfo->driveLetter - 'A'; 922 //IOCTL_DISK (0x08), DSK_GETLOCKSTATUS (0x66) 923 rc = OSLibDosDevIOCtl(pHMHandleData->hHMHandle, 0x08, 0x66, &parm, sizeof(parm), &parsize, 924 &status, sizeof(status), &datasize); 925 if(rc != NO_ERROR) { 926 dprintf(("OSLibDosDevIOCtl failed with rc %d", rc)); 927 return FALSE; 928 } 929 dprintf(("Disk status 0x%x", status)); 930 dprintf(("WARNING: IOCTL_DISK_CHECK_VERIFY not properly implemented!!")); 931 //TODO: this doesn't seem to work 932 //if no disk present, return FALSE 933 // if(!(status & (BIT_2))) { 934 // SetLastError(ERROR_NOT_READY); //NT4, SP6 returns this 935 // return FALSE; 936 // } 937 SetLastError(NO_ERROR); 938 return TRUE; 885 DWORD parsize = sizeof(ParameterBlock); 886 DWORD datasize = 2; 887 WORD status = 0; 888 DWORD rc; 889 ParameterBlock parm; 890 891 parm.ucCommandInfo = 0; 892 parm.usDriveUnit = drvInfo->driveLetter - 'A'; 893 //IOCTL_DISK (0x08), DSK_GETLOCKSTATUS (0x66) 894 // rc = OSLibDosDevIOCtl(pHMHandleData->hHMHandle, 0x08, 0x66, &parm, sizeof(parm), &parsize, 895 //TODO: this doesn't work for floppies for some reason... 896 rc = OSLibDosDevIOCtl(-1, 0x08, 0x66, &parm, sizeof(parm), &parsize, 897 &status, sizeof(status), &datasize); 898 if(rc != NO_ERROR || datasize == 0) { 899 dprintf(("OSLibDosDevIOCtl failed with rc %d datasize %d", rc, datasize)); 900 return FALSE; 901 } 902 dprintf(("Disk status 0x%x", status)); 903 //if no disk present, return FALSE 904 if(!(status & (BIT_2))) { 905 SetLastError(ERROR_NOT_READY); //NT4, SP6 returns this 906 return FALSE; 939 907 } 940 908 SetLastError(NO_ERROR); 941 909 return TRUE; 910 } 942 911 943 912 case IOCTL_DISK_EJECT_MEDIA:
Note:
See TracChangeset
for help on using the changeset viewer.