📄 shellproc.cpp
字号:
//Free PCMCIA.dll
if(hInst)
FreeLibrary(hInst);
Restore16BitRegistry();
PC32bitWR_DeInit();
return SPR_HANDLED;
// --------------------------------------------------------------------
// Message: SPM_SHELL_INFO
//
case SPM_SHELL_INFO:
DEBUGMSG(ZONE_FUNCTION, (_T("ShellProc(SPM_SHELL_INFO, ...) called")));
// Store a pointer to our shell info for later use.
g_pShellInfo = (LPSPS_SHELL_INFO)spParam;
if( g_pShellInfo->szDllCmdLine && *g_pShellInfo->szDllCmdLine ){
// Display our Dlls command line if we have one.
g_pKato->Log( LOG_DETAIL,
_T("Command Line: \"%s\"."), g_pShellInfo->szDllCmdLine);
ProcessCmdLine(g_pShellInfo->szDllCmdLine);
}
return SPR_HANDLED;
// --------------------------------------------------------------------
// Message: SPM_REGISTER
//
case SPM_REGISTER:
DEBUGMSG(ZONE_FUNCTION, (_T("ShellProc(SPM_REGISTER, ...) called")));
((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;
}
}
VOID
ProcessCmdLine(LPCTSTR szCmdLine){
LPCTSTR pCmdLine = NULL;
if(szCmdLine == NULL) //no command line
return;
NKDbgPrintfW(_T("Command line is: %s"), szCmdLine);
return;
}
#define PCC16BIT_SOURCE_PATH _T("\\Drivers\\PCCARD\\PCMCIA\\TEMPLATE")
#define PCC16BIT_BACKUP_PATH _T("\\Drivers\\PCCARD\\PCMCIA\\TEMPLATEBACKUP")
#define PCC16BIT_TEST_NAME _T("TEST")
#define PCC16BIT_DLL_NAME _T("Dll")
#define PCC16BIT_DLL_VALUE _T("pcc_dummydr.dll")
#define PCC16BIT_NOCONFIG_NAME _T("NoConfig")
#define PCC16BIT_NOCONFIG_VALUE 1
BOOL
Update16BitRegistry(){
CRegManipulate RegMani(HKEY_LOCAL_MACHINE);
PREG_KEY_INFO pKeyInfo = NULL;
U_ITEM u = {0};
//make a backup for PCCARD16bit registry template
if(RegMani.CopyAKey(PCC16BIT_BACKUP_PATH, PCC16BIT_SOURCE_PATH) == FALSE){
g_pKato->Log(LOG_DETAIL, _T("Can not make a backup of PCCard 16bit driver related registry!"));
return FALSE;
}
//create the test template key
pKeyInfo = new REG_KEY_INFO;
if(pKeyInfo == NULL){
g_pKato->Log(LOG_DETAIL, _T("Out of memory!"));
return FALSE;
}
memset(pKeyInfo, 0, sizeof(REG_KEY_INFO));
wcscpy(pKeyInfo->szRegPath, PCC16BIT_SOURCE_PATH);
wcscat(pKeyInfo->szRegPath, _T("\\"));
wcscat(pKeyInfo->szRegPath, PCC16BIT_TEST_NAME);
wcscpy(u.szData, PCC16BIT_DLL_VALUE);
RegMani.AddKeyValue(pKeyInfo, PCC16BIT_DLL_NAME, REG_SZ, wcslen(PCC16BIT_DLL_VALUE)*sizeof(TCHAR), u);
memset(&u, 0, sizeof(u));
u.dwData = 1;
RegMani.AddKeyValue(pKeyInfo, PCC16BIT_NOCONFIG_NAME, REG_DWORD, sizeof(DWORD), u);
//delete original template
if(RegMani.DeleteAKey(PCC16BIT_SOURCE_PATH) == FALSE){
g_pKato->Log(LOG_DETAIL, _T("Can not delete template!"));
delete pKeyInfo;
return FALSE;
}
//create test template
if(RegMani.SetAKey(pKeyInfo, TRUE) == FALSE){
g_pKato->Log(LOG_DETAIL, _T("Can not set testtemplate!"));
delete pKeyInfo;
return FALSE;
}
delete pKeyInfo;
return TRUE;
}
BOOL
Restore16BitRegistry(){
CRegManipulate RegMani(HKEY_LOCAL_MACHINE);
PREG_KEY_INFO pKeyInfo = NULL;
U_ITEM u = {0};
//only do this if backup key exists
if(RegMani.IsAKeyValidate(PCC16BIT_BACKUP_PATH) == TRUE){
//delete original template
if(RegMani.DeleteAKey(PCC16BIT_SOURCE_PATH) == FALSE){
g_pKato->Log(LOG_DETAIL, _T("Can not delete template!"));
return FALSE;
}
//restore template key
if(RegMani.CopyAKey(PCC16BIT_SOURCE_PATH, PCC16BIT_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(PCC16BIT_BACKUP_PATH) == FALSE){
g_pKato->Log(LOG_DETAIL, _T("Can not delete backup template!"));
}
}
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -