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;
		}
	}
}
Example #2
0
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);
}
Example #3
0
//----------------------------------------------------------------------
//
// 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;
}