+#ifdef implemented
+VOID ReconfigureSampleService(BOOL fDisable, LPSTR lpDesc)
+{
+ SC_LOCK sclLock;
+ LPQUERY_SERVICE_LOCK_STATUS lpqslsBuf;
+ SERVICE_DESCRIPTION sdBuf;
+ DWORD dwBytesNeeded, dwStartType;
+
+ // Need to acquire database lock before reconfiguring.
+
+ sclLock = LockServiceDatabase(schSCManager);
+
+ // If the database cannot be locked, report the details.
+
+ if (sclLock == NULL)
+ {
+ // Exit if the database is not locked by another process.
+
+ if (GetLastError() != ERROR_SERVICE_DATABASE_LOCKED)
+ MyErrorExit("LockServiceDatabase");
+
+ // Allocate a buffer to get details about the lock.
+
+ lpqslsBuf = (LPQUERY_SERVICE_LOCK_STATUS) LocalAlloc(
+ LPTR, sizeof(QUERY_SERVICE_LOCK_STATUS)+256);
+ if (lpqslsBuf == NULL)
+ MyErrorExit("LocalAlloc");
+
+ // Get and print the lock status information.
+
+ if (!QueryServiceLockStatus(
+ schSCManager,
+ lpqslsBuf,
+ sizeof(QUERY_SERVICE_LOCK_STATUS)+256,
+ &dwBytesNeeded) )
+ MyErrorExit("QueryServiceLockStatus");
+
+ if (lpqslsBuf->fIsLocked)
+ printf("Locked by: %s, duration: %d seconds\n",
+ lpqslsBuf->lpLockOwner,
+ lpqslsBuf->dwLockDuration);
+ else
+ printf("No longer locked\n");
+
+ LocalFree(lpqslsBuf);
+ MyErrorExit("Could not lock database");
+ }
+
+ // The database is locked, so it is safe to make changes.
+
+ // Open a handle to the service.
+
+ schService = OpenService(
+ schSCManager, // SCManager database
+ "Sample_Srv", // name of service
+ SERVICE_CHANGE_CONFIG); // need CHANGE access
+ if (schService == NULL)
+ MyErrorExit("OpenService");
+
+ dwStartType = (fDisable) ? SERVICE_DISABLED :
+ SERVICE_DEMAND_START;
+
+ // Make the changes.
+
+ if (! ChangeServiceConfig(
+ schService, // handle of service
+ SERVICE_NO_CHANGE, // service type: no change
+ dwStartType, // change service start type
+ SERVICE_NO_CHANGE, // error control: no change
+ NULL, // binary path: no change
+ NULL, // load order group: no change
+ NULL, // tag ID: no change
+ NULL, // dependencies: no change
+ NULL, // account name: no change
+ NULL, // password: no change
+ NULL) ) // display name: no change
+ {
+ MyErrorExit("ChangeServiceConfig");
+ }
+ else
+ printf("ChangeServiceConfig SUCCESS\n");
+
+ sdBuf.lpDescription = lpDesc;
+
+ if( !ChangeServiceConfig2(
+ schService, // handle to service
+ SERVICE_CONFIG_DESCRIPTION // change: description
+ &sdBuf) ) // value: new description
+ {
+ MyErrorExit("ChangeServiceConfig2");
+ }
+ else
+ printf("ChangeServiceConfig2 SUCCESS\n");
+
+ // Release the database lock.
+
+ UnlockServiceDatabase(sclLock);
+
+ // Close the handle to the service.
+
+ CloseServiceHandle(schService);
+}
+#endif
+