- Timestamp:
- Jun 4, 2001, 11:18:40 PM (24 years ago)
- Location:
- trunk/src/kernel32
- Files:
-
- 4 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kernel32/exceptions.cpp
r5557 r5905 1 /* $Id: exceptions.cpp,v 1.5 2 2001-04-21 09:10:13sandervl Exp $ */1 /* $Id: exceptions.cpp,v 1.53 2001-06-04 21:18:39 sandervl Exp $ */ 2 2 3 3 /* … … 1108 1108 case XCPT_PROCESS_TERMINATE: 1109 1109 case XCPT_ASYNC_PROCESS_TERMINATE: 1110 dprintfException(pERepRec, pERegRec, pCtxRec, p);1110 //// dprintfException(pERepRec, pERegRec, pCtxRec, p); 1111 1111 SetExceptionChain((ULONG)-1); 1112 1112 goto continuesearch; … … 1121 1121 goto continueFail; 1122 1122 } 1123 1123 1124 //------------->>> WARNING: potentially dangerous workaround!! 1124 1125 /* Some apps set ES = FS and Odin doesn't like that! */ -
trunk/src/kernel32/hmdevio.cpp
r5771 r5905 1 /* $Id: hmdevio.cpp,v 1.1 1 2001-05-20 11:02:43sandervl Exp $ */1 /* $Id: hmdevio.cpp,v 1.12 2001-06-04 21:18:39 sandervl Exp $ */ 2 2 3 3 /* … … 20 20 #include <os2wrap.h> //Odin32 OS/2 api wrappers 21 21 #include <string.h> 22 #include <stdio.h> 22 23 23 24 #include <win32type.h> 24 25 #include <win32api.h> 25 26 #include <misc.h> 27 #include <win\winioctl.h> 26 28 #include "hmdevio.h" 27 29 #include "cio.h" … … 48 50 { "FXMEMMAP.VXD", "PMAP$", FALSE, 0, FXMEMMAPIOCtl}, 49 51 #if 1 50 { "\\\\.\\VPCAppSv", "", 52 { "\\\\.\\VPCAppSv", "", TRUE, 667, VPCIOCtl}}; 51 53 #else 52 54 }; … … 54 56 55 57 static int nrKnownDrivers = sizeof(knownDriver)/sizeof(WIN32DRV); 58 BOOL fVirtualPC = FALSE; 56 59 57 60 //****************************************************************************** … … 74 77 knownDriver[i].szWin32Name, rc)); 75 78 } 79 80 //check registry for Odin driver plugin dlls 81 HKEY hkDrivers, hkDrvDll; 82 83 rc = RegOpenKeyExA(HKEY_LOCAL_MACHINE, 84 "System\\CurrentControlSet\\Services", 85 0, KEY_READ, &hkDrivers); 86 87 if(rc == 0) { 88 char szDllName[CCHMAXPATH]; 89 char szKeyName[CCHMAXPATH]; 90 char szDrvName[CCHMAXPATH]; 91 DWORD dwType, dwSize; 92 int iSubKey = 0; 93 94 while(rc == 0) { 95 rc = RegEnumKeyA(hkDrivers, iSubKey++, szKeyName, sizeof(szKeyName)); 96 if(rc) break; 97 98 rc = RegOpenKeyExA(hkDrivers, szKeyName, 99 0, KEY_READ, &hkDrvDll); 100 if(rc == 0) { 101 dwSize = sizeof(szDllName); 102 rc = RegQueryValueExA(hkDrvDll, 103 "DllName", 104 NULL, 105 &dwType, 106 (LPBYTE)szDllName, 107 &dwSize); 108 109 RegCloseKey(hkDrvDll); 110 if(rc == 0 && dwType == REG_SZ) 111 { 112 HINSTANCE hDrvDll = LoadLibraryA(szDllName); 113 if(hDrvDll) { 114 sprintf(szDrvName, "\\\\.\\%s", szKeyName); 115 driver = new HMCustomDriver(hDrvDll, szDrvName); 116 117 rc = HMDeviceRegister(szDrvName, driver); 118 if (rc != NO_ERROR) /* check for errors */ 119 dprintf(("KERNEL32:RegisterDevices: registering %s failed with %u.\n", szDrvName, rc)); 120 } 121 } 122 rc = 0; 123 } 124 } 125 RegCloseKey(hkDrivers); 126 } 127 76 128 return; 77 129 } … … 85 137 this->szOS2Name = lpOS2DevName; 86 138 this->devIOCtl = pDevIOCtl; 139 } 140 //****************************************************************************** 141 //****************************************************************************** 142 HMDeviceDriver::HMDeviceDriver(LPCSTR lpDeviceName) 143 : HMDeviceKernelObjectClass(lpDeviceName) 144 { 87 145 } 88 146 //****************************************************************************** … … 306 364 static BOOL VPCIOCtl(HANDLE hDevice, DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer, DWORD nOutBufferSize, LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped) 307 365 { 366 APIRET rc; 367 368 dprintf(("VPCIOCtl func %x: %x %d %x %d %x %x", dwIoControlCode, lpInBuffer, nInBufferSize, lpOutBuffer, nOutBufferSize, lpBytesReturned, lpOverlapped)); 308 369 switch(dwIoControlCode) { 309 370 case 0x9C402880: //0x00 310 dprintf(("VPCIOCtl func 0x9C402880: %d %x %d %x %x", nInBufferSize, lpOutBuffer, nOutBufferSize, lpBytesReturned, lpOverlapped));311 371 if(nOutBufferSize < 4) { 312 372 SetLastError(ERROR_BAD_LENGTH); … … 316 376 *lpBytesReturned = 4; 317 377 return TRUE; 378 318 379 case 0x9C402894: //0x14 (get IDT table) 319 380 { 320 381 DWORD *lpBuffer = (DWORD *)lpOutBuffer; 321 dprintf(("VPCIOCtl func 0x9C402894: %d %x %d %x %x", nInBufferSize, lpOutBuffer, nOutBufferSize, lpBytesReturned, lpOverlapped));322 382 if(nOutBufferSize < 0x800) { 323 383 SetLastError(ERROR_BAD_LENGTH); … … 335 395 } 336 396 case 0x9C40288C: //0x0C change IDT 337 dprintf(("VPCIOCtl func 0x9C40288C: %d %x %d %x %x", nInBufferSize, lpOutBuffer, nOutBufferSize, lpBytesReturned, lpOverlapped));338 397 if(nInBufferSize < 0x22) { 339 398 SetLastError(ERROR_BAD_LENGTH); 340 399 return FALSE; 341 400 } 401 fVirtualPC = TRUE; 342 402 return TRUE; 343 case 0x9C402884: //0x04 344 dprintf(("VPCIOCtl func 0x9C402884: %d %x %d %x %x", nInBufferSize, lpOutBuffer, nOutBufferSize, lpBytesReturned, lpOverlapped)); 403 404 case 0x9C402884: //0x04 ExAllocatePoolWithTag 405 { 406 DWORD *lpBuffer = (DWORD *)lpInBuffer; 345 407 if(nInBufferSize < 0x08) { 346 408 SetLastError(ERROR_BAD_LENGTH); 347 409 return FALSE; 348 410 } 411 dprintf(("In: %x %x", lpBuffer[0], lpBuffer[1])); 349 412 return TRUE; 413 } 350 414 351 415 case 0x9C402898: //0x18 Remove IDT patch 352 dprintf(("VPCIOCtl func 0x9C402898: %d %x %d %x %x", nInBufferSize, lpOutBuffer, nOutBufferSize, lpBytesReturned, lpOverlapped));353 416 if(nInBufferSize < 0x01) { 354 417 SetLastError(ERROR_BAD_LENGTH); 355 418 return FALSE; 356 419 } 420 fVirtualPC = FALSE; 357 421 return TRUE; 358 359 422 default: 360 423 dprintf(("VPCIOCtl unknown func %X\n", dwIoControlCode)); 361 424 return FALSE; 362 425 } 426 } 427 //****************************************************************************** 428 //****************************************************************************** 429 HMCustomDriver::HMCustomDriver(HINSTANCE hInstance, LPCSTR lpDeviceName) 430 : HMDeviceDriver(lpDeviceName) 431 { 432 hDrvDll = hInstance ; 433 *(ULONG *)&driverOpen = (ULONG)GetProcAddress(hDrvDll, "DrvOpen"); 434 *(ULONG *)&driverClose = (ULONG)GetProcAddress(hDrvDll, "DrvClose"); 435 *(ULONG *)&driverIOCtl = (ULONG)GetProcAddress(hDrvDll, "DrvIOCtl"); 436 } 437 //****************************************************************************** 438 //****************************************************************************** 439 HMCustomDriver::~HMCustomDriver() 440 { 441 FreeLibrary(hDrvDll); 442 } 443 //****************************************************************************** 444 //****************************************************************************** 445 DWORD HMCustomDriver::CreateFile (LPCSTR lpFileName, 446 PHMHANDLEDATA pHMHandleData, 447 PVOID lpSecurityAttributes, 448 PHMHANDLEDATA pHMHandleDataTemplate) 449 { 450 pHMHandleData->hHMHandle = driverOpen(pHMHandleData->dwAccess, pHMHandleData->dwShare); 451 if(pHMHandleData->hHMHandle == 0) { 452 return 2; 453 } 454 return 0; 455 } 456 //****************************************************************************** 457 //****************************************************************************** 458 BOOL HMCustomDriver::CloseHandle(PHMHANDLEDATA pHMHandleData) 459 { 460 if(pHMHandleData->hHMHandle) { 461 driverClose(pHMHandleData->hHMHandle); 462 } 463 pHMHandleData->hHMHandle = 0; 464 return TRUE; 465 } 466 //****************************************************************************** 467 //****************************************************************************** 468 BOOL HMCustomDriver::DeviceIoControl(PHMHANDLEDATA pHMHandleData, DWORD dwIoControlCode, 469 LPVOID lpInBuffer, DWORD nInBufferSize, 470 LPVOID lpOutBuffer, DWORD nOutBufferSize, 471 LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped) 472 { 473 return driverIOCtl(pHMHandleData->hHMHandle, dwIoControlCode, lpInBuffer, nInBufferSize, 474 lpOutBuffer, nOutBufferSize, lpBytesReturned, lpOverlapped); 363 475 } 364 476 //****************************************************************************** -
trunk/src/kernel32/hmdevio.h
r5587 r5905 1 /* $Id: hmdevio.h,v 1. 2 2001-04-26 13:22:44sandervl Exp $ */1 /* $Id: hmdevio.h,v 1.3 2001-06-04 21:18:40 sandervl Exp $ */ 2 2 3 3 #ifndef __DEVIO_H__ … … 103 103 LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped); 104 104 105 typedef HANDLE (* WIN32API DrvOpen)(DWORD dwAccess, DWORD dwShare); 106 typedef void (* WIN32API DrvClose)(HANDLE hDevice); 107 typedef BOOL (* WIN32API DrvIOCtl)(HANDLE hDevice, DWORD dwIoControlCode, 108 LPVOID lpInBuffer, DWORD nInBufferSize, 109 LPVOID lpOutBuffer, DWORD nOutBufferSize, 110 LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped); 111 105 112 typedef struct { 106 113 char szWin32Name[32]; … … 119 126 public: 120 127 HMDeviceDriver(LPCSTR lpDeviceName, LPSTR lpOS2DevName, BOOL fCreate, WINIOCTL pDevIOCtl); 128 HMDeviceDriver(LPCSTR lpDeviceName); 121 129 122 130 /* this is a handler method for calls to CreateFile() */ … … 139 147 }; 140 148 149 class HMCustomDriver : public HMDeviceDriver 150 151 { 152 public: 153 HMCustomDriver(HINSTANCE hInstance, LPCSTR lpDeviceName); 154 virtual ~HMCustomDriver(); 155 156 /* this is a handler method for calls to CreateFile() */ 157 virtual DWORD CreateFile (LPCSTR lpFileName, 158 PHMHANDLEDATA pHMHandleData, 159 PVOID lpSecurityAttributes, 160 PHMHANDLEDATA pHMHandleDataTemplate); 161 162 virtual BOOL CloseHandle(PHMHANDLEDATA pHMHandleData); 163 164 /* this is a handler method for calls to DeviceIoControl() */ 165 virtual BOOL DeviceIoControl (PHMHANDLEDATA pHMHandleData, DWORD dwIoControlCode, 166 LPVOID lpInBuffer, DWORD nInBufferSize, 167 LPVOID lpOutBuffer, DWORD nOutBufferSize, 168 LPDWORD lpBytesReturned, LPOVERLAPPED lpOverlapped); 169 private: 170 DrvOpen driverOpen; 171 DrvClose driverClose; 172 DrvIOCtl driverIOCtl; 173 HINSTANCE hDrvDll; 174 }; 175 141 176 void RegisterDevices(); 142 177 -
trunk/src/kernel32/oslibexcept.cpp
r5750 r5905 1 /* $Id: oslibexcept.cpp,v 1. 6 2001-05-19 11:14:38sandervl Exp $ */1 /* $Id: oslibexcept.cpp,v 1.7 2001-06-04 21:18:40 sandervl Exp $ */ 2 2 /* 3 3 * Exception handler util. procedures … … 171 171 case XCPT_ILLEGAL_INSTRUCTION: 172 172 case XCPT_PRIVILEGED_INSTRUCTION: 173 #ifndef DEBUG 174 case XCPT_BREAKPOINT: 175 #endif 173 176 rc = RtlDispatchException(&winreportrec, &wincontextrec); 174 177 break; 175 178 179 #ifdef DEBUG 180 case XCPT_BREAKPOINT: 181 #endif 176 182 case XCPT_INTEGER_DIVIDE_BY_ZERO: 177 183 case XCPT_INTEGER_OVERFLOW: 178 case XCPT_BREAKPOINT:179 184 case XCPT_SINGLE_STEP: 180 185 case XCPT_ARRAY_BOUNDS_EXCEEDED:
Note:
See TracChangeset
for help on using the changeset viewer.