Ignore:
Timestamp:
Sep 8, 2016, 5:03:19 AM (9 years ago)
Author:
bird
Message:

ctrl-c + assembly headers

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/kWorker/kWorker.c

    r2888 r2892  
    25272527
    25282528
     2529/** Kernel32 - SetConsoleCtrlHandler(). */
     2530static 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
    25292537/** The CRT internal __getmainargs() API. */
    25302538static int __cdecl kwSandbox_msvcrt___getmainargs(int *pargc, char ***pargv, char ***penvp,
     
    41804188            && pszExt[3] == '\0')
    41814189            return K_TRUE;
    4182 
    41834190    }
    41844191    /* Misc starting with i. */
     
    42024209                    return K_TRUE;
    42034210            }
     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;
    42044223        }
    42054224    }
     
    44654484                                return hFile;
    44664485                            }
     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;
    44674500                        }
    44684501
     
    60986131    { TUPLE("FlsFree"),                     NULL,       (KUPTR)kwSandbox_Kernel32_FlsFree },
    60996132
     6133    { TUPLE("SetConsoleCtrlHandler"),       NULL,       (KUPTR)kwSandbox_Kernel32_SetConsoleCtrlHandler },
     6134
    61006135#ifdef WITH_HASH_MD5_CACHE
    61016136    { TUPLE("CryptCreateHash"),             NULL,       (KUPTR)kwSandbox_Advapi32_CryptCreateHash },
     
    62026237    { TUPLE("DeleteFileW"),                 NULL,       (KUPTR)kwSandbox_Kernel32_DeleteFileW },
    62036238#endif
     6239    { TUPLE("SetConsoleCtrlHandler"),       NULL,       (KUPTR)kwSandbox_Kernel32_SetConsoleCtrlHandler },
    62046240
    62056241#ifdef WITH_HASH_MD5_CACHE
     
    62116247
    62126248    { TUPLE("RtlPcToFileHeader"),           NULL,       (KUPTR)kwSandbox_ntdll_RtlPcToFileHeader },
     6249
    62136250
    62146251    /*
     
    62296266/** Number of entries in g_aSandboxNativeReplacements. */
    62306267KU32 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 */
     6276static 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}
    62316311
    62326312
     
    72247304
    72257305    /*
     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    /*
    72267312     * Create the cache and mark the temporary directory as using the custom revision.
    72277313     */
Note: See TracChangeset for help on using the changeset viewer.