在以下示例中,服务配置程序使用OpenService函数获取对已安装服务对象的SERVICE_QUERY_CONFIG访问权限的句柄。然后程序使用QueryServiceConfig函数中的服务对象句柄来检索服务的当前配置。
VOID GetSampleServiceConfig()
{
LPQUERY_SERVICE_CONFIG lpqscBuf;
DWORD dwBytesNeeded;
//打开服务的句柄。
schService = OpenService(
schSCManager, // SCManager数据库
TEXT("Sample_Srv"), //服务名称
SERVICE_QUERY_CONFIG); //需要QUERY访问
if (schService == NULL)
MyErrorExit("OpenService");
//为信息配置分配一个缓冲区。
lpqscBuf = (LPQUERY_SERVICE_CONFIG) LocalAlloc(
LPTR, 4096);
if (lpqscBuf == NULL)
MyErrorExit("LocalAlloc");
//获取并打印信息配置。
if(!QueryServiceConfig
schService,
lpqscBuf,
4096,
& dwBytesNeeded))
{
MyErrorExit("QueryServiceConfig");
}
printf("\nSample_Srv configuration: \n");
printf(" Type: 0x%x\n", lpqscBuf->dwServiceType);
printf(" Start Type: 0x%x\n", lpqscBuf->dwStartType);
printf(" Err Control: 0x%x\n", lpqscBuf->dwErrorControl);
printf(" Binary path: %s\n", lpqscBuf->lpBinaryPathName);
if (lpqscBuf->lpLoadOrderGroup != NULL)
printf(“加载订单组:%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(“起始名称:%s \\ n”,
lpqscBuf->lpServiceStartName);
LocalFree(lpqscBuf);
}