Пример #1
0
static RPC_STATUS rpc_cancel_thread(DWORD target_tid)
{
    struct threaddata *tdata;

    EnterCriticalSection(&threaddata_cs);
    LIST_FOR_EACH_ENTRY(tdata, &threaddata_list, struct threaddata, entry)
        if (tdata->thread_id == target_tid)
        {
            EnterCriticalSection(&tdata->cs);
            if (tdata->connection) rpcrt4_conn_cancel_call(tdata->connection);
            LeaveCriticalSection(&tdata->cs);
            break;
        }
    LeaveCriticalSection(&threaddata_cs);

    return RPC_S_OK;
}
Пример #2
0
/******************************************************************************
 * RpcCancelThread   (rpcrt4.@)
 */
RPC_STATUS RPC_ENTRY RpcCancelThread(void* ThreadHandle)
{
    DWORD target_tid;
    struct threaddata *tdata;

    TRACE("(%p)\n", ThreadHandle);

    target_tid = GetThreadId(ThreadHandle);
    if (!target_tid)
        return RPC_S_INVALID_ARG;

    EnterCriticalSection(&threaddata_cs);
    LIST_FOR_EACH_ENTRY(tdata, &threaddata_list, struct threaddata, entry)
        if (tdata->thread_id == target_tid)
        {
            EnterCriticalSection(&tdata->cs);
            if (tdata->connection) rpcrt4_conn_cancel_call(tdata->connection);
            LeaveCriticalSection(&tdata->cs);
            break;
        }
    LeaveCriticalSection(&threaddata_cs);

    return RPC_S_OK;
}