ChangeServiceConfig (advapi32)
Last changed: -90.242.135.188

.
Summary
TODO - a short description

C# Signature:

[DllImport("advapi32.dll", SetLastError=true)]
static extern TODO ChangeServiceConfig(TODO);

VB Signature:

Declare Function ChangeServiceConfig Lib "advapi32.dll" (TODO) As TODO

User-Defined Types:

None.

Alternative Managed API:

Do you know one? Please contribute it!

[DllImport("advapi32.dll", CharSet=CharSet.Unicode, SetLastError=true)]

public static extern Boolean ChangeServiceConfig(IntPtr hService, UInt32 nServiceType, UInt32 nStartType, UInt32 nErrorControl,

String lpBinaryPathName, String lpLoadOrderGroup, IntPtr lpdwTagId, String lpDependencies, String lpServiceStartName, String lpPassword, String lpDisplayName);

private const uint SERVICE_QUERY_CONFIG = 0x00000001;

private const uint SERVICE_CHANGE_CONFIG = 0x00000002;

private const uint SERVICE_QUERY_STATUS = 0x00000004;

private const uint SERVICE_ENUMERATE_DEPENDENTS = 0x00000008;

private const uint SERVICE_START = 0x00000010;

private const uint SERVICE_STOP = 0x00000020;

private const uint SERVICE_PAUSE_CONTINUE = 0x00000040;

private const uint SERVICE_INTERROGATE = 0x00000080;

private const uint SERVICE_USER_DEFINED_CONTROL = 0x00000100;

private const uint STANDARD_RIGHTS_REQUIRED = 0x000F0000;

private const uint SERVICE_ALL_ACCESS = ( STANDARD_RIGHTS_REQUIRED | SERVICE_QUERY_CONFIG |

                    SERVICE_CHANGE_CONFIG    |
                    SERVICE_QUERY_STATUS     |
                    SERVICE_ENUMERATE_DEPENDENTS |
                    SERVICE_START        |
                    SERVICE_STOP         |
                    SERVICE_PAUSE_CONTINUE       |
                    SERVICE_INTERROGATE      |
                    SERVICE_USER_DEFINED_CONTROL);

Notes:

To use this function, make sure you call OpenService with the SERVICE_CHANGE_CONFIG flag. Look at OpenService and QueryServiceConfig for more examples.

Tips & Tricks:

Remember that the cofiguration settings will only be in effect the next time the service is started.

Sample Code:

IntPtr databaseHandle = OpenSCManager(null, null, SC_MANAGER_ALL_ACCESS);

if(databaseHandle == IntPtr.Zero)

    throw new System.Runtime.InteropServices.ExternalException(m_sLib.getRes    (AdminStringLibrary.ERROR_OPEN_SERVICE_MANAGER));

m_pServiceHandle = OpenService(databaseHandle, strServiceName, SERVICE_QUERY_CONFIG | SERVICE_CHANGE_CONFIG);

if(m_pServiceHandle == IntPtr.Zero)

    throw new System.Runtime.InteropServices.ExternalException(String.Format(m_sLib.getRes    (AdminStringLibrary.ERROR_OPEN_SERVICE), m_strServiceName));

//This code is changing the password for the service.

if (!ChangeServiceConfig(m_pServiceHandle, SERVICE_NO_CHANGE, SERVICE_NO_CHANGE, SERVICE_NO_CHANGE, null, null,

IntPtr.Zero, null, null, value, null))

{

    int nError = Marshal.GetLastWin32Error();
    Win32Exception win32Exception = new Win32Exception(nError);
    throw new System.Runtime.InteropServices.ExternalException(String.Format(m_sLib.getRes    (AdminStringLibrary.COULDNOT_CHANGE_PASSWORD), m_strServiceName) +
        " : " + win32Exception.Message);

}

Documentation