GetServiceKeyName 返回空的服务名称

GetServiceKeyName returns empty service name

本文关键字:服务 返回 GetServiceKeyName      更新时间:2023-10-16

我正在尝试使用以下代码在C++中使用 winapi 函数 GetServiceKeyName 从显示名称中获取服务名称:

SC_HANDLE hSCManager = OpenSCManager(NULL,
NULL, // service control manager database
SC_MANAGER_CONNECT | SC_MANAGER_ENUMERATE_SERVICE |SC_MANAGER_QUERY_LOCK_STATUS | STANDARD_RIGHTS_READ);
LPTSTR lpServiceName;
LPCTSTR lpDisplayName = L"My service";
DWORD dwSizeNeeded = sizeof(lpDisplayName);
GetServiceKeyName(hSCManager, lpDisplayName, lpServiceName, &dwSizeNeeded);

完成后,dwSizeNeed有15作为值,lpServiceName有"。我在哪里调用这个函数有误?这里需要什么特别的权利吗?这里的不便是这个应用程序没有管理员权限,所以我不能(我猜(设置SC_MANAGER_ALL_ACCESS。当然,我的服务已在系统中启动并运行,因此我的显示名称还不错。

需要修改两行:

...
TCHAR lpServiceName[512];
DWORD dwSizeNeeded = sizeof lpServcieName / sizeof lpServiceName[0];  // Number of elements in buffer
...

您还应该看到GetServiceKeyName返回的内容,因为这是成功与否的信号。 仅当GetServiceKeyName返回TRUE时,检查字符串才有效。