Пример #1
0
JNIEXPORT jobject SIGAR_JNI(win32_Service_getServiceNames)
(JNIEnv *env, jclass, jobject sigar_obj, jstring jptql)
{
    DWORD status;
    jsigar_list_t obj;
    sigar_t *sigar = NULL;
    char *ptql = NULL;
    sigar_ptql_error_t error;
    sigar_services_walker_t walker;
    jboolean is_copy;

    if (sigar_obj) {
        if (!(sigar = jsigar_get_sigar(env, sigar_obj))) {
            return NULL;
        }
    }
    if (jptql) {
        ptql = (char *)env->GetStringUTFChars(jptql, &is_copy);
    }

    walker.sigar = sigar;
    walker.flags = SERVICE_STATE_ALL;
    walker.data = &obj;
    walker.add_service = jsigar_add_service;

    jsigar_list_init(env, &obj);

    status = sigar_services_query(ptql, &error, &walker);

    if (ptql && is_copy) {
        env->ReleaseStringUTFChars(jptql, ptql);
    }

    if (status != SIGAR_OK) {
        env->DeleteLocalRef(obj.obj);
        if (status == SIGAR_PTQL_MALFORMED_QUERY) {
            win32_throw_exception(env, error.message);
        }
        else {
            win32_throw_error(env, status);
        }
        return NULL;
    }

    return obj.obj;
}
Пример #2
0
JNIEXPORT jobject SIGAR_JNIx(getProcModulesNative)
(JNIEnv *env, jobject sigar_obj, jlong pid)
{
    int status;
    sigar_proc_modules_t procmods;
    jsigar_list_t obj;

    dSIGAR(NULL);

    jsigar_list_init(env, &obj);

    procmods.module_getter = jsigar_list_add;
    procmods.data = &obj;

    if ((status = sigar_proc_modules_get(sigar, pid, &procmods)) != SIGAR_OK) {
        JENV->DeleteLocalRef(env, obj.obj);
        sigar_throw_error(env, jsigar, status);
        return NULL;
    }

    return obj.obj;
}