Platform SDK: DLLs, Processes, and Threads |
In the following example, a service configuration program uses the OpenService function to get a handle with SERVICE_QUERY_CONFIG access to an installed service object. Then the program uses the service object handle in the QueryServiceConfig function to retrieve the current configuration of the service.
VOID GetSampleServiceConfig() { LPQUERY_SERVICE_CONFIG lpqscBuf; LPSERVICE_DESCRIPTION lpqscBuf2; DWORD dwBytesNeeded; // Open a handle to the service. schService = OpenService( schSCManager, // SCManager database "Sample_Srv", // name of service SERVICE_QUERY_CONFIG); // need QUERY access if (schService == NULL) MyErrorExit("OpenService"); // Allocate a buffer for the configuration information. lpqscBuf = (LPQUERY_SERVICE_CONFIG) LocalAlloc( LPTR, 4096); if (lpqscBuf == NULL) MyErrorExit("LocalAlloc"); lpqscBuf2 = (LPSERVICE_DESCRIPTION) LocalAlloc( LPTR, 4096); if (lpqscBuf2 == NULL) MyErrorExit("LocalAlloc"); // Get the configuration information. if (! QueryServiceConfig( schService, lpqscBuf, 4096, &dwBytesNeeded) ) { MyErrorExit("QueryServiceConfig"); } if (! QueryServiceConfig2( schService, SERVICE_CONFIG_DESCRIPTION, lpqscBuf2, 4096, &dwBytesNeeded) ) { MyErrorExit("QueryServiceConfig2"); } // Print the configuration information. printf("\nSample_Srv configuration: \n"); printf(" Type: 0x%x\n", lpqscBuf->dwServiceType); printf(" Start Type: 0x%x\n", lpqscBuf->dwStartType); printf(" Error Control: 0x%x\n", lpqscBuf->dwErrorControl); printf(" Binary path: %s\n", lpqscBuf->lpBinaryPathName); if (lpqscBuf->lpLoadOrderGroup != NULL) printf(" Load order group: %s\n", lpqscBuf->lpLoadOrderGroup); if (lpqscBuf->dwTagId != 0) printf(" Tag ID: %d\n", lpqscBuf->dwTagId); if (lpqscBuf->lpDependencies != NULL) printf(" Dependencies: %s\n", lpqscBuf->lpDependencies); if (lpqscBuf->lpServiceStartName != NULL) printf(" Start Name: %s\n", lpqscBuf->lpServiceStartName); if (lpqscBuf2->lpDescription != NULL) printf(" Description: %s\n", lpqscBuf2->lpDescription); LocalFree(lpqscBuf); LocalFree(lpqscBuf2); }