Changeset 2892 for trunk/src/kWorker/kWorker.c
- Timestamp:
- Sep 8, 2016, 5:03:19 AM (9 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/kWorker/kWorker.c
r2888 r2892 2527 2527 2528 2528 2529 /** Kernel32 - SetConsoleCtrlHandler(). */ 2530 static BOOL WINAPI kwSandbox_Kernel32_SetConsoleCtrlHandler(PHANDLER_ROUTINE pfnHandler, BOOL fAdd) 2531 { 2532 KW_LOG(("SetConsoleCtrlHandler(%p, %d) - ignoring\n")); 2533 return TRUE; 2534 } 2535 2536 2529 2537 /** The CRT internal __getmainargs() API. */ 2530 2538 static int __cdecl kwSandbox_msvcrt___getmainargs(int *pargc, char ***pargv, char ***penvp, … … 4180 4188 && pszExt[3] == '\0') 4181 4189 return K_TRUE; 4182 4183 4190 } 4184 4191 /* Misc starting with i. */ … … 4202 4209 return K_TRUE; 4203 4210 } 4211 } 4212 } 4213 /* Assembly header: .mac */ 4214 else if (chFirst == 'm' || chFirst == 'M') 4215 { 4216 char const chSecond = pszExt[1]; 4217 if (chSecond == 'a' || chSecond == 'A') 4218 { 4219 char const chThird = pszExt[2]; 4220 if ( (chThird == 'c' || chThird == 'C') 4221 && pszExt[3] == '\0') 4222 return K_TRUE; 4204 4223 } 4205 4224 } … … 4465 4484 return hFile; 4466 4485 } 4486 } 4487 /* These are for nasm and yasm header searching. Cache will already 4488 have checked the directories for the file, no need to call 4489 CreateFile to do it again. */ 4490 else if (enmError == KFSLOOKUPERROR_NOT_FOUND) 4491 { 4492 KWFS_LOG(("CreateFileA(%s) -> INVALID_HANDLE_VALUE, ERROR_FILE_NOT_FOUND\n", pszFilename)); 4493 return INVALID_HANDLE_VALUE; 4494 } 4495 else if ( enmError == KFSLOOKUPERROR_PATH_COMP_NOT_FOUND 4496 || enmError == KFSLOOKUPERROR_PATH_COMP_NOT_DIR) 4497 { 4498 KWFS_LOG(("CreateFileA(%s) -> INVALID_HANDLE_VALUE, ERROR_PATH_NOT_FOUND\n", pszFilename)); 4499 return INVALID_HANDLE_VALUE; 4467 4500 } 4468 4501 … … 6098 6131 { TUPLE("FlsFree"), NULL, (KUPTR)kwSandbox_Kernel32_FlsFree }, 6099 6132 6133 { TUPLE("SetConsoleCtrlHandler"), NULL, (KUPTR)kwSandbox_Kernel32_SetConsoleCtrlHandler }, 6134 6100 6135 #ifdef WITH_HASH_MD5_CACHE 6101 6136 { TUPLE("CryptCreateHash"), NULL, (KUPTR)kwSandbox_Advapi32_CryptCreateHash }, … … 6202 6237 { TUPLE("DeleteFileW"), NULL, (KUPTR)kwSandbox_Kernel32_DeleteFileW }, 6203 6238 #endif 6239 { TUPLE("SetConsoleCtrlHandler"), NULL, (KUPTR)kwSandbox_Kernel32_SetConsoleCtrlHandler }, 6204 6240 6205 6241 #ifdef WITH_HASH_MD5_CACHE … … 6211 6247 6212 6248 { TUPLE("RtlPcToFileHeader"), NULL, (KUPTR)kwSandbox_ntdll_RtlPcToFileHeader }, 6249 6213 6250 6214 6251 /* … … 6229 6266 /** Number of entries in g_aSandboxNativeReplacements. */ 6230 6267 KU32 const g_cSandboxNativeReplacements = K_ELEMENTS(g_aSandboxNativeReplacements); 6268 6269 6270 /** 6271 * Control handler. 6272 * 6273 * @returns TRUE if handled, FALSE if not. 6274 * @param dwCtrlType The signal. 6275 */ 6276 static BOOL WINAPI kwSandboxCtrlHandler(DWORD dwCtrlType) 6277 { 6278 switch (dwCtrlType) 6279 { 6280 case CTRL_C_EVENT: 6281 fprintf(stderr, "kWorker: Ctrl-C\n"); 6282 exit(9); 6283 break; 6284 6285 case CTRL_BREAK_EVENT: 6286 fprintf(stderr, "kWorker: Ctrl-Break\n"); 6287 exit(10); 6288 break; 6289 6290 case CTRL_CLOSE_EVENT: 6291 fprintf(stderr, "kWorker: console closed\n"); 6292 exit(11); 6293 break; 6294 6295 case CTRL_LOGOFF_EVENT: 6296 fprintf(stderr, "kWorker: logoff event\n"); 6297 exit(11); 6298 break; 6299 6300 case CTRL_SHUTDOWN_EVENT: 6301 fprintf(stderr, "kWorker: shutdown event\n"); 6302 exit(11); 6303 break; 6304 6305 default: 6306 fprintf(stderr, "kwSandboxCtrlHandler: %#x\n", dwCtrlType); 6307 break; 6308 } 6309 return TRUE; 6310 } 6231 6311 6232 6312 … … 7224 7304 7225 7305 /* 7306 * Register our Control-C and Control-Break handlers. 7307 */ 7308 if (!SetConsoleCtrlHandler(kwSandboxCtrlHandler, TRUE /*fAdd*/)) 7309 return kwErrPrintfRc(3, "SetConsoleCtrlHandler failed: %u\n", GetLastError()); 7310 7311 /* 7226 7312 * Create the cache and mark the temporary directory as using the custom revision. 7227 7313 */
Note:
See TracChangeset
for help on using the changeset viewer.