public static ServiceManagerApi.LW_SERVICE_INFO ApiLwSmQueryServiceInfo(IntPtr phServiceHandle)
        {
            ServiceManagerApi.LW_SERVICE_INFO serviceInfo = new ServiceManagerApi.LW_SERVICE_INFO();
            IntPtr serviceInfoPtr = IntPtr.Zero;

            try
            {
                Logger.Log("ServiceManagerInteropWrapper:ApiLwSmQueryServiceInfo()", Logger.ServiceManagerLoglevel);

                int iRet = ServiceManagerInterop.LwSmQueryServiceInfo(phServiceHandle, out serviceInfoPtr);
                if (iRet != 0)
                {
                    Logger.Log("ServiceManagerInteropWrapper:ApiLwSmQueryServiceInfo returns" + iRet.ToString(), Logger.ServiceManagerLoglevel);
                    return(serviceInfo);
                }
                Logger.Log("ServiceManagerInteropWrapper:ApiLwSmQueryServiceInfo is success", Logger.ServiceManagerLoglevel);

                serviceInfo = ServiceManagerInterop.UnmarshalServiceInfo(serviceInfoPtr);
            }
            catch (Exception ex)
            {
                Logger.LogException("ServiceManagerInteropWrapper:ApiLwSmQueryServiceInfo", ex);
            }

            return(serviceInfo);
        }
Esempio n. 2
0
        public static ServiceManagerApi.LW_SERVICE_INFO UnmarshalServiceInfo(IntPtr pNativeData)
        {
            _LW_SERVICE_INFO _info = (_LW_SERVICE_INFO)Marshal.PtrToStructure(pNativeData, typeof(_LW_SERVICE_INFO));

            ServiceManagerApi.LW_SERVICE_INFO info = new ServiceManagerApi.LW_SERVICE_INFO();

            info.type              = _info.type;
            info.pwszName          = _info.pwszName;
            info.pwszPath          = _info.pwszPath;
            info.pwszDescription   = _info.pwszDescription;
            info.bAutostart        = _info.bAutostart;
            info.ppwszArgs         = ServiceManagerInterop.UnmarshalStringList(_info.ppwszArgs);
            info.ppwszDependencies = ServiceManagerInterop.UnmarshalStringList(_info.ppwszDependencies);

            return(info);
        }
Esempio n. 3
0
        public static IntPtr MarshalServiceInfo(object ManagedObj)
        {
            ServiceManagerApi.LW_SERVICE_INFO info = (ServiceManagerApi.LW_SERVICE_INFO)ManagedObj;
            _LW_SERVICE_INFO _info   = new _LW_SERVICE_INFO();
            IntPtr           infoPtr = Marshal.AllocHGlobal(Marshal.SizeOf(typeof(_LW_SERVICE_INFO)));

            _info.pwszName          = info.pwszName;
            _info.pwszPath          = info.pwszPath;
            _info.pwszDescription   = info.pwszDescription;
            _info.bAutostart        = info.bAutostart;
            _info.ppwszArgs         = ServiceManagerInterop.MarshalStringList(info.ppwszArgs);
            _info.ppwszDependencies = ServiceManagerInterop.MarshalStringList(info.ppwszDependencies);

            Marshal.StructureToPtr(_info, infoPtr, false);

            return(infoPtr);
        }
        public static int StartAllServiceDependencies(IntPtr pHandle, ref int iReturn)
        {
            try
            {
                if (pHandle != IntPtr.Zero)
                {
                    ServiceManagerApi.LW_SERVICE_INFO   serviceInfo   = ServiceManagerInteropWrapper.ApiLwSmQueryServiceInfo(pHandle);
                    ServiceManagerApi.LW_SERVICE_STATUS serviceStatus = ServiceManagerInteropWrapper.ApiLwSmQueryServiceStatus(pHandle);

                    if (serviceStatus.state == ServiceManagerApi.LW_SERVICE_STATE.LW_SERVICE_STATE_RUNNING)
                    {
                        Logger.Log("Dependency servcie: " + serviceInfo.pwszName + " running");
                        return(iReturn);
                    }

                    if (serviceInfo.ppwszDependencies != null && serviceInfo.ppwszDependencies.Length != 0)
                    {
                        foreach (string service in serviceInfo.ppwszDependencies)
                        {
                            Logger.Log("Dependency servcie: " + service);

                            IntPtr pDHandle = ServiceManagerInteropWrapper.ApiLwSmAcquireServiceHandle(service);
                            if (pDHandle != IntPtr.Zero)
                            {
                                ServiceManagerApi.LW_SERVICE_INFO   InnerServiceInfo = ServiceManagerInteropWrapper.ApiLwSmQueryServiceInfo(pDHandle);
                                ServiceManagerApi.LW_SERVICE_STATUS Status           = ServiceManagerInteropWrapper.ApiLwSmQueryServiceStatus(pDHandle);

                                if (InnerServiceInfo.ppwszDependencies == null || InnerServiceInfo.ppwszDependencies.Length == 0)
                                {
                                    if (Status.state != ServiceManagerApi.LW_SERVICE_STATE.LW_SERVICE_STATE_RUNNING)
                                    {
                                        iReturn = ServiceManagerInteropWrapper.ApiLwSmStartService(pDHandle);
                                        if (iReturn != 0)
                                        {
                                            return(iReturn);
                                        }
                                    }
                                    else
                                    {
                                        Logger.Log("Dependency servcie: " + service + " running");
                                    }
                                }
                                else
                                {
                                    StartAllServiceDependencies(pDHandle, ref iReturn);
                                    iReturn = ServiceManagerInteropWrapper.ApiLwSmStartService(pDHandle);
                                }
                                ServiceManagerInteropWrapper.ApiLwSmReleaseServiceHandle(pDHandle);
                            }
                        }
                        iReturn = ServiceManagerInteropWrapper.ApiLwSmStartService(pHandle);
                    }
                    else
                    {
                        if (serviceStatus.state != ServiceManagerApi.LW_SERVICE_STATE.LW_SERVICE_STATE_RUNNING)
                        {
                            iReturn = ServiceManagerInteropWrapper.ApiLwSmStartService(pHandle);
                        }
                    }
                }
            }
            catch (Exception ex)
            {
                Logger.LogException("ServiceManagerInteropWrapper:StartAllServiceDependencies", ex);
            }

            return(iReturn);
        }
        public static ServiceManagerApi.LW_SERVICE_INFO UnmarshalServiceInfo(IntPtr pNativeData)
        {
            _LW_SERVICE_INFO _info = (_LW_SERVICE_INFO) Marshal.PtrToStructure(pNativeData, typeof(_LW_SERVICE_INFO));
            ServiceManagerApi.LW_SERVICE_INFO info = new ServiceManagerApi.LW_SERVICE_INFO();

            info.type = _info.type;
            info.pwszName = _info.pwszName;
            info.pwszPath = _info.pwszPath;
            info.pwszDescription = _info.pwszDescription;
            info.bAutostart = _info.bAutostart;
            info.ppwszArgs = ServiceManagerInterop.UnmarshalStringList(_info.ppwszArgs);
            info.ppwszDependencies = ServiceManagerInterop.UnmarshalStringList(_info.ppwszDependencies);

            return info;
        }
        public static ServiceManagerApi.LW_SERVICE_INFO ApiLwSmQueryServiceInfo(IntPtr phServiceHandle)
        {
            ServiceManagerApi.LW_SERVICE_INFO serviceInfo = new ServiceManagerApi.LW_SERVICE_INFO();
            IntPtr serviceInfoPtr = IntPtr.Zero;
            try
            {
                Logger.Log("ServiceManagerInteropWrapper:ApiLwSmQueryServiceInfo()", Logger.ServiceManagerLoglevel);

                int iRet = ServiceManagerInterop.LwSmQueryServiceInfo(phServiceHandle, out serviceInfoPtr);
                if (iRet != 0)
                {
                    Logger.Log("ServiceManagerInteropWrapper:ApiLwSmQueryServiceInfo returns" + iRet.ToString(), Logger.ServiceManagerLoglevel);
                    return serviceInfo;
                }
                Logger.Log("ServiceManagerInteropWrapper:ApiLwSmQueryServiceInfo is success", Logger.ServiceManagerLoglevel);

                serviceInfo = ServiceManagerInterop.UnmarshalServiceInfo(serviceInfoPtr);
            }
            catch (Exception ex)
            {
                Logger.LogException("ServiceManagerInteropWrapper:ApiLwSmQueryServiceInfo", ex);
            }

            return serviceInfo;
        }