VOID __stdcall CPGPdiskDrv::ReportErrorStartCallback( VMHANDLE hVM, THREADHANDLE hThread, PVOID Refdata, PCLIENT_STRUCT pRegs) { DualErr derr; ErrorCell *pErrPacket; LPSTR errString; static SHELLMessage_THUNK callbackThunk; // Pop an error off the queue. if (!Driver->mErrorQueue.Pop((PGPUInt32 *) &pErrPacket)) { pgpAssert(FALSE); return; } pgpAssertAddrValid(pErrPacket, ErrorCell); // Allocate scratch space for the error string. if (NULL==(int)(errString = new char[kHugeStringSize])) derr = DualErr(kPGDMinorError_OutOfMemory); // Format and display the error message. if (derr.IsntError()) { FormatErrorString(pErrPacket->perr, pErrPacket->derr, pErrPacket->drive, errString, kHugeStringSize); pErrPacket->errString = errString; switch (pErrPacket->perr) { case kPGDMajorError_PGPdiskReadError: case kPGDMajorError_PGPdiskWriteError: SHELL_Message(Get_Sys_VM_Handle(), MB_ICONEXCLAMATION | MB_YESNO, errString, "PGPdisk Error", ReportErrorEndCallback, pErrPacket, &callbackThunk); break; default: SHELL_Message(Get_Sys_VM_Handle(), MB_ICONEXCLAMATION | MB_OK, errString, "PGPdisk Error", ReportErrorEndCallback, pErrPacket, &callbackThunk); break; } } }
vm_t* find_vm(VMHANDLE hVM) { int i; for(i=0;i<MAX_VM;i++) if(vm[i].handle==hVM) return(&vm[i]); #if 0 if(hVM!=Get_Sys_VM_Handle()) { DBTRACEx(0,"!VM NOT FOUND",hVM); } #endif return(NULL); }
//---------------------------------------------------------------------- // // GetProcess // // Retrieves the process name. // //---------------------------------------------------------------------- PCHAR GetProcess( PCHAR ProcessName ) { PVOID CurProc; PVOID ring3proc; char *name; // // Get the ring0 process pointer. // CurProc = VWIN32_GetCurrentProcessHandle(); if( !CurProc ) { strcpy( ProcessName, "System" ); return ProcessName; } // // Now, map the ring3 PCB // ring3proc = (PVOID) SelectorMapFlat( Get_Sys_VM_Handle(), (DWORD) (*(PDWORD) ((char *) CurProc + 0x38)) | 0x7, 0 ); if( ring3proc == (PVOID) -1 ) { strcpy( ProcessName, "???"); } else { // // copy out the process name (max 8 characters) // name = ((char *)ring3proc) + 0xF2; if( name[0] >= 'A' && name[0] < 'z' ) { strcpy( ProcessName, name ); ProcessName[8] = 0; } else { strcpy( ProcessName, "???" ); } } return ProcessName; }