You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mt...@apache.org on 2009/10/10 14:02:39 UTC

svn commit: r823846 - in /commons/sandbox/runtime/trunk/src/main/native: Makefile.msc.in os/win32/scm.c os/win32/wmi.cpp os/win32/wmiapi.c

Author: mturk
Date: Sat Oct 10 12:02:39 2009
New Revision: 823846

URL: http://svn.apache.org/viewvc?rev=823846&view=rev
Log:
Add few more stub files

Added:
    commons/sandbox/runtime/trunk/src/main/native/os/win32/scm.c   (with props)
    commons/sandbox/runtime/trunk/src/main/native/os/win32/wmi.cpp   (with props)
    commons/sandbox/runtime/trunk/src/main/native/os/win32/wmiapi.c   (with props)
Modified:
    commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in

Modified: commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in?rev=823846&r1=823845&r2=823846&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in (original)
+++ commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in Sat Oct 10 12:02:39 2009
@@ -125,6 +125,7 @@
 	$(SRCDIR)/os/win32/pipe.$(OBJ) \
 	$(SRCDIR)/os/win32/posix.$(OBJ) \
 	$(SRCDIR)/os/win32/registry.$(OBJ) \
+	$(SRCDIR)/os/win32/scm.$(OBJ) \
 	$(SRCDIR)/os/win32/secmem.$(OBJ) \
 	$(SRCDIR)/os/win32/sema.$(OBJ) \
 	$(SRCDIR)/os/win32/service.$(OBJ) \
@@ -140,6 +141,8 @@
 	$(SRCDIR)/os/win32/uuid.$(OBJ) \
 	$(SRCDIR)/os/win32/variant.$(OBJ) \
 	$(SRCDIR)/os/win32/volume.$(OBJ) \
+	$(SRCDIR)/os/win32/wmi.$(OBJ) \
+	$(SRCDIR)/os/win32/wmiapi.$(OBJ) \
 	$(SRCDIR)/os/win32/wutil.$(OBJ) \
 	$(SRCDIR)/os/win32/wusec.$(OBJ)
 

Added: commons/sandbox/runtime/trunk/src/main/native/os/win32/scm.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/scm.c?rev=823846&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/scm.c (added)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/scm.c Sat Oct 10 12:02:39 2009
@@ -0,0 +1,29 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "acr.h"
+#include "acr_private.h"
+#include "acr_arch.h"
+#include "acr_arch_service.h"
+#include "acr_clazz.h"
+#include "acr_error.h"
+#include "acr_memory.h"
+#include "acr_string.h"
+#include "acr_tlsd.h"
+#include "acr_vm.h"
+
+/* Service Control Manager windows implementation
+ */

Propchange: commons/sandbox/runtime/trunk/src/main/native/os/win32/scm.c
------------------------------------------------------------------------------
    svn:eol-style = native

Added: commons/sandbox/runtime/trunk/src/main/native/os/win32/wmi.cpp
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/wmi.cpp?rev=823846&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/wmi.cpp (added)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/wmi.cpp Sat Oct 10 12:02:39 2009
@@ -0,0 +1,275 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "acr.h"
+#include "acr_private.h"
+#include "acr_arch.h"
+#include "acr_arch_service.h"
+#include "acr_clazz.h"
+#include "acr_error.h"
+#include "acr_memory.h"
+#include "acr_string.h"
+#include "acr_tlsd.h"
+#include "acr_vm.h"
+
+#include <comdef.h>
+#include <wbemidl.h>
+#pragma comment(lib, "wbemuuid.lib")
+
+typedef struct {
+    IWbemLocator            *pLoc;
+    IWbemServices           *pSvc;
+    IEnumWbemClassObject    *pEnumerator;
+    IWbemClassObject        *pclsObj;
+    IWbemClassObject        *pclsInstance;
+    IWbemClassObject        *pInParams;
+    IWbemClassObject        *pOutParams;
+    ULONG                    dwCount;
+} wmi_data_t;
+
+#define DEFAULT_WMI_NS      L"ROOT\\CIMV2"
+
+static int cosec_inited = 0;
+
+extern "C"
+void *wmi_intialize(JNIEnv *_E, const jchar *ns, jsize nsl)
+{
+    wmi_data_t *wd;
+    HRESULT hres;
+
+    if (!ns) {
+        ns = DEFAULT_WMI_NS;
+        nsl = (sizeof(DEFAULT_WMI_NS) - 1) / sizeof(WCHAR);
+    }
+    // Step 1: --------------------------------------------------
+    // Initialize COM. ------------------------------------------
+
+    hres =  CoInitializeEx(0, COINIT_MULTITHREADED);
+    if (FAILED(hres)) {
+        throwAprException(_E, APR_FROM_OS_ERROR(hres));
+        return NULL;
+    }
+
+    // Step 2: --------------------------------------------------
+    // Set general COM security levels --------------------------
+    // Note: If you are using Windows 2000, you need to specify -
+    // the default authentication credentials for a user by using
+    // a SOLE_AUTHENTICATION_LIST structure in the pAuthList ----
+    // parameter of CoInitializeSecurity ------------------------
+    if (!cosec_inited) {
+        hres =  CoInitializeSecurity(
+            NULL,
+            -1,                          // COM authentication
+            NULL,                        // Authentication services
+            NULL,                        // Reserved
+            RPC_C_AUTHN_LEVEL_DEFAULT,   // Default authentication
+            RPC_C_IMP_LEVEL_IMPERSONATE, // Default Impersonation
+            NULL,                        // Authentication info
+            EOAC_NONE,                   // Additional capabilities
+            NULL                         // Reserved
+            );
+        if (FAILED(hres)) {
+            throwAprException(_E, APR_FROM_OS_ERROR(hres));
+            CoUninitialize();
+            return NULL;                 // Program has failed.
+        }
+        cosec_inited = 1;
+    }
+
+    if (!(wd = ACR_CALLOC(wmi_data_t, 1) {
+        return NULL;
+    }
+    hres = CoCreateInstance(
+                CLSID_WbemLocator,
+                0,
+                CLSCTX_INPROC_SERVER,
+                IID_IWbemLocator, (LPVOID *)&wd->pLoc);
+
+    if (FAILED(hres)) {
+        throwAprException(_E, APR_FROM_OS_ERROR(hres));
+        wd->pLoc = NULL;
+        free(wd);
+        return NULL;
+    }
+
+    BSTR bns = SysAllocStringLen(ns, nsl);
+    // Connect to the root\cimv2 namespace with the
+    // current user and obtain pointer pSvc
+    // to make IWbemServices calls.
+
+    hres = wd->pLoc->ConnectServer(
+        bns,                        // WMI namespace
+        NULL,                       // User name
+        NULL,                       // User password
+        0,                          // Locale
+        NULL,                       // Security flags
+        0,                          // Authority
+        0,                          // Context object
+        &wd->pSvc                   // IWbemServices proxy
+        );
+    SysFreeString(bns);
+    if (FAILED(hres)) {
+        throwAprException(_E, APR_FROM_OS_ERROR(hres));
+        wd->pLoc->Release();
+        CoUninitialize();
+        wd->pLoc = NULL;
+        wd->pSvc = NULL;
+        goto cleanup;
+    }
+
+    // Set the IWbemServices proxy so that impersonation
+    // of the user (client) occurs.
+    hres = CoSetProxyBlanket(
+        wd->pSvc,                   // the proxy to set
+        RPC_C_AUTHN_WINNT,          // authentication service
+        RPC_C_AUTHZ_NONE,           // authorization service
+        NULL,                       // Server principal name
+        RPC_C_AUTHN_LEVEL_CALL,     // authentication level
+        RPC_C_IMP_LEVEL_IMPERSONATE,// impersonation level
+        NULL,                       // client identity
+        EOAC_NONE                   // proxy capabilities
+    );
+
+    if (FAILED(hres)) {
+        throwAprException(_E, APR_FROM_OS_ERROR(hres));
+        wd->pSvc->Release();
+        wd->pLoc->Release();
+        CoUninitialize();
+        wd->pLoc = NULL;
+        wd->pSvc = NULL;
+        goto cleanup;
+    }
+
+    return wd;
+cleanup:
+    x_free(wd);
+    return NULL;
+}
+
+extern "C"
+void wmi_terminate(void *wmi)
+{
+    wmi_data_t *wd = (wmi_data_t *)wmi;
+
+    if (!wd)
+        return;
+    if (wd->pEnumerator)
+        wd->pEnumerator->Release();
+    if (wd->pInParams)
+        wd->pInParams->Release();
+    if (wd->pOutParams)
+        wd->pOutParams->Release();
+    if (wd->pclsObj)
+        wd->pclsObj->Release();
+    if (wd->pSvc)
+        wd->pSvc->Release();
+    if (wd->pLoc)
+        wd->pLoc->Release();
+    CoUninitialize();
+    free(wd);
+}
+
+extern "C"
+int wmi_query(void *wmi, const jchar *lang, jsize langl,
+              const jchar *query, jsize queryl)
+{
+    HRESULT hres;
+    wmi_data_t *wd = (wmi_data_t *)wmi;
+
+    if (!wd)
+        return APR_EINVAL;
+    if (wd->pEnumerator)
+        wd->pEnumerator->Release();
+    BSTR blang  = SysAllocStringLen(lang, langl);
+    BSTR bquery = SysAllocStringLen(query, queryl);
+    hres = wd->pSvc->ExecQuery(
+        blang,
+        bquery,
+        WBEM_FLAG_FORWARD_ONLY | WBEM_FLAG_RETURN_IMMEDIATELY,
+        NULL,
+        &wd->pEnumerator);
+    SysFreeString(blang);
+    SysFreeString(bquery);
+    if (FAILED(hres)) {
+        wd->pEnumerator = NULL;
+        return APR_FROM_OS_ERROR(hres);
+    }
+
+    return APR_SUCCESS;
+}
+
+extern "C"
+int wmi_query_next(void *wmi)
+{
+    HRESULT hres;
+    wmi_data_t *wd = (wmi_data_t *)wmi;
+
+    if (!wd || !wd->pEnumerator)
+        return APR_EINVAL;
+
+    hres = wd->pEnumerator->Next(
+        WBEM_INFINITE,
+        1,
+        &wd->pclsObj,
+        &wd->dwCount);
+
+    if (SUCCEEDED(hres)) {
+        if (wd->dwCount)
+            return APR_SUCCESS;
+        else
+            return APR_EOF;
+    }
+    else
+        return APR_EOF;
+}
+
+extern "C"
+int wmi_query_skip(void *wmi, int count)
+{
+    HRESULT hres;
+    wmi_data_t *wd = (wmi_data_t *)wmi;
+
+    if (!wd || !wd->pEnumerator)
+        return APR_EINVAL;
+
+    hres = wd->pEnumerator->Skip(
+        WBEM_INFINITE,
+        count);
+
+    if (SUCCEEDED(hres)) {
+        return APR_SUCCESS;
+    }
+    else
+        return APR_EOF;
+}
+
+extern "C"
+int wmi_query_reset(void *wmi)
+{
+    HRESULT hres;
+    wmi_data_t *wd = (wmi_data_t *)wmi;
+
+    if (!wd || !wd->pEnumerator)
+        return APR_EINVAL;
+
+    hres = wd->pEnumerator->Reset();
+
+    if (SUCCEEDED(hres)) {
+        return APR_SUCCESS;
+    }
+    else
+        return APR_EOF;
+}

Propchange: commons/sandbox/runtime/trunk/src/main/native/os/win32/wmi.cpp
------------------------------------------------------------------------------
    svn:eol-style = native

Added: commons/sandbox/runtime/trunk/src/main/native/os/win32/wmiapi.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/wmiapi.c?rev=823846&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/wmiapi.c (added)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/wmiapi.c Sat Oct 10 12:02:39 2009
@@ -0,0 +1,30 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include "acr.h"
+#include "acr_private.h"
+#include "acr_arch.h"
+#include "acr_arch_service.h"
+#include "acr_clazz.h"
+#include "acr_error.h"
+#include "acr_memory.h"
+#include "acr_string.h"
+#include "acr_tlsd.h"
+#include "acr_vm.h"
+
+/*
+ * WMI API
+ */

Propchange: commons/sandbox/runtime/trunk/src/main/native/os/win32/wmiapi.c
------------------------------------------------------------------------------
    svn:eol-style = native