📄 shellproc.cpp
字号:
((LPSPS_REGISTER)spParam)->lpFunctionTable = g_lpFTE;
#ifdef UNICODE
return SPR_HANDLED | SPF_UNICODE;
#else
return SPR_HANDLED;
#endif
// --------------------------------------------------------------------
// Message: SPM_START_SCRIPT
//
case SPM_START_SCRIPT:
return SPR_HANDLED;
// --------------------------------------------------------------------
// Message: SPM_STOP_SCRIPT
//
case SPM_STOP_SCRIPT:
return SPR_HANDLED;
// --------------------------------------------------------------------
// Message: SPM_BEGIN_GROUP
//
case SPM_BEGIN_GROUP:
DEBUGMSG(ZONE_FUNCTION, (_T("ShellProc(SPM_BEGIN_GROUP, ...) called")));
g_pKato->BeginLevel(0, _T("BEGIN GROUP: PCLegacy.DLL"));
return SPR_HANDLED;
// --------------------------------------------------------------------
// Message: SPM_END_GROUP
//
case SPM_END_GROUP:
DEBUGMSG(ZONE_FUNCTION, (_T("ShellProc(SPM_END_GROUP, ...) called")));
g_pKato->EndLevel(_T("END GROUP: PCLegacy.DLL"));
return SPR_HANDLED;
// --------------------------------------------------------------------
// Message: SPM_BEGIN_TEST
//
case SPM_BEGIN_TEST:
DEBUGMSG(ZONE_FUNCTION, (_T("ShellProc(SPM_BEGIN_TEST, ...) called")));
// Start our logging level.
pBT = (LPSPS_BEGIN_TEST)spParam;
g_pKato->BeginLevel(pBT->lpFTE->dwUniqueID,
_T("BEGIN TEST: \"%s\", Threads=%u, Seed=%u"),
pBT->lpFTE->lpDescription, pBT->dwThreadCount,
pBT->dwRandomSeed);
return SPR_HANDLED;
// --------------------------------------------------------------------
// Message: SPM_END_TEST
//
case SPM_END_TEST:
DEBUGMSG(ZONE_FUNCTION, (_T("ShellProc(SPM_END_TEST, ...) called")));
// End our logging level.
pET = (LPSPS_END_TEST)spParam;
g_pKato->EndLevel(_T("END TEST: \"%s\", %s, Time=%u.%03u"),
pET->lpFTE->lpDescription,
pET->dwResult == TPR_SKIP ? _T("SKIPPED") :
pET->dwResult == TPR_PASS ? _T("PASSED") :
pET->dwResult == TPR_FAIL ? _T("FAILED") : _T("ABORTED"),
pET->dwExecutionTime / 1000, pET->dwExecutionTime % 1000);
return SPR_HANDLED;
// --------------------------------------------------------------------
// Message: SPM_EXCEPTION
//
case SPM_EXCEPTION:
DEBUGMSG(ZONE_FUNCTION, (_T("ShellProc(SPM_EXCEPTION, ...) called")));
g_pKato->Log(LOG_EXCEPTION, _T("Exception occurred!"));
return SPR_HANDLED;
default:
DEBUGMSG(ZONE_ERROR, (_T("ShellProc received bad message: 0x%X"), uMsg));
ASSERT(!"Default case reached in ShellProc!");
return SPR_NOT_HANDLED;
}
}
//Command line function is not used here
VOID
ProcessCmdLine(LPCTSTR szCmdLine){
LPCTSTR pCmdLine = NULL;
return;
}
#define PCCLEGACY_SOURCE_PATH _T("\\Drivers\\PCCARD")
#define PCCLEGACY_BACKUP_PATH _T("\\Drivers\\PCCARDBACKUP")
#define PCCOLD_SOURCE_PATH _T("\\Drivers\\PCMCIA")
#define PCCOLD_BACKUP_PATH _T("\\Drivers\\PCMCIABACKUP")
#define PCCLEGACY_PCM_SOURCE_PATH _T("\\Drivers\\PCCARD\\PCMCIA\\TEMPLATE\\PCMCIA")
#define PCCLEGACY_PCM_BACKUP_PATH _T("\\Drivers\\PCMCIATEMP")
#define PCCLEGACY_NOCONFIG_VALUE 1
#define PCCLEGACY_DUMMY_DETECTENTRY _T("\\Drivers\\PCMCIA\\Detect\\01")
#define PCCLEGACY_DUMMY_DRVENTRY _T("\\Drivers\\PCMCIA\\PCMDUMMYDRV")
//stole from reg_update.exe, this function will add an entry for the dummy driver,
//so whne any card plug in, the dummy driver will be loaded.
BOOL
AddDummyEntry(VOID){
TCHAR strDll[20], strEntry[20];
HKEY hNewKey=NULL;
HKEY hNewKey2=NULL;
DWORD dwDisposition=0;
memset(strDll,0x0,20*sizeof(TCHAR));
memset(strEntry,0x0,20*sizeof(TCHAR));
wcscpy(strDll,TEXT("pcc_dummydr.dll"));
wcscpy(strEntry,TEXT("DetectIntr"));
SetLastError(0);
NKMSG(TEXT("Updating Registery... "));
// Create registry entry at top of Detect List
if(ERROR_SUCCESS != RegCreateKeyEx( HKEY_LOCAL_MACHINE, PCCLEGACY_DUMMY_DETECTENTRY,
0, TEXT(""), 0,
0, NULL,
&hNewKey, &dwDisposition ))
return FALSE;
if(ERROR_SUCCESS != RegSetValueEx(hNewKey, TEXT("Dll"),
0, REG_SZ, (const BYTE *)strDll, 20*sizeof(TCHAR) )){
RegCloseKey(hNewKey);
return FALSE;
}
if(ERROR_SUCCESS != RegSetValueEx(hNewKey, TEXT("Entry"),
0, REG_SZ, (const BYTE *)strEntry, 20*sizeof(TCHAR) )){
RegCloseKey( hNewKey );
return FALSE;
}
RegCloseKey( hNewKey );
//Create equivalent driver registry entry
memset(strDll,0x0,20*sizeof(TCHAR));
memset(strEntry,0x0,20*sizeof(TCHAR));
wcscpy(strDll,TEXT("pcc_dummydr.dll"));
wcscpy(strEntry,TEXT("tst"));
if(ERROR_SUCCESS != RegCreateKeyEx( HKEY_LOCAL_MACHINE, PCCLEGACY_DUMMY_DRVENTRY,
0, TEXT(""), 0,
0, NULL,
&hNewKey2, &dwDisposition )){
return FALSE;
}
if(ERROR_SUCCESS != RegSetValueEx(hNewKey2, DEVLOAD_DLLNAME_VALNAME,
0, DEVLOAD_DLLNAME_VALTYPE, (const BYTE *)strDll, (wcslen(strDll)+1)*sizeof(TCHAR)) ){
RegCloseKey(hNewKey2);
return FALSE;
}
if(ERROR_SUCCESS != RegSetValueEx(hNewKey2, DEVLOAD_PREFIX_VALNAME,
0,DEVLOAD_PREFIX_VALTYPE, (const BYTE *)strEntry, (wcslen(strEntry)+1)*sizeof(TCHAR) )){
RegCloseKey(hNewKey2);
return FALSE;
}
RegCloseKey( hNewKey2 );
return TRUE;
}
BOOL
UpdateLegacyRegistry(){
CRegManipulate RegMani(HKEY_LOCAL_MACHINE);
//make a backup for PCCARD16bit registry template
if(RegMani.CopyAKey(PCCLEGACY_BACKUP_PATH, PCCLEGACY_SOURCE_PATH) == FALSE){
g_pKato->Log(LOG_DETAIL, _T("Can not make a backup of PCCard 16bit driver related registry!"));
return FALSE;
}
//make a backup for old pcmcia registry
if(RegMani.CopyAKey(PCCOLD_BACKUP_PATH, PCCOLD_SOURCE_PATH) == FALSE){
g_pKato->Log(LOG_DETAIL, _T("Can not make a backup of PCMCIA old driver related registry!"));
return FALSE;
}
//make a temp backup for PCCARD legacy registry
if(RegMani.CopyAKey(PCCLEGACY_PCM_BACKUP_PATH, PCCLEGACY_PCM_SOURCE_PATH) == FALSE){
g_pKato->Log(LOG_DETAIL, _T("Can not make a backup of PCCard legacy driver related registry!"));
return FALSE;
}
//delete original template
if(RegMani.DeleteAKey(PCCLEGACY_SOURCE_PATH) == FALSE){
g_pKato->Log(LOG_DETAIL, _T("Can not delete template!"));
return FALSE;
}
//delete old PCMCIA registry
if(RegMani.DeleteAKey(PCCOLD_SOURCE_PATH) == FALSE){
g_pKato->Log(LOG_DETAIL, _T("Can not old PCMCIA registry!"));
return FALSE;
}
//restore the PCMCIA legacy registry
if(RegMani.CopyAKey( PCCLEGACY_PCM_SOURCE_PATH, PCCLEGACY_PCM_BACKUP_PATH) == FALSE){
g_pKato->Log(LOG_DETAIL, _T("Can not make a backup of PCCard legacy driver related registry!"));
return FALSE;
}
//delete the temp backup for PCCARD legacy registry
if(RegMani.DeleteAKey(PCCLEGACY_PCM_BACKUP_PATH) == FALSE){
g_pKato->Log(LOG_DETAIL, _T("Can not delete template!"));
return FALSE;
}
if(AddDummyEntry() == FALSE){
g_pKato->Log(LOG_DETAIL, _T("Can not add dummy driver entry!"));
return FALSE;
}
return TRUE;
}
BOOL
RestoreLegacytRegistry(){
CRegManipulate RegMani(HKEY_LOCAL_MACHINE);
PREG_KEY_INFO pKeyInfo = NULL;
U_ITEM u = {0};
//delete dummy driver entry, it might not exist so ignore false return
RegMani.DeleteAKey(PCCLEGACY_DUMMY_DRVENTRY);
//only do this if backup key exists
if(RegMani.IsAKeyValidate(PCCLEGACY_BACKUP_PATH) == TRUE){
//delete original template
if(RegMani.DeleteAKey(PCCLEGACY_SOURCE_PATH) == FALSE){
g_pKato->Log(LOG_DETAIL, _T("Can not delete template!"));
return FALSE;
}
//restore template key
if(RegMani.CopyAKey(PCCLEGACY_SOURCE_PATH, PCCLEGACY_BACKUP_PATH) == FALSE){
g_pKato->Log(LOG_DETAIL, _T("Can not restore PCCard 16bit driver related registry!"));
return FALSE;
}
//delete backup template
if(RegMani.DeleteAKey(PCCLEGACY_BACKUP_PATH) == FALSE){
g_pKato->Log(LOG_DETAIL, _T("Can not delete backup template!"));
}
}
if(RegMani.IsAKeyValidate(PCCOLD_BACKUP_PATH) == TRUE){
//delete original old pcmcia driver
if(RegMani.DeleteAKey(PCCOLD_SOURCE_PATH) == FALSE){//ignore this, it might not exist
g_pKato->Log(LOG_DETAIL, _T("Can not delete old pcmcia registry!"));
}
//restore pcmcia key
if(RegMani.CopyAKey(PCCOLD_SOURCE_PATH, PCCOLD_BACKUP_PATH) == FALSE){
g_pKato->Log(LOG_DETAIL, _T("Can not restore old pcmcia driver related registry!"));
return FALSE;
}
//delete backup pcmcia key
if(RegMani.DeleteAKey(PCCOLD_BACKUP_PATH) == FALSE){
g_pKato->Log(LOG_DETAIL, _T("Can not delete backup pcmcia key!"));
}
}
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -