Changeset 4588 for trunk/src/kernel32
- Timestamp:
- Nov 14, 2000, 3:27:04 PM (25 years ago)
- Location:
- trunk/src/kernel32
- Files:
-
- 7 edited
-
HandleManager.cpp (modified) (8 diffs)
-
hmcomm.cpp (modified) (6 diffs)
-
hmcomm.h (modified) (2 diffs)
-
hmdevice.cpp (modified) (3 diffs)
-
hmdevice.h (modified) (2 diffs)
-
hmdisk.cpp (modified) (6 diffs)
-
hmdisk.h (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/HandleManager.cpp
r4487 r4588 1 /* $Id: HandleManager.cpp,v 1.5 3 2000-10-16 17:56:08sandervl Exp $ */1 /* $Id: HandleManager.cpp,v 1.54 2000-11-14 14:26:55 sandervl Exp $ */ 2 2 3 3 /* … … 177 177 { 178 178 PHMDEVICE pHMDevice; /* iterator over the device table */ 179 180 if (pszDeviceName != NULL) { 179 int namelength = strlen(pszDeviceName); 180 181 if (pszDeviceName != NULL) 182 { 181 183 for (pHMDevice = TabWin32Devices; /* loop over all devices in the table */ 182 184 pHMDevice != NULL; 183 185 pHMDevice = pHMDevice->pNext) 184 186 { 185 if (stricmp(pHMDevice->pszDeviceName, /* case-insensitive search */ 186 pszDeviceName) == 0) 187 return (pHMDevice->pDeviceHandler); /* OK, we've found our device */ 187 if(pHMDevice->pDeviceHandler->FindDevice(pHMDevice->pszDeviceName, pszDeviceName, namelength) == TRUE) 188 { 189 return pHMDevice->pDeviceHandler; 190 } 188 191 } 189 192 } 190 int namelength = strlen(pszDeviceName);191 192 //SvL: \\.\x: -> drive x (i.e. \\.\C:)193 // \\.\PHYSICALDRIVEn -> drive n (n>=0)194 if((strncmp(pszDeviceName, "\\\\.\\", 4) == 0) &&195 namelength == 6 && pszDeviceName[5] == ':')196 {197 return HMGlobals.pHMDisk;198 }199 if((strncmp(pszDeviceName, "\\\\.\\PHYSICALDRIVE", 17) == 0) && namelength == 18) {200 return HMGlobals.pHMDisk;201 }202 203 193 return (HMGlobals.pHMOpen32); /* haven't found anything, return default */ 204 194 } … … 219 209 { 220 210 PHMDEVICE pHMDevice; /* iterator over the device table */ 211 int namelength = strlen(pszDeviceName); 221 212 222 213 if (pszDeviceName != NULL) 214 { 223 215 for (pHMDevice = TabWin32Devices; /* loop over all devices in the table */ 224 216 pHMDevice != NULL; 225 217 pHMDevice = pHMDevice->pNext) 226 218 { 227 if (stricmp(pHMDevice->pszDeviceName, /* case-insensitive search */ 228 pszDeviceName) == 0) 229 return (pHMDevice->pDevData); /* OK, we've found our device */ 219 if(pHMDevice->pDeviceHandler->FindDevice(pHMDevice->pszDeviceName, pszDeviceName, namelength) == TRUE) 220 { 221 return (pHMDevice->pDevData); /* OK, we've found our device */ 222 } 230 223 } 231 224 } 232 225 return (NULL); /* haven't found anything, return NULL */ 233 226 } … … 259 252 /* free handle found ? */ 260 253 if (INVALID_HANDLE_VALUE == TabWin32Handles[ulLoop].hmHandleData.hHMHandle) { 261 TabWin32Handles[ulLoop].hmHandleData.dwUserData = 0;262 TabWin32Handles[ulLoop].hmHandleData.dwInternalType = HMTYPE_UNKNOWN;263 TabWin32Handles[ulLoop].hmHandleData.lpDeviceData = NULL;264 handleMutex.leave();254 TabWin32Handles[ulLoop].hmHandleData.dwUserData = 0; 255 TabWin32Handles[ulLoop].hmHandleData.dwInternalType = HMTYPE_UNKNOWN; 256 TabWin32Handles[ulLoop].hmHandleData.lpDeviceData = NULL; 257 handleMutex.leave(); 265 258 return (ulLoop); /* OK, then return it to the caller */ 266 259 } … … 389 382 if (HMGlobals.fIsInitialized != TRUE) 390 383 { 391 HMGlobals.fIsInitialized = TRUE; /* OK, done */392 393 384 handleMutex.enter(); 394 385 // fill handle table … … 403 394 0, 404 395 sizeof(HMGlobals)); 396 397 HMGlobals.fIsInitialized = TRUE; /* OK, done */ 405 398 406 399 /* copy standard handles from OS/2's Open32 Subsystem */ … … 442 435 /* @@@PH we could deallocate the device list here */ 443 436 444 if(HMGlobals.pHMOpen32) 445 delete HMGlobals.pHMOpen32;446 if(HMGlobals.pHMEvent) 447 delete HMGlobals.pHMEvent;448 if(HMGlobals.pHMFile) 449 delete HMGlobals.pHMFile;450 if(HMGlobals.pHMMutex) 451 delete HMGlobals.pHMMutex;452 if(HMGlobals.pHMSemaphore) 453 delete HMGlobals.pHMSemaphore;454 if(HMGlobals.pHMFileMapping) 455 delete HMGlobals.pHMFileMapping;456 if(HMGlobals.pHMComm) 457 delete HMGlobals.pHMComm;458 if(HMGlobals.pHMToken) 459 delete HMGlobals.pHMToken;460 if(HMGlobals.pHMThread) 461 delete HMGlobals.pHMThread;462 if(HMGlobals.pHMNamedPipe) 463 delete HMGlobals.pHMNamedPipe;464 if(HMGlobals.pHMDisk) 465 delete HMGlobals.pHMDisk;437 if(HMGlobals.pHMOpen32) 438 delete HMGlobals.pHMOpen32; 439 if(HMGlobals.pHMEvent) 440 delete HMGlobals.pHMEvent; 441 if(HMGlobals.pHMFile) 442 delete HMGlobals.pHMFile; 443 if(HMGlobals.pHMMutex) 444 delete HMGlobals.pHMMutex; 445 if(HMGlobals.pHMSemaphore) 446 delete HMGlobals.pHMSemaphore; 447 if(HMGlobals.pHMFileMapping) 448 delete HMGlobals.pHMFileMapping; 449 if(HMGlobals.pHMComm) 450 delete HMGlobals.pHMComm; 451 if(HMGlobals.pHMToken) 452 delete HMGlobals.pHMToken; 453 if(HMGlobals.pHMThread) 454 delete HMGlobals.pHMThread; 455 if(HMGlobals.pHMNamedPipe) 456 delete HMGlobals.pHMNamedPipe; 457 if(HMGlobals.pHMDisk) 458 delete HMGlobals.pHMDisk; 466 459 467 460 return (NO_ERROR); … … 1380 1373 if((hFile == GetStdHandle(STD_INPUT_HANDLE)) || 1381 1374 (hFile == GetStdHandle(STD_OUTPUT_HANDLE)) || 1382 (hFile == GetStdHandle(STD_ERROR_HANDLE))) 1375 (hFile == GetStdHandle(STD_ERROR_HANDLE))) 1383 1376 { 1384 1377 return FILE_TYPE_CHAR; -
trunk/src/kernel32/hmcomm.cpp
r4285 r4588 1 /* $Id: hmcomm.cpp,v 1. 5 2000-09-20 21:32:51 hughExp $ */1 /* $Id: hmcomm.cpp,v 1.6 2000-11-14 14:26:59 sandervl Exp $ */ 2 2 3 3 /* … … 14 14 #include <os2win.h> 15 15 #include <string.h> 16 #include "handlemanager.h" 16 #include <handlemanager.h> 17 #include <heapstring.h> 17 18 #include "hmdevice.h" 18 19 #include "hmcomm.h" … … 97 98 } HMDEVCOMDATA, *PHMDEVCOMDATA; 98 99 99 VOID * CreateDevData()100 VOID *CreateDevData() 100 101 { 101 102 PHMDEVCOMDATA pData; … … 126 127 if(pData!= NULL) 127 128 HMDeviceRegisterEx("COM1", this, pData); 128 pData = CreateDevData(); 129 if(pData!= NULL) 130 HMDeviceRegisterEx("COM2", this, pData); 131 pData = CreateDevData(); 132 if(pData!= NULL) 133 HMDeviceRegisterEx("COM3", this, pData); 134 pData = CreateDevData(); 135 if(pData!= NULL) 136 HMDeviceRegisterEx("COM4", this, pData); 137 pData = CreateDevData(); 138 if(pData!= NULL) 139 HMDeviceRegisterEx("COM5", this, pData); 140 pData = CreateDevData(); 141 if(pData!= NULL) 142 HMDeviceRegisterEx("COM6", this, pData); 143 pData = CreateDevData(); 144 if(pData!= NULL) 145 HMDeviceRegisterEx("COM7", this, pData); 146 pData = CreateDevData(); 147 if(pData!= NULL) 148 HMDeviceRegisterEx("COM8", this, pData); 129 } 130 131 /***************************************************************************** 132 * Name : HMDeviceCommClass::FindDevice 133 * Purpose : Checks if lpDeviceName belongs to this device class 134 * Parameters: LPCSTR lpClassDevName 135 * LPCSTR lpDeviceName 136 * int namelength 137 * Variables : 138 * Result : checks if name is COMx or COMx: (x=1..8) 139 * Remark : 140 * Status : 141 * 142 * Author : SvL 143 *****************************************************************************/ 144 BOOL HMDeviceCommClass::FindDevice(LPCSTR lpClassDevName, LPCSTR lpDeviceName, int namelength) 145 { 146 if(namelength > 5) 147 return FALSE; //can't be com name 148 149 //first 3 letters 'COM'? 150 if(lstrncmpiA(lpDeviceName, lpClassDevName, 3) != 0) { 151 return FALSE; 152 } 153 154 if(namelength == 5 && lpDeviceName[4] != ':') { 155 return FALSE; 156 } 157 switch(lpDeviceName[3]) { 158 case '1': 159 case '2': 160 case '3': 161 case '4': 162 case '5': 163 case '6': 164 case '7': 165 case '8': 166 return TRUE; //we support up to COM8 167 } 168 return FALSE; 149 169 } 150 170 … … 154 174 PHMHANDLEDATA pHMHandleDataTemplate) 155 175 { 176 char comname[6]; 177 156 178 dprintf(("HMComm: Serial communication port %s open request\n", lpFileName)); 157 179 180 if(strlen(lpFileName) > 5) { 181 return -1; //safety check (unnecessary..) 182 } 158 183 pHMHandleData->hHMHandle = 0; 184 185 strcpy(comname, lpFileName); 186 comname[4] = 0; //get rid of : (if present) (eg COM1:) 159 187 160 188 //AH: TODO parse Win32 security handles 161 189 OSLibDosDisableHardError(TRUE); 162 pHMHandleData->hHMHandle = OSLibDosOpen( (char*)lpFileName,190 pHMHandleData->hHMHandle = OSLibDosOpen(comname, 163 191 OSLIB_ACCESS_READWRITE | 164 192 OSLIB_ACCESS_SHAREDENYREAD | … … 184 212 &((PHMDEVCOMDATA)pHMHandleData->lpHandlerData)->dcbOS2,ulLen,&ulLen); 185 213 186 if( !rc)214 if(rc) 187 215 { 188 216 return -1; -
trunk/src/kernel32/hmcomm.h
r4285 r4588 1 /* $Id: hmcomm.h,v 1. 5 2000-09-20 21:32:54 hughExp $ */1 /* $Id: hmcomm.h,v 1.6 2000-11-14 14:26:59 sandervl Exp $ */ 2 2 3 3 /* … … 23 23 24 24 HMDeviceCommClass(LPCSTR lpDeviceName); 25 26 //checks if device name belongs to this class 27 virtual BOOL FindDevice(LPCSTR lpClassDevName, LPCSTR lpDeviceName, int namelength); 25 28 26 29 /* this is the handler method for calls to CreateFile() */ -
trunk/src/kernel32/hmdevice.cpp
r4285 r4588 1 /* $Id: hmdevice.cpp,v 1.2 3 2000-09-20 21:32:52 hughExp $ */1 /* $Id: hmdevice.cpp,v 1.24 2000-11-14 14:27:00 sandervl Exp $ */ 2 2 3 3 /* … … 20 20 #include <odin.h> 21 21 #include <os2win.h> 22 #include <string.h> 22 23 #include <misc.h> 23 24 #include "HandleManager.h" … … 70 71 } 71 72 73 74 /***************************************************************************** 75 * Name : HMDeviceHandler::FindDevice 76 * Purpose : Checks if lpDeviceName belongs to this device class 77 * Parameters: LPCSTR lpClassDevName 78 * LPCSTR lpDeviceName 79 * int namelength 80 * Variables : 81 * Result : 82 * Remark : 83 * Status : 84 * 85 * Author : SvL 86 *****************************************************************************/ 87 BOOL HMDeviceHandler::FindDevice(LPCSTR lpClassDevName, LPCSTR lpDeviceName, int namelength) 88 { 89 if(stricmp(lpClassDevName, lpDeviceName) == 0) { 90 return TRUE; 91 } 92 return FALSE; 93 } 72 94 73 95 /***************************************************************************** -
trunk/src/kernel32/hmdevice.h
r4285 r4588 1 /* $Id: hmdevice.h,v 1.2 3 2000-09-20 21:32:54 hughExp $ */1 /* $Id: hmdevice.h,v 1.24 2000-11-14 14:27:01 sandervl Exp $ */ 2 2 3 3 /* … … 69 69 70 70 HMDeviceHandler(LPCSTR lpDeviceName); /* constructor with device name */ 71 72 //checks if device name belongs to this class 73 virtual BOOL FindDevice(LPCSTR lpClassDevName, LPCSTR lpDeviceName, int namelength); 71 74 72 75 /*********************************** -
trunk/src/kernel32/hmdisk.cpp
r4259 r4588 1 /* $Id: hmdisk.cpp,v 1. 3 2000-09-14 19:08:36sandervl Exp $ */1 /* $Id: hmdisk.cpp,v 1.4 2000-11-14 14:27:02 sandervl Exp $ */ 2 2 3 3 /* … … 21 21 #include <win\aspi.h> 22 22 23 #define DBG_LOCALLOG DBG_hmdisk23 #define DBG_LOCALLOG DBG_hmdisk 24 24 #include "dbglocal.h" 25 25 26 HMDeviceDiskClass::HMDeviceDiskClass(LPCSTR lpDeviceName) : HMDeviceKernelObjectClass(lpDeviceName) 27 { 28 HMDeviceRegisterEx("\\\\.\\PHYSICALDRIVE", this, NULL); 29 } 30 31 /***************************************************************************** 32 * Name : HMDeviceDiskClass::FindDevice 33 * Purpose : Checks if lpDeviceName belongs to this device class 34 * Parameters: LPCSTR lpClassDevName 35 * LPCSTR lpDeviceName 36 * int namelength 37 * Variables : 38 * Result : checks if name is for a drive of physical disk 39 * Remark : 40 * Status : 41 * 42 * Author : SvL 43 *****************************************************************************/ 44 BOOL HMDeviceDiskClass::FindDevice(LPCSTR lpClassDevName, LPCSTR lpDeviceName, int namelength) 45 { 46 //\\.\\x: -> length 6 47 //\\.\PHYSICALDRIVEn -> length 18 48 if(namelength != 6 && namelength != 18) { 49 return FALSE; 50 } 51 52 //SvL: \\.\x: -> drive x (i.e. \\.\C:) 53 // \\.\PHYSICALDRIVEn -> drive n (n>=0) 54 if((strncmp(lpDeviceName, "\\\\.\\", 4) == 0) && 55 namelength == 6 && lpDeviceName[5] == ':') 56 { 57 return TRUE; 58 } 59 if((strncmp(lpDeviceName, "\\\\.\\PHYSICALDRIVE", 17) == 0) && namelength == 18) { 60 return TRUE; 61 } 62 return FALSE; 63 } 26 64 //****************************************************************************** 27 65 //TODO: PHYSICALDRIVEn!! … … 46 84 4) == 0) 47 85 { 48 lpFileName+=4;86 lpFileName+=4; 49 87 } 50 88 … … 59 97 if (hFile != INVALID_HANDLE_ERROR) 60 98 { 61 pHMHandleData->hHMHandle = hFile;62 pHMHandleData->dwUserData = GetDriveTypeA(lpFileName);63 return (NO_ERROR);99 pHMHandleData->hHMHandle = hFile; 100 pHMHandleData->dwUserData = GetDriveTypeA(lpFileName); 101 return (NO_ERROR); 64 102 } 65 103 else { 66 dprintf(("CreateFile failed; error %d", GetLastError()));67 return(GetLastError());104 dprintf(("CreateFile failed; error %d", GetLastError())); 105 return(GetLastError()); 68 106 } 69 107 } … … 81 119 LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped) 82 120 { 83 switch(dwIoControlCode) 121 switch(dwIoControlCode) 84 122 { 85 case FSCTL_DELETE_REPARSE_POINT:86 case FSCTL_DISMOUNT_VOLUME:87 case FSCTL_GET_COMPRESSION:88 case FSCTL_GET_REPARSE_POINT:89 case FSCTL_LOCK_VOLUME:90 case FSCTL_QUERY_ALLOCATED_RANGES:91 case FSCTL_SET_COMPRESSION:92 case FSCTL_SET_REPARSE_POINT:93 case FSCTL_SET_SPARSE:94 case FSCTL_SET_ZERO_DATA:95 case FSCTL_UNLOCK_VOLUME:96 case IOCTL_DISK_CHECK_VERIFY:97 case IOCTL_DISK_EJECT_MEDIA:98 case IOCTL_DISK_FORMAT_TRACKS:99 case IOCTL_DISK_GET_DRIVE_GEOMETRY:100 case IOCTL_DISK_GET_DRIVE_LAYOUT:101 case IOCTL_DISK_GET_MEDIA_TYPES:102 case IOCTL_DISK_GET_PARTITION_INFO:103 case IOCTL_DISK_LOAD_MEDIA:104 case IOCTL_DISK_MEDIA_REMOVAL:105 case IOCTL_DISK_PERFORMANCE:106 case IOCTL_DISK_REASSIGN_BLOCKS:107 case IOCTL_DISK_SET_DRIVE_LAYOUT:108 case IOCTL_DISK_SET_PARTITION_INFO:109 case IOCTL_DISK_VERIFY:110 case IOCTL_SERIAL_LSRMST_INSERT:111 case IOCTL_STORAGE_CHECK_VERIFY:112 case IOCTL_STORAGE_EJECT_MEDIA:113 case IOCTL_STORAGE_GET_MEDIA_TYPES:114 case IOCTL_STORAGE_LOAD_MEDIA:115 case IOCTL_STORAGE_MEDIA_REMOVAL:116 break;117 case IOCTL_SCSI_PASS_THROUGH:118 case IOCTL_SCSI_MINIPORT:119 case IOCTL_SCSI_GET_INQUIRY_DATA:120 case IOCTL_SCSI_GET_CAPABILITIES:121 case IOCTL_SCSI_PASS_THROUGH_DIRECT:122 break;123 124 case IOCTL_SCSI_GET_ADDRESS:123 case FSCTL_DELETE_REPARSE_POINT: 124 case FSCTL_DISMOUNT_VOLUME: 125 case FSCTL_GET_COMPRESSION: 126 case FSCTL_GET_REPARSE_POINT: 127 case FSCTL_LOCK_VOLUME: 128 case FSCTL_QUERY_ALLOCATED_RANGES: 129 case FSCTL_SET_COMPRESSION: 130 case FSCTL_SET_REPARSE_POINT: 131 case FSCTL_SET_SPARSE: 132 case FSCTL_SET_ZERO_DATA: 133 case FSCTL_UNLOCK_VOLUME: 134 case IOCTL_DISK_CHECK_VERIFY: 135 case IOCTL_DISK_EJECT_MEDIA: 136 case IOCTL_DISK_FORMAT_TRACKS: 137 case IOCTL_DISK_GET_DRIVE_GEOMETRY: 138 case IOCTL_DISK_GET_DRIVE_LAYOUT: 139 case IOCTL_DISK_GET_MEDIA_TYPES: 140 case IOCTL_DISK_GET_PARTITION_INFO: 141 case IOCTL_DISK_LOAD_MEDIA: 142 case IOCTL_DISK_MEDIA_REMOVAL: 143 case IOCTL_DISK_PERFORMANCE: 144 case IOCTL_DISK_REASSIGN_BLOCKS: 145 case IOCTL_DISK_SET_DRIVE_LAYOUT: 146 case IOCTL_DISK_SET_PARTITION_INFO: 147 case IOCTL_DISK_VERIFY: 148 case IOCTL_SERIAL_LSRMST_INSERT: 149 case IOCTL_STORAGE_CHECK_VERIFY: 150 case IOCTL_STORAGE_EJECT_MEDIA: 151 case IOCTL_STORAGE_GET_MEDIA_TYPES: 152 case IOCTL_STORAGE_LOAD_MEDIA: 153 case IOCTL_STORAGE_MEDIA_REMOVAL: 154 break; 155 case IOCTL_SCSI_PASS_THROUGH: 156 case IOCTL_SCSI_MINIPORT: 157 case IOCTL_SCSI_GET_INQUIRY_DATA: 158 case IOCTL_SCSI_GET_CAPABILITIES: 159 case IOCTL_SCSI_PASS_THROUGH_DIRECT: 160 break; 161 162 case IOCTL_SCSI_GET_ADDRESS: 125 163 { 126 164 HINSTANCE hInstAspi; 127 DWORD (WIN32API *GetASPI32SupportInfo)();165 DWORD (WIN32API *GetASPI32SupportInfo)(); 128 166 DWORD (CDECL *SendASPI32Command)(LPSRB lpSRB); 129 167 DWORD numAdapters, rc; … … 131 169 int i, j, k; 132 170 133 if(!lpOutBuffer || nOutBufferSize < 8) {134 SetLastError(ERROR_INSUFFICIENT_BUFFER); //todo: right error?135 return(FALSE);136 }137 SCSI_ADDRESS *addr = (SCSI_ADDRESS *)lpOutBuffer;138 addr->Length = sizeof(SCSI_ADDRESS);139 addr->PortNumber = 0;140 addr->PathId = 0;141 hInstAspi = LoadLibraryA("WNASPI32.DLL");142 if(hInstAspi == NULL) {143 SetLastError(ERROR_INVALID_PARAMETER); //todo144 return FALSE;145 }146 *(FARPROC *)&GetASPI32SupportInfo = GetProcAddress(hInstAspi, "GetASPI32SupportInfo");147 *(FARPROC *)&SendASPI32Command = GetProcAddress(hInstAspi, "SendASPI32Command");148 numAdapters = GetASPI32SupportInfo();149 if(LOBYTE(numAdapters) == 0) goto failure;150 151 memset(&srb, 0, sizeof(srb));152 srb.common.SRB_Cmd = SC_HA_INQUIRY;153 rc = SendASPI32Command(&srb);154 155 for(i=0;i<LOBYTE(numAdapters);i++) {156 for(j=0;j<8;j++) {157 for(k=0;k<16;k++) {158 memset(&srb, 0, sizeof(srb));159 srb.common.SRB_Cmd = SC_GET_DEV_TYPE;160 srb.devtype.SRB_HaId = i;161 srb.devtype.SRB_Target = j;162 srb.devtype.SRB_Lun = k;163 rc = SendASPI32Command(&srb);164 if(rc == SS_COMP) {165 if(srb.devtype.SRB_DeviceType == SS_DEVTYPE_CDROM && 171 if(!lpOutBuffer || nOutBufferSize < 8) { 172 SetLastError(ERROR_INSUFFICIENT_BUFFER); //todo: right error? 173 return(FALSE); 174 } 175 SCSI_ADDRESS *addr = (SCSI_ADDRESS *)lpOutBuffer; 176 addr->Length = sizeof(SCSI_ADDRESS); 177 addr->PortNumber = 0; 178 addr->PathId = 0; 179 hInstAspi = LoadLibraryA("WNASPI32.DLL"); 180 if(hInstAspi == NULL) { 181 SetLastError(ERROR_INVALID_PARAMETER); //todo 182 return FALSE; 183 } 184 *(FARPROC *)&GetASPI32SupportInfo = GetProcAddress(hInstAspi, "GetASPI32SupportInfo"); 185 *(FARPROC *)&SendASPI32Command = GetProcAddress(hInstAspi, "SendASPI32Command"); 186 numAdapters = GetASPI32SupportInfo(); 187 if(LOBYTE(numAdapters) == 0) goto failure; 188 189 memset(&srb, 0, sizeof(srb)); 190 srb.common.SRB_Cmd = SC_HA_INQUIRY; 191 rc = SendASPI32Command(&srb); 192 193 for(i=0;i<LOBYTE(numAdapters);i++) { 194 for(j=0;j<8;j++) { 195 for(k=0;k<16;k++) { 196 memset(&srb, 0, sizeof(srb)); 197 srb.common.SRB_Cmd = SC_GET_DEV_TYPE; 198 srb.devtype.SRB_HaId = i; 199 srb.devtype.SRB_Target = j; 200 srb.devtype.SRB_Lun = k; 201 rc = SendASPI32Command(&srb); 202 if(rc == SS_COMP) { 203 if(srb.devtype.SRB_DeviceType == SS_DEVTYPE_CDROM && 166 204 pHMHandleData->dwUserData == DRIVE_CDROM) 167 {168 goto done;169 }170 }171 }172 }173 }205 { 206 goto done; 207 } 208 } 209 } 210 } 211 } 174 212 done: 175 if(rc == SS_COMP) {176 addr->TargetId = j;177 addr->Lun = k;178 SetLastError(ERROR_SUCCESS);179 }180 elseSetLastError(ERROR_FILE_NOT_FOUND); //todo181 FreeLibrary(hInstAspi);182 return TRUE;213 if(rc == SS_COMP) { 214 addr->TargetId = j; 215 addr->Lun = k; 216 SetLastError(ERROR_SUCCESS); 217 } 218 else SetLastError(ERROR_FILE_NOT_FOUND); //todo 219 FreeLibrary(hInstAspi); 220 return TRUE; 183 221 failure: 184 FreeLibrary(hInstAspi);185 SetLastError(ERROR_INVALID_PARAMETER); //todo186 return FALSE;187 } 188 189 case IOCTL_SCSI_RESCAN_BUS:190 case IOCTL_SCSI_GET_DUMP_POINTERS:191 case IOCTL_SCSI_FREE_DUMP_POINTERS:192 case IOCTL_IDE_PASS_THROUGH:193 break;222 FreeLibrary(hInstAspi); 223 SetLastError(ERROR_INVALID_PARAMETER); //todo 224 return FALSE; 225 } 226 227 case IOCTL_SCSI_RESCAN_BUS: 228 case IOCTL_SCSI_GET_DUMP_POINTERS: 229 case IOCTL_SCSI_FREE_DUMP_POINTERS: 230 case IOCTL_IDE_PASS_THROUGH: 231 break; 194 232 195 233 } -
trunk/src/kernel32/hmdisk.h
r4256 r4588 1 /* $Id: hmdisk.h,v 1. 1 2000-09-13 21:10:58sandervl Exp $ */1 /* $Id: hmdisk.h,v 1.2 2000-11-14 14:27:04 sandervl Exp $ */ 2 2 3 3 #ifndef __HMDISK_H__ … … 19 19 { 20 20 public: 21 HMDeviceDiskClass(LPCSTR lpDeviceName) : HMDeviceKernelObjectClass(lpDeviceName) {}; 21 HMDeviceDiskClass(LPCSTR lpDeviceName); 22 23 //checks if device name belongs to this class 24 virtual BOOL FindDevice(LPCSTR lpClassDevName, LPCSTR lpDeviceName, int namelength); 22 25 23 26 /* this is a handler method for calls to CreateFile() */
Note:
See TracChangeset
for help on using the changeset viewer.
